linux設備端:
1. int fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));//
函數原型:int socket(int domain, int type, int protocol);//發送接收以太網數據幀
//sock_raw(注意一定要在root下使用)原始套接字編程可以接收到本機網卡上的數據幀或者數據包,對於監聽網絡的流量和分析是很有作用的.
- domain:即協議域,又稱爲協議族(family)。常用的協議族有,AF_INET、AF_INET6、AF_LOCAL(或稱AF_UNIX,Unix域socket)、AF_ROUTE等等。協議族決定了socket的地址類型,在通信中必須採用對應的地址,如AF_INET決定了要用ipv4地址(32位的)與端口號(16位的)的組合、AF_UNIX決定了要用一個絕對路徑名作爲地址。
- type:指定socket類型。常用的socket類型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等(socket的類型有哪些?)。
- protocol:故名思意,就是指定協議。常用的協議有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它們分別對應TCP傳輸協議、UDP傳輸協議、STCP傳輸協議、TIPC傳輸協議
2. recvfrom(fd, recvBuf, MAX_SIZE, 0, NULL, NULL);
windows 用vs2010 C++
a.設置設備信息
1. pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &allDevs, errBuf)//查找所有網絡設備
原型:int pcap_findalldevs_ex(char* source, struct pcap_rmtauth *auth, pcap_if_t** alldevs, char* errbuf );
返回值:0表示查找成功。-1表示查找失敗
參數說明:
source:指定是本地適配器或者遠程適配器 本地適配器:'rpcap://' 遠程適配器:'rpcap://host:port' 抓包文件。'file://c:/myfolder/'.
2.pcap_open(itDev->name, 65535, PCAP_OPENFLAG_PROMISCUOUS, // 混雜模式1000, // 讀取超時時間NULL, // 遠程機器驗證 errBuf )) == NULL)//打開一個抓取設備
3.pcap_freealldevs(allDevs);
4.pcap_sendpacket(adhandle, (const u_char *)sendBuf, sizeof(RawPackInfo) + sizeof(BatchDeviceInfo))
b.查詢設備信息
1. pcap_findalldevs_ex//查找設備列表
2.pcap_open//打開設備列表
3.pcap_sendpacket//發送請求包
4.pcap_next_ex// 從interface或離線記錄文件獲取一個報文
5.WaitForSingleObject//等待返回信息