Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 原始套接字-Internet协议层_C_Raw Sockets - Fatal编程技术网

C 原始套接字-Internet协议层

C 原始套接字-Internet协议层,c,raw-sockets,C,Raw Sockets,我一直在使用C语言中的原始Berkeley套接字,它允许程序员访问Internet协议套件的第2层(IP头)。我想知道原始套接字如何处理第1层(链路层)上的传输,特别是关于无线局域网 例如,套接字如何知道将数据包发送到哪个网络接口(eth0或wlan0) 如果我在无线路由器后面,我应该仍然用我的LAN地址(192.168.1.1)或路由器的internet地址(74.125.226.68)填充我的IP报头的IP源地址吗 如果我用我的LAN地址(192.168.1.1)填充IP源地址,那么IP报头

我一直在使用C语言中的原始Berkeley套接字,它允许程序员访问Internet协议套件的第2层(IP头)。我想知道原始套接字如何处理第1层(链路层)上的传输,特别是关于无线局域网

例如,套接字如何知道将数据包发送到哪个网络接口(eth0或wlan0)

如果我在无线路由器后面,我应该仍然用我的LAN地址(192.168.1.1)或路由器的internet地址(74.125.226.68)填充我的IP报头的IP源地址吗

如果我用我的LAN地址(192.168.1.1)填充IP源地址,那么IP报头在通过路由器时会发生变化吗?还是会保持这种状态,以便数据包的接收端尝试将响应发送到其网络上的本地主机

我希望在这方面有任何见解

例如,套接字如何知道将数据包发送到哪个网络接口(eth0或wlan0)

您可以使用套接字选项
SO\u BINDTODEVICE
将套接字绑定到特定接口。否则,操作系统将选择一个

如果我在无线路由器后面,我应该仍然用我的LAN地址(192.168.1.1)或路由器的internet地址(74.125.226.68)填充我的IP报头的IP源地址吗

你应该使用你的局域网地址。如有必要,路由器负责NAT(网络地址转换)

如果我用我的LAN地址(192.168.1.1)填充IP源地址,那么IP报头在通过路由器时会发生变化吗?还是会保持这种状态,以便数据包的接收端尝试将响应发送到其网络上的本地主机


如果在路由器上启用NAT,则源地址将更改以反映路由器的外部地址。否则,您的包可能会被路由器或防火墙丢弃,因为您的源地址在其上下文中无效。

谢谢您的澄清,nyi。