UDP RAW_SOCKET数据包自身在环回接口而不是eth0上捕获

时间:2012-11-10 08:36:56

标签: c linux sockets raw-sockets

使用本文中的来源RAW_SOCKET to forge UDP packets我正在从其他主机生成数据包以拥有eth0 ip地址,例如,192.168.10.1 - > 192.168.10.131。

但是tcpdump显示,数据包到达lo,而不是eth0 ... 在lo -

10:10:18.332284 IP (tos 0x0, ttl 64, id 768, offset 0, flags [DF], proto UDP (17), length 71)
192.168.10.1.57961 > 192.168.10.131.12001: [udp sum ok] UDP, length 43

并且关于eth0是沉默。

如何更改代码,使数据包进入eth0? direct link to C source file

1 个答案:

答案 0 :(得分:1)

如我所见,你必须使用tcp函数而不是udp

对于UDP,您可以将optname设置为SO_BINDTODEVICE

const char device[] = "eth0";
rc=setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, device, sizeof(device));
if (rc != 0) 
{
 printf ("%s: could not set SO_BINDTODEVICE (%s)\n",
    argv[0], strerror(errno));
 exit (EXIT_FAILURE);
}