私はC++で低レベルのソケットを学んでいます。ARP要求を送信する簡単なプログラムを実行しました。ソケットはパケットを送信しているようですが、Wiresharkでキャッチできません。ARPパケットを送信する別の小さなプログラムがあり、それらのパケットはWiresharkによってキャプチャされます(以下の私のプログラムはそのプログラムに触発されています)。
私は何か間違ったことをした?
削除されたコード
編集
削除されたコード
編集2
パケットにイーサネットヘッダーデータも含める必要があるようです。そこで、イーサネットヘッダーとARPヘッダーデータを含むパケットを作成します。これでパケットは消え、Wiresharkによってキャプチャされます。しかし、Wiresharkはそれが無償であると言います。ご覧のとおり、送信者と受信者のIPアドレスまたはMACアドレスも正しく設定されていないようです。
36 13.318179 Cimsys_33:44:55 Broadcast ARP 42 Gratuitous ARP for <No address> (Request)
編集3
/*Fill arp header data*/
p.arp.ea_hdr.ar_hrd = htons(ARPHRD_ETHER);
p.arp.ea_hdr.ar_pro = htons(ETH_P_IP);
p.arp.ea_hdr.ar_hln = ETH_ALEN; // Must be pure INTEGER, not called with htons(), as I did
p.arp.ea_hdr.ar_pln = 4; // Must be pure INTEGER, not called with htons(), as I did
p.arp.ea_hdr.ar_op = htons(ETH_P_ARP);