2012-04-20 16 views
0

私はそれに関連付けられたMACアドレスだけでなく、私のローカルLANに接続するデバイスにパケットを送るのが好きです。Rubyが既知のMACアドレスにパケットを送信する

ruby​​/gemライブラリにこのようなタスクを実行するためのものはありますか?

私はtcpreplayのようにしたいが、代わりにルビーでやりたい。ありがとう!

+0

MACアドレスは、所属するIPの知識がなければ実際には連絡されません。指定されたMACが常に同じIPを持つことを確認できませんか? – Jasper

答えて

1

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

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

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

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

+0

ありがとうございました。私は送信を行っているtcpreplayどのように興味があります。必要なのは、pcapを再生するインタフェースです。すべての助けをありがとう。私はtcpreplayコードを掘り下げ、 –

+0

を参照してくださいする必要があります答えをありがとう。私は、プログラム 'tcpreplay'がpcapをethインターフェースにダンプする方法が不思議です。 –

1

私はいくつかのアプローチがあると思います。何らかのIPパケットを送信したいのかどうかは言わなかった。そうであれば、どのIPプロトコルも言わなかった。

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

別のアプローチであるかもしれない:あなたはルビーとSOCK_RAWを開くことができる、のようなものは、

とにかく(?私はあなたのプロトコルをカプセル化するものイーサネットフレームけど...を送りたい伝えることができます)ちょうどリンクローカルIPを選択し、その後のようなものを使ってローカルARPキャッシュにIP/MACマッピングを確立する:次に、あなたがリンクローカルIPアドレスを使用して、より身近なソケットOPSを使用して通信することができる

system "arp -s host hw_addr" 

これらのすべてのことを行うには、ルートにする必要があります。

関連する問題