7

我有一个带有 2 个 eth 卡的 comp,用跳线连接(从 1 到 2 的直接 eth 电缆)。

安装了linux,我想将数据从第一个网卡发送到第二个。我想强制数据包通过电缆传递。我可以在卡上设置任何 ip。

随着 ping 我得到卡上的计数器不变。

tcp/ip 套接字可以吗?

PS。我需要编写一个程序。它将通过 eth 发送数据包,因此与 stackoverflow 相关的问题。可能有一些依赖于操作系统的方式,它们也会帮助我

4

3 回答 3

7

查看本地路由表。安装 iproute2 工具后,请执行ip route show table local。如您所见,所有发往本地 IP 的数据包都不会通过 NIC,因为它们被标记为local

要强制数据包通过以太网卡,请删除适当的路由(即ip route delete 192.168.122.1 dev eth0 table local)。要恢复此路由,只需将接口设置为向下和向上:内核将完成插入这些路由的工作。

于 2010-12-20T13:48:29.910 回答
4

我尝试了上面的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 地址。

于 2011-09-23T14:25:40.727 回答
0

您应该能够编写一个使用数据包套接字(协议系列PF_PACKET)执行此操作的程序,但您必须自己处理 IP 和更高层的标头。

于 2010-04-29T02:52:18.827 回答