使用本文中的来源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
答案 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);
}