首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C Ubuntu 12.04中发送带有欺骗IP的UDP数据包时,IP会发生变化

在C Ubuntu 12.04中发送带有欺骗IP的UDP数据包时,IP会发生变化
EN

Stack Overflow用户
提问于 2013-08-08 22:15:09
回答 1查看 1.6K关注 0票数 0

我正在用C编写代码,Eclipse,Ubuntu 12.04。我正在打开一个套接字,并从假冒的源IP发送UDP数据包。当我在虚拟机(同样的代码,Eclipse,Ubuntu版本)中运行代码时,一切正常,但现在当我尝试在真实的Ubuntu机器上运行它时,它不能正常工作。

代码语言:javascript
复制
bzero(&spoof_addr, sizeof(spoof_addr));
spoof_addr.sin_family = AF_INET;
spoof_addr.sin_port = htons(SERVERPORT);
if (inet_aton("192.168.160.240", &spoof_addr.sin_addr)==0)
{
    fprintf(stderr, "inet_aton() failed\n");
    exit(1);
}    

if ((sockfd_spoofed = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
        err("socket");
     bind(sockfd_spoofed,(struct sockaddr*)&spoof_addr,sizeof(spoof_addr));

    //Send the packet
    if (sendto(sockfd_spoofed, buf_port, 5, 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr))==-1)

问题是Ubuntu/kernel将我的源IP更改为我唯一拥有的接口的真实IP。Eclipse运行时不会出现任何错误或警告。据我所知,数据包离开Eclipse应用程序后,IP会发生变化。我尝试像这样添加额外的IP : ifconfig eth0:1 192.168.160.240 netmask 255.255.255.0 up (这在虚拟机中有效),但不影响真实的PC。

EN

回答 1

Stack Overflow用户

发布于 2013-08-09 02:27:34

当您发送UDP数据包时,内核中的UDP堆栈总是会将报头设置为正确的值。

如果您希望更好地控制发送的内容,则需要使用原始套接字。

wikipedia raw sockets

linux man page for raw sockest

请注意,这很难,并且需要root权限。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18128361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档