全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2502
推到 Plurk!
推到 Facebook!

關於send arp packet的問題

答題得分者是:Ktop_Robot
yojin
一般會員


發表:13
回覆:18
積分:6
註冊:2005-06-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-18 22:54:19 IP:211.76.xxx.xxx 未訂閱
想請問各位高手一下,我的程式環境是BCB 6.0,我想寫一個發arp reply的封包,但不知道問題出在那裡,為什麼我怎麼發在win2000的network monitor下發出去的封包總是ip的封包,是不是我的封包結構定義錯了?我在猜想,會不會winsock不行發也不行擷取arp的封包呢?因為之前自己寫程式擷取封包時只能擷取到icmp tcp udp等封包啊,還是如果要做到發arp的封包,一定要使用winpcap呢?麻煩知道的大大提供個意見,謝謝,以下是我的程式碼! #include #include #include #include #include #include #include #include #define ARP_TYPE 0x0806; #define IP_TYPE 0x0800; #define ETHER_TYPE 1; #define IP_LENGTH 4; #define Hardware_LENGTH 6; #define ARP_REPLY 2; #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused struct ARP_PACKET{ //Ethernet header unsigned char DstHardwareAddr[6]; //Destination MAC Address unsigned char SrcHardwareAddr[6]; //Source MAC Address unsigned short Frame_Type; //ARP header unsigned short HardwareType; unsigned short ProtocolType; unsigned char HarewareAddrLen; unsigned char ProtocolAddrLen; unsigned short Operation; unsigned char SenderHardwareAddr[6]; unsigned long SenderProtocolAddr; unsigned char TargetHardwareAddr[6]; unsigned long TargetProtocolAddr; unsigned char Padding[18]; }arp; int main(int argc, char* argv[]) { WSAData data1; ETHERNET ether; WSAStartup(MAKEWORD(2, 2), &data1); SOCKET ServerSocket=socket(AF_INET, SOCK_RAW, IPPROTO_RAW); //BOOL b=TRUE; //setsockopt(ServerSocket, IPPROTO_RAW, IP_HDRINCL, (char *)&b, sizeof(b)); // unsigned char SrcHardwareAddr[6]={0, 5, 93, 124, 76, 164}; //192.168.1.2 my nic unsigned char DstHardwareAddr[6]={0, 4, 35, 142, 49, 215}; //192.168.1.3 nic arp.SrcHardwareAddr[0]=SrcHardwareAddr[0]; arp.SrcHardwareAddr[1]=SrcHardwareAddr[1]; arp.SrcHardwareAddr[2]=SrcHardwareAddr[2]; arp.SrcHardwareAddr[3]=SrcHardwareAddr[3]; arp.SrcHardwareAddr[4]=SrcHardwareAddr[4]; arp.SrcHardwareAddr[5]=SrcHardwareAddr[5]; arp.DstHardwareAddr[0]=DstHardwareAddr[0]; arp.DstHardwareAddr[1]=DstHardwareAddr[1]; arp.DstHardwareAddr[2]=DstHardwareAddr[2]; arp.DstHardwareAddr[3]=DstHardwareAddr[3]; arp.DstHardwareAddr[4]=DstHardwareAddr[4]; arp.DstHardwareAddr[5]=DstHardwareAddr[5]; arp.Frame_Type=ARP_TYPE; // arp.HardwareType=ETHER_TYPE; arp.ProtocolType=IP_TYPE; arp.HarewareAddrLen=Hardware_LENGTH; arp.ProtocolAddrLen=IP_LENGTH; arp.Operation=ARP_REPLY; arp.SenderHardwareAddr[0]=SrcHardwareAddr[0]; arp.SenderHardwareAddr[1]=SrcHardwareAddr[1]; arp.SenderHardwareAddr[2]=SrcHardwareAddr[2]; arp.SenderHardwareAddr[3]=SrcHardwareAddr[3]; arp.SenderHardwareAddr[4]=SrcHardwareAddr[4]; arp.SenderHardwareAddr[5]=SrcHardwareAddr[5]; arp.SenderProtocolAddr=inet_addr("192.168.1.2"); arp.TargetHardwareAddr[0]=DstHardwareAddr[0]; arp.TargetHardwareAddr[1]=DstHardwareAddr[1]; arp.TargetHardwareAddr[2]=DstHardwareAddr[2]; arp.TargetHardwareAddr[3]=DstHardwareAddr[3]; arp.TargetHardwareAddr[4]=DstHardwareAddr[4]; arp.TargetHardwareAddr[5]=DstHardwareAddr[5]; arp.TargetProtocolAddr=inet_addr("192.168.1.3"); // sockaddr_in service; service.sin_family=AF_INET; service.sin_port=htons(0); service.sin_addr.s_addr=inet_addr("192.168.1.3"); // int count=1; while(true){ cout << count << ": " << sendto(ServerSocket, (char *)&arp, sizeof(arp), 0, (SOCKADDR *)&service, sizeof(service)) << " bytes send..." << endl; Sleep(100); count ; } system("pause"); return 0; }
系統時間:2024-04-20 8:06:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!