我有一个与2个乙烯卡,用接插线(从第一个到第二个直接eth。电缆连接)的comp。
Linux安装,我想从第一张网卡发送数据到第二。 我想强制数据包通过电缆传递。 我可以在卡上设置任何IP。
与平,我得到卡上的计数器不断。
是否有可能与TCP / IP套接字?
PS。 我需要写一个程序。 这将通过eth发送数据包,所以stackoverflow相关的问题。 可以有一些操作系统依赖的方式,他们也会帮助我
看看本地路由表。 用iproute2工具安装ip route show table local 。 正如你所看到的,所有去往本地IP的数据包都不会穿过NIC,因为它们被标记为本地 。
强制数据包通过以太网卡去除适当的路由(即ip route delete 192.168.122.1 dev eth0 table local )。 要恢复这个路由,只需将接口设置为down即可:内核将完成插入这些路由的工作。
我试过上面的ip route … table local方法。 要么它不工作,要么我做错了什么。
诀窍是使用一组虚拟IP地址强制内核通过线路进行路由,而NAT则将其更改回到真实的IP地址。
让eth0和eth1为两个以太网卡, IP0和IP1的IP地址; MAC0和MAC1分别为其MAC地址。 我们将使用两个虚拟IP地址:IP00和IP11。
arp -s IP00 MAC0 arp -s IP11 MAC1 ip route add IP00 dev eth1 ip route add IP11 dev eth0 iptables -t nat -A POSTROUTING -d IP11 -j SNAT --to-source IP00 iptables -t nat -A POSTROUTING -d IP00 -j SNAT --to-source IP11 iptables -t nat -A PREROUTING -d IP00 -j DNAT --to-destination IP0 iptables -t nat -A PREROUTING -d IP11 -j DNAT --to-destination IP1
使用虚拟IP地址IP00和IP11而不是真正的IP地址。
你应该可以编写一个程序来使用packet socket(协议族PF_PACKET
),但是你必须自己处理IP和更高层的头文件。