首页 文章

在tcp客户端中调用bind()

提问于
浏览
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));*

然后它也失败了同样的错误 .

我怎么能改变我的源IP地址来源于我的PC . 请帮助我,它的代理申请 .

OS :Linux 2.6.37-tproxy#1 SMP Wed Apr 3 23:34:00 IST 2013 x86_64 x86_64 x86_64 GNU / Linux

提前致谢 .

2 回答

  • 0

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

    raw_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
    

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

  • 1

    您只能 bind() 到您的计算机本地的IP地址,即由您的某个网络接口实现 .

相关问题