4

我正在尝试更改 tcp 数据包的源 IP 地址。代码片段如下所示

 bzero(&clientaddr,sizeof(clientaddr));
 clientaddr.sin_family = AF_INET;
 clientaddr.sin_addr.s_addr=inet_addr("172.16.2.10");
 clientaddr.sin_port=htons(8080);
 if (bind(sockfd, (struct sockaddr *) &clientaddr, 
   sizeof(clientaddr)) < 0) 
{
    perror("bind");
}

绑定特定端口工作正常,但是当我尝试使用不同的 ip 地址绑定时,绑定失败并出现错误

bind: Cannot assign requested address

我还尝试通过如下设置套接字选项,]

setsockopt (sockfd, SOL_IP, IP_TRANSPARENT, &n1, sizeof(int));*

然后它也因同样的错误而失败。

我如何更改来自我的 PC 的数据包的源 IP 地址。请帮助我,它用于代理应用程序。

操作系统:Linux 2.6.37-tproxy #1 SMP Wed Apr 3 23:34:00 IST 2013 x86_64 x86_64 x86_64 GNU/Linux

提前致谢。

4

2 回答 2

1

您将需要使用原始套接字并创建 ip 和 tcp 标头(您可以在其中设置所需的 IP 地址(欺骗)。

raw_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

您可以查看 linux 手册页man 7 raw

于 2013-09-27T12:48:27.633 回答
0

您只能bind()访问计算机本地的 IP 地址,即由您的网络接口之一实现。

于 2013-07-05T10:38:15.610 回答