2017-05-30 11 views
0

私のLinuxシステムには、eth0とeth1の2つのインタフェースがあります。私はeth0上にrawソケットをオープンしており、着信パケットを受信して​​います。パケットがeth0から来たとき、私はイーサネットヘッダー(特に宛先MACをeth1のMACアドレスに変更した後)をeth1に転送します。パケットはインタフェースによって受け入れられ、さらなる処理のためにカーネルに送られ、最終的にはそれを待っているアプリケーションに送られるはずです。しかし、何らかの理由でパケットがeth1(wiresharkからわかるように)に届きますが、アプリケーションはそれを受信しません(アプリケーションがpingしていて、ping応答が表示されません)。パケットをカーネルに送るには?

パケットを受け取り、アップストリームでカーネルに送信するようにパケットをeth1に送信するにはどうすればよいですか?

+1

エイリアス要求がeth1で受信されたことをwireshark経由で観察できる場合、カーネルは実際にそれを処理しています。他のすべてと同様に、Wiresharkはカーネルに依存しています。それにもかかわらずそれらを受信しないそのようなパケットをリッスンするアプリケーションがある場合、あなたのファイアウォールは私の最初の容疑者になります。 –

+1

MACアドレスを変更したときに、FCSを再計算して交換しましたか?また、レイヤ3アドレスがそのインターフェイス上で一致しない場合、新しいインターフェイス上のスタックはパケットを廃棄します。そのためには、宛先IPアドレスを変更し、IPv4ヘッダーCRC(IPv6はIPヘッダーにCRCを持たない)を再計算する必要があります。 IPアドレスを変更すると、TCPまたはUDP擬似ヘッダーが変更され、変更する必要があります。 –

+0

@JohnBollinger私はubuntuを使用していますが、ufwは非アクティブです。私がチェックしなければならないファイアウォールの別の層がありますか? –

答えて

1

ここで誤解おそらくあり:

、あなたのケースのeth1には、インターフェイス上でrawソケットを介してパケットを送信する場合、それはは、そのMACに関係なく、カーネルにローカルとして扱われることはありませんが、 -addressと入力しますが、ネットワークへのインターフェイスはそのまま残ります(宛先として独自のMACアドレスを使用します)。これはあなたがwiresharkで観察するものです。

パケットをカーネルで処理する場合は、lo -interface(ループバックインターフェイス)に送信します。これは、その目的のためです。

+0

L2ヘッダーを使用して完全なパケットをLoインターフェイスに送信しますか?または単にL3ヘッダー+ペイロード? –

関連する問題