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