繁体   English   中英

更改套接字sendto()中的源IP

Change Source IP in socket sendto()

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我的功能目前正常工作,但它从我的服务器发送主IP地址而不是另一个。

以下是代码片段:

void *sendpacket(void *par1)
{
        running_threads++;
        int thread_id = (int)par1;
        unsigned long start_ip = htonl(ntohl(start)+(per_thread*thread_id));
        unsigned long end = htonl(ntohl(start)+(per_thread*(thread_id+1)));
        unsigned long w;
        int y;
        unsigned char buf[65536];
        strcpy(buf, "M-SEARCH * HTTP/1.1\r\nHost:239.255.255.250:1900\r\nST:ssdp:all\r\nMan:\"ssdp:discover\"\r\nMX:3\r\n\r\n");
        int sizeofpayload = 90;
        int sock;
        if((sock=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))<0) {
                perror("cant open socket");
                exit(-1);
        }
        for(w=ntohl(start_ip);w<htonl(end);w++)
        {
                struct sockaddr_in servaddr;
                bzero(&servaddr, sizeof(servaddr));
                servaddr.sin_family = AF_INET;
                servaddr.sin_addr.s_addr=htonl(w);
                servaddr.sin_port=htons(1900);
                sendto(sock,(char *)buf,sizeofpayload,0, (struct sockaddr *)&servaddr,sizeof(servaddr));
                bytes_sent+=sizeofpayload;
                scanned++;
                hosts_done++;
                usleep(sleep_between*1000);
        }
        close(sock);
        running_threads--;
        return;
}

这会将数据包发送到变量w,在端口1900上从我的默认服务器IP调用它192.168.0.1但是我希望它从192.168.1.1发送数据包,因此伪造UDP数据包欺骗到另一个地址。

servaddr.sin_addr.s_addr=htonl(w);

处理目标地址,但我正在努力编辑源IP地址。

1 个回复

如果192.168.1.1是发送PC的本地IP,则可以在调用sendto()之前将套接字bind()到192.168.1.1。 否则,您必须使用SOCK_RAW套接字(仅限于管理员用户)并手动创建IP和UDP标头。

3 为 UDP 套接字设置源 IP

我有一个绑定到 INADDR_ANY 的 UDP 套接字来侦听我的服务器拥有的所有 IP 上的数据包。 我通过同一个套接字发送回复。 现在服务器会在发送数据包时自动选择哪个 IP 作为源 IP,但我希望能够自己设置传出源 IP。 有没有办法做到这一点而不必为每个 IP 创建单独的套接字? ...

4 sendto域而不是IP

我在两个不同的网络上有两台计算机。 我唯一知道的是他们的http地址。 其中一台机器正在侦听UDP端口9500,另一台则需要向该端口发送消息。 目前,在我的测试平台上,我正在使用硬编码的IP地址和sendto命令。 在现实生活中,系统会为每个网络节点分配一个域名。 是否可以使用send ...

5 UDP套接字sendto()函数

如果我想在我的udp套接字上写这样的话,我会收到错误。 根据文件,应该没有问题。 我不明白为什么bind()以相同的方式运行良好但sendto()失败。 错误: ...

6 Socket.SendTo()和包含的标头

我已经使用套接字名称空间在两个系统之间建立连接,现在我能够发送和接收消息,现在我想获取有关已接收到的数据包的信息,例如标头信息(发件人地址,ttl和...) ...

7 python socket.sendto

我是python(3.3)网络编程的新手,因此开始时,我试图编写一个基本的traceroute程序。 代码行之一是: 我在控制台中看到此行的错误,指出“ TypeError:'int'不支持缓冲区接口”。 我用刺痛尝试过,但用'str'而不是'int'遇到相同的错误。 我也查看了文 ...

8 sendto()到非现有套接字

我正在编写一个通过套接字(从客户端到服务器)发送数据的应用程序。 我观察到非常奇怪的行为:当我杀死服务器时,首先发送后杀死行为就像服务器存在一样。 下一个返回EPIPE。 你能解释一下为什么吗? 这是客户端应用程序的strace: 关于J. ...

2013-12-20 13:25:21 2 533   c/ sockets
9 发送到源地址

当sendto()用于通过udp套接字发送数据时,目标地址在sendto调用中指定,但是我们在哪里指定源地址。 我使用的目标地址(服务器)是5001 :: 1,在服务器日志中我看到一条消息说请求来自5001 :: 2端口12345.如果我想将源地址更改为5001 :: 20,该怎么办? 我确 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM