【问题标题】:Linux: how to send TCP packet from specific port?Linux:如何从特定端口发送 TCP 数据包?
【发布时间】:2011-01-17 09:24:02
【问题描述】:

如何打开原始套接字以从特定 TCP 端口发送?我希望我的所有连接始终来自短暂以下的一系列端口。

【问题讨论】:

    标签: linux tcp


    【解决方案1】:

    如果你使用raw套接字,那么只需在数据包头中填写正确的TCP源端口即可。

    相反,如果您使用的是 TCP 套接字接口(@98​​7654322@、connect() 和朋友),那么您可以通过为客户端套接字调用 bind() 系统调用来设置源端口 - 与您所做的完全一样设置服务器套接字的监听端口。

    【讨论】:

    • struct sockaddr_in { 短 sin_family;无符号短 sin_port;结构 in_addr sin_addr; char sin_zero[8]; }; -- 在哪里设置端口?
    • @Erik,然后我做bind(),然后sin_port设置为服务器的端口,然后connect(),对吗?
    • 这是正确的。出于好奇,您为什么要使用原始套接字?
    【解决方案2】:

    使用原始套接字建立 tcp 连接既困难又不可能;您需要在您的程序中实现整个 tcp 协议并且还阻止内核向数据包发送自己的回复(如果内核在该接口上的该地址上绑定了 IP)。 p>

    这可能不是你想要的。但是,如果您确实想要它,使用您想要的任何源端口发送 tcp 帧是微不足道的,因为您可以在 tcp 标头中指定它,当然,如果您正在实现自己的 TCP 层,您将需要了解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2023-02-08
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      相关资源
      最近更新 更多