linux rawsocket 强制绑定网卡后网络卡死

wanglin888000 2017-03-29 10:57:51
电脑有两张网卡,eth0,eth1。使用原始套接字发现都从eth0发出包,在网上查资料使用下面两种方式绑定网卡。方法一并没有成功还是通过eth0发出 (sar命令查看)。方法2直接导致eth1网络卡死 。是否有什么地方写错了呢? 请教大神

sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_TCP);
if (sockfd < 0)
{
perror("socket()");
exit(1);
}


/* 方法一
struct sockaddr_ll sl;
struct ifreq ifr;

memset(&sl, 0x00, sizeof(sl));
memset(&ifr, 0x00, sizeof(ifr));
sl.sll_family = AF_PACKET;
sl.sll_protocol = htons(ETH_P_IP);
strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));
ioctl(sockfd, SIOCGIFINDEX, &ifr);
sl.sll_ifindex = ifr.ifr_ifindex;
printf("index = %d \n\r" ,ifr.ifr_ifindex);
bind(sockfd, (struct sockaddr *)&sl, sizeof(sl));
*/

/* 方法2*/
struct ifreq ifr;

memset(&ifr, 0x00, sizeof(ifr));
strncpy(ifr.ifr_name, "eth1", strlen("eth1"));
if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&ifr, sizeof(ifr))<0){
printf("SO_BINDTODEVICE failed");
//exit(1);
}
...全文
361 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-03-30
  • 打赏
  • 举报
回复
中arp毒了?
wanglin888000 2017-03-29
  • 打赏
  • 举报
回复
虚拟机下停掉eth0的话 eth2正常工作
wanglin888000 2017-03-29
  • 打赏
  • 举报
回复
我在虚拟机下试了一下 没有卡死 但是如果使用eth2向外发包 会一值发送arp包(又出现一个问题) 这样有可能是我物理机的问题吗,但是物理机正常ssh 都是可以的
欧阳春晖 2017-03-29
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
如果使用wireshark软件选择网卡eth1,不导致卡死,就是你代码的问题,参考wireshark源代码选择网卡相关片断。 如果使用wireshark软件选择网卡eth1,也导致卡死,就是你路由器设置的问题,找网管协商修改路由器相关设置。
如果win的套接字直接绑定网卡后,是将所有数据报文重定向到rawsocket了,就有可能影响到其他程序使用网络
欧阳春晖 2017-03-29
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
如果使用wireshark软件选择网卡eth1,不导致卡死,就是你代码的问题,参考wireshark源代码选择网卡相关片断。 如果使用wireshark软件选择网卡eth1,也导致卡死,就是你路由器设置的问题,找网管协商修改路由器相关设置。
不过赵老师可能没想到一个问题。。。因为wireshark绑定网卡的机制和win的套接字直接绑定rawsocket网卡的机制不一样哦
欧阳春晖 2017-03-29
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
如果使用wireshark软件选择网卡eth1,不导致卡死,就是你代码的问题,参考wireshark源代码选择网卡相关片断。 如果使用wireshark软件选择网卡eth1,也导致卡死,就是你路由器设置的问题,找网管协商修改路由器相关设置。
赵老师的方法还是这么直戳了当
赵4老师 2017-03-29
  • 打赏
  • 举报
回复
如果使用wireshark软件选择网卡eth1,不导致卡死,就是你代码的问题,参考wireshark源代码选择网卡相关片断。 如果使用wireshark软件选择网卡eth1,也导致卡死,就是你路由器设置的问题,找网管协商修改路由器相关设置。
欧阳春晖 2017-03-29
  • 打赏
  • 举报
回复
引用 9 楼 wanglin888000 的回复:
[quote=引用 8 楼 jack960330 的回复:] [quote=引用 7 楼 jack960330 的回复:] [quote=引用 5 楼 wanglin888000 的回复:] 我在虚拟机下试了一下 没有卡死 但是如果使用eth2向外发包 会一值发送arp包(又出现一个问题) 这样有可能是我物理机的问题吗,但是物理机正常ssh 都是可以的
ARP是网间报文控制协议,本来网卡都会发[/quote] sorry 纠正下 ARP是路由协议,网卡发包从路由器发出是很正常的[/quote] 这个没问题 但是一直在发arp就不正常了 ,普通的tcp包却发不出去 [/quote] 从网卡上能不能找到ARP应答包??
wanglin888000 2017-03-29
  • 打赏
  • 举报
回复
引用 8 楼 jack960330 的回复:
[quote=引用 7 楼 jack960330 的回复:] [quote=引用 5 楼 wanglin888000 的回复:] 我在虚拟机下试了一下 没有卡死 但是如果使用eth2向外发包 会一值发送arp包(又出现一个问题) 这样有可能是我物理机的问题吗,但是物理机正常ssh 都是可以的
ARP是网间报文控制协议,本来网卡都会发[/quote] sorry 纠正下 ARP是路由协议,网卡发包从路由器发出是很正常的[/quote] 这个没问题 但是一直在发arp就不正常了 ,普通的tcp包却发不出去
欧阳春晖 2017-03-29
  • 打赏
  • 举报
回复
引用 7 楼 jack960330 的回复:
[quote=引用 5 楼 wanglin888000 的回复:] 我在虚拟机下试了一下 没有卡死 但是如果使用eth2向外发包 会一值发送arp包(又出现一个问题) 这样有可能是我物理机的问题吗,但是物理机正常ssh 都是可以的
ARP是网间报文控制协议,本来网卡都会发[/quote] sorry 纠正下 ARP是路由协议,网卡发包从路由器发出是很正常的
欧阳春晖 2017-03-29
  • 打赏
  • 举报
回复
引用 5 楼 wanglin888000 的回复:
我在虚拟机下试了一下 没有卡死 但是如果使用eth2向外发包 会一值发送arp包(又出现一个问题) 这样有可能是我物理机的问题吗,但是物理机正常ssh 都是可以的
ARP是网间报文控制协议,本来网卡都会发

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧