スポンサーサイト
一定期間更新がないため広告を表示しています
ソケットのオープン#include <winsock2.h>
arp要求パケットは通常のパケットとは異なるレイヤー2のプロトコルのため、初期化の方法も異なる。 プロトコルヘッダーSOCKET sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
サンプルコードtypedef struct _PROTOCOL_ETHER{ unsigned char Mac[2][6]; short int Type; } PROTOCOL_ETHER, *LP_PROTOCOL_ETHER; typedef struct _PROTOCOL_ARP{ short int HwType; short int Type; unsigned char HwLen; unsigned char ProtoLen; short int Code; unsigned char SrcMac[6]; unsigned int SrcIp; unsigned char DstMac[6]; unsigned int DstIp; } PROTOCOL_ARP, *LP_PROTOCOL_ARP;
ダミーの部分は実際には存在しないアドレスを指定する。 アライドテレシス CentreCOM GS905LF スイッチ レイヤー2スマートスイッチ/レイヤー2スイッチ(GbE) 0368R スイッチングHubを強制的にリピータHubにする方法・MACFloodingLP_PROTOCOL_ETHER protocol_ether = (LP_PROTOCOL_ETHER)p; protocol_ether->Mac[0] = 送信側MACアドレス protocol_ether->Mac[1] = 宛先側MACアドレス p+=14;// ヘッダサイズだけ移動 protocol_ether->Type = ntohs(0x0806);// プロトコル ARP // ARPパケットのヘッダを取得する LP_PROTOCOL_ARP protocol_arp = (LP_PROTOCOL_ARP)p; protocol_arp->HwType = 0x0001; protocol_arp->Type = 0x0800; protocol_arp->HwLen = 0x06; //Hardware size = 6 protocol_arp->ProtoLen = 0x04; //protcol size = 4 protocol_arp->Code = 0x0001; //ARP要求 protocol_arp->SrcMac = 送信側MACアドレス(ダミー) protocol_arp->SrcIp = 送信側IPアドレス(ダミー) protocol_arp->DstMac = 宛先側MACアドレス(ダミー) protocol_arp->DstIp = 宛先側IPアドレス(ダミー) int len = sizeof(PROTOCOL_ETHER) + sizeof(PROTOCOL_ARP); BOOL ret = send( sock, p, len );