1

Ruby packetfu ライブラリを使用して、生のパケットを作成して送信しています。私はそれを機能させることができますが、私が間違っていると思うことがあります。(ところで、ruby+packetfu は生のパケット全体の操作を本当に簡単にします..)

これが私のコードです:(MACアドレスは少しマスクされていました)

            packet.eth_saddr = "XX:XX:88:XX:03:BD"
            packet.eth_daddr = "XX:6D:57:AD:XX:A3"

            packet.ip_header.ip_saddr="192.168.0.16"
            packet.ip_header.ip_daddr="192.168.0.13"

そして、packet.to_w('eth0') を呼び出すと、配信されます。ご覧のとおり、頭を悩ませているのは MAC アドレスです。パケットを送信する必要があるたびに宛先 MAC アドレスを調べなければならないのは本当に不便です...送信元 MAC アドレスはそれほど重要ではないことをテストしましたが、それがなくても機能します。ただし、宛先MACアドレスは必須です(パケットはそれなしでは送信されません).

生のソケットを使用して C でこれを行う必要があったことを思い出せません...パケットをネットワークに送信する前に ARP を実行する必要がある場合、さらに悪いことに、DNS クエリなどを実行する必要がある場合は最悪です。パケットをインターネットに送信する....

呼び出す必要があるワンライナーなど、ここで何かが欠けていると思います..しかし、packetfuのコードとドキュメントを読んだ後、それを理解できません....

誰でも?

4

1 に答える 1

2

PacketFu は状態テーブルなどを維持しません。したがって、宛先アドレスを決定するには、適切な場所に自分で実装する必要がある arp のような機能が必要になります。PacketFu::Utils.arp("192.168.0.13")通常はこれで十分です。

見たパケットに返信する場合、別の手法として、そのパケットの MAC アドレスを単純にコピーする方法があります。

最後に、宛先がローカル ネットワークの外にあることが確実にわかっていて、ほとんどのネットワークと同様にゲートウェイが 1 つしかない場合は、ゲートウェイの MAC アドレスをそのまま使用できます。PacketFu::Utils.whoami?その情報を得るのに役立ちます。

于 2012-06-19T13:38:04.917 に答える