gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:19:01 26 4
gpt4 key购买 nike

我的函数目前工作正常,但是它从我的服务器发送主 IP 地址而不是另一个 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,从我的默认服务器 IP 在端口 1900 上将其称为 192.168.0.1,但是我希望它从 192.168.1.1 发送数据包,因此伪造 UDP 数据包以欺骗到另一个地址。

servaddr.sin_addr.s_addr=htonl(w);

处理目标地址,但我很难编辑源 IP 地址。

最佳答案

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

关于更改套接字 sendto() 中的源 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27950284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com