0

I like to send packet to a device with only MAC address associated to it and also connecting to my local LAN.

Is there anything in ruby / gem library that I can use to perform such task?

I want to do something like tcpreplay but in ruby instead. Thanks!

4

2 に答える 2

1

MACは、OSIレイヤー2で使用されるアドレスであり、このレイヤーで使用しているパッケージタイプは、イーサネットフレームなどです。IPソケットはレイヤー3/4に存在するため、IPソケットを使用している場合は、IPパケットを送信しています。

したがって、「MACアドレスに」何かを送信する場合は、反対側で理解する必要のある生のイーサネットフレームを送信する必要があります。このようなもののレベルが非常に低いことを考えると、これが本当にやりたいことになることはめったにありません。

代わりに、ブロードキャスト/応答メカニズムまたはマルチキャスト(Bonjourなどで使用される)のいずれかを使用して、ローカルネットワーク(技術的にはブロードキャストドメイン)内のリモートデバイスの適切なIPアドレスを取得するようにしてください。そうすれば、サポートされているIPレイヤーをいつでも使用できます。そのためには、もちろんデバイスにIPアドレスが必要です。DHCPやIPv6のアドレス自動構成などのメカニズムでそれらを確立できます。

あなたの質問に関しては、私はRubyが生のイーサネットフレームを送信するためのライブラリを知りません。しかし、とにかくIP以外の新しいプロトコルを発明する必要があることを考えると(これは難しい、本当に難しい)、パッケージの送信はおそらくあなたの懸念の最も少ないものです。

于 2012-04-21T07:59:46.697 に答える
1

いくつかのアプローチがあると思います。なんらかの IP パケットを送信するかどうか、送信する場合はどの IP プロトコルかを指定していません。(イーサネットフレームを送信したいことはわかりますが、カプセル化されたプロトコルは何ですか?)

とにかく、次のような Ruby で SOCK_RAW を開くことができます。

Socket.open(Socket::PF_INET, Socket::SOCK_RAW, Socket::IPPROTO_RAW)

別のアプローチとして、リンクローカル IP を選択してから、次のようなローカル ARP キャッシュで IP/MAC マッピングを確立することもできます。

system "arp -s host hw_addr"

次に、リンクローカル IP アドレスを使用して、より使い慣れたソケット操作を使用して通信できます。

これらすべてのルートである必要があります。

于 2012-04-20T21:36:47.800 に答える