7

パッチコードで接続された2枚のethカードを備えたコンプがあります(1番目から2番目への直接ethケーブル)。

Linux がインストールされているので、1 番目のネットワーク カードから 2 番目のネットワーク カードにデータを送信したいと考えています。そして、パケットを強制的にケーブル経由で通過させたいと考えています。カードに任意のIPを設定できます。

pingを使用すると、カードのカウンターが一定になります。

tcp/ip ソケットで可能ですか?

PS。私はプログラムを書く必要があります。これはeth経由でパケットを送信するため、stackoverflow関連の質問です。OSに依存する方法がいくつかある可能性があります。それらも私を助けてくれます

4

3 に答える 3

7

ローカルルーティングテーブルを見てください。iproute2ツールがインストールされている場合は、ip route showtablelocalを実行します。ご覧のとおり、ローカルIP宛てのすべてのパケットは、ローカルとしてマークされているため、NICを通過することはありません。

パケットをイーサネットカード経由で強制的に送信するには、適切なルートを削除します(つまり、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 を 2 枚のイーサネット カードとします。IP0 と IP1 はその IP アドレスです。MAC0 と MAC1 はそれぞれその MAC アドレスです。IP00 と IP11 の 2 つのダミー IP アドレスを使用します。

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 アドレスではなく、ダミーの IP アドレス IP00 と IP11 を使用します。

于 2011-09-23T14:25:40.727 に答える
0

パケット ソケット (プロトコル ファミリ) を使用してそれを行うプログラムを作成できるはずですがPF_PACKET、IP および上位層のヘッダーを自分で処理する必要があります。

于 2010-04-29T02:52:18.827 に答える