Perlでは非常に基本的なことに関連する質問がありましたが、効率的な解決策を見つけることができません。パケットの宛先MACアドレスを変更するにはどうすればよいですか?
ここには少し前の文脈があります。私はNet::Pcapなどを使用しています。私がパケットを処理する(pcap_loop
が使用する)私の関数には、私のパケット全体(イーサネットヘッダ+ IPヘッダ+ TCP/UDPヘッダ+ペイロード)を含む$packet
スカラーがあります。私が何をしたいか
は、ユーザ定義の宛先MACアドレスを使用して、私はpcap_sendpacket
を使用して送ることができる$packet
を得るために、この$packet
(イーサネット先)の最初の6つのバイトを変更することです(例えばとして渡さコマンドライン引数など)を入力します(例:00:11:22:33:44:55
)。だから、split
を使ってユーザ定義のアドレスを分割し、宛先MACアドレスの6つの部分をすべて取得し、hex
関数を使って16進数に変換することができます。しかし、パケットの最初のバイトを変更して置き換えますこれらのバイト数はhex
です。私はどのように進めるべきですか?
私はいくつかの連結(。)を使用すると思ったが、この解決策は汚いと思う。
私は "u_char packet[]
"を手に入れた後、私のユーザ提供のイーサネットのmemcpy
を実行しなければなりませんでした(Cでこれをやっていましたが、これはPerlでやりたかったからです)私のpacket[]
の最初の6バイトまでのアドレス。
packを使用して、物をバイトに変換することもできます。 – Eric