資源簡介
使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址,C++實現(xiàn),附源碼、程序及文檔還有winpcap環(huán)境搭建介紹

代碼片段和文件信息
#include
#include?
#include?
#include?
using?namespace?std;
//ARP數(shù)據(jù)包結(jié)構(gòu)
typedef?struct?ArpStruct{
????u_short?hdtype;?????????//硬件類型(2B),值為0001表示它為Ethernet
????u_short?protype;????????//協(xié)議類型(2B),值為0800表示上層協(xié)議為IP
????u_char?hdsize;??????????//物理地址長度(1B),值為06
????u_char?prosize;?????????//協(xié)議地址長度(1B),值為04
????u_short?op;?????????????//操作(2B),值為0001表示ARP請求,值為0002表示ARP應(yīng)答
????u_char?sMacAddr[6];?????//源物理地址(6B)
????u_char?sIpAddr[4];??????//源IP地址(4B)
????u_char?dMacAddr[6];?????//目的mac地址(6B)
????u_char?dIpAddr[4];??????//目的IP地址(2B)
}ArpStruct;
void?main()
{
?pcap_if?*alldevs;????????????//存放網(wǎng)卡列表的鏈表
?pcap_if?*d;??????????????????//指定上述鏈表的某個結(jié)點
?int?inum;????????????????????//通過輸入序號選擇網(wǎng)卡
?int?i=0;?????????????????????//網(wǎng)卡列表序號
?pcap_t?*adhandle;?????????????//網(wǎng)卡句柄
?char?errbuf[PCAP_ERRBUF_SIZE];?????????//錯誤信息記錄塊
?u_int?netmask;???????????????//子網(wǎng)掩碼
?char?packet_filter[]?=?“ether?proto?\\arp“;?//設(shè)置正則表達式,只過濾arp包
?struct?bpf_program?fcode;
????//?獲得網(wǎng)絡(luò)設(shè)備列表
????if?(pcap_findalldevs_ex(PCAP_SRC_IF_STRING?NULL?&alldevs?errbuf)?==?-1)
????{
????????cout<<“Error?in?pcap_findalldevs:?“< ????????exit(1);
????}
????
????//?打印網(wǎng)絡(luò)設(shè)備列表?
????for(d=alldevs;?d;?d=d->next)
????{
????????cout<<++i<<“.?“;
????????if?(d->description)
????????????cout<description< ????????else
????????????cout<<“設(shè)備沒有描述“< ????}
????if(i==0)
????{
????????cout<<“沒有找到適配器,請核查是否已安裝winpcap驅(qū)動.“< ????????return?;
????}
????
????//輸入序號,選擇網(wǎng)卡
????cout<<“\n請輸入適配器的序號:(1-“<????scanf(“%d“?&inum);
????
????//序號合法性檢測
while(inum?1?||?inum?>?i){
cout< cout<<“\n請輸入適配器的序號:(1-“< scanf(“%d“?&inum);
}
????
????//?跳轉(zhuǎn)到已選設(shè)備?
????for(d=alldevs?i=0;?inext?i++);
????
????//?以混雜模式打開適配器?
????if?(?(adhandle=?pcap_open(d->name??//?設(shè)備名
?????????????????????????????65536?????//?捕獲數(shù)據(jù)最大字節(jié)數(shù)
????????????????????????????????????????//?65535保證能捕獲到不同數(shù)據(jù)鏈路層上的每個數(shù)據(jù)包的全部內(nèi)容
?????????????????????????????PCAP_OPENFLAG_PROMISCUOUS?????????//?混雜模式,值為1
?????????????????????????????1000??????//?定義超時時間(毫秒數(shù))
?????????????????????????????NULL??????//?遠程機器驗證
?????????????????????????????errbuf?????//?錯誤緩沖池
?????????????????????????????)?)?==?NULL)
????{
????????cout< ????????//?釋放設(shè)備列表?
????????pcap_freealldevs(alldevs);
????????return?;
????}
????/////////編譯并設(shè)置過濾器
????//?獲得接口第一個地址的掩碼?
?????if(d->addresses?!=?NULL)
????????netmask=((struct?sockaddr_in?*)(d->addresses->netmask))->sin_addr.S_un.S_addr;
????else
????????//?如果接口沒有地址,那么我們假設(shè)一個C類的掩碼
????????netmask=0xffffff;?
????//編譯過濾器
????if?(pcap_compile(adhandle?&fcode?packet_filter?1?netmask)?<0?)
????{
????????cout< ????????//?釋放設(shè)備列表?
????????pcap_freealldevs(alldevs);
????????return?;
????}?
????//設(shè)置過濾器
????if?(pcap_setfilter(adhandle?&fcode)<0)
????{
????????cout<
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????548921??2013-07-05?03:32??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\exe\catch_hosts_arp.exe
?????文件???????5034??2013-07-05?03:13??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\catch_hosts_arp.cpp
?????文件???????3569??2013-07-05?03:54??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\catch_hosts_arp.dsp
?????文件????????538??2013-07-05?03:54??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\catch_hosts_arp.dsw
?????文件??????33792??2013-07-05?03:54??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\catch_hosts_arp.ncb
?????文件??????48640??2013-07-05?03:54??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\catch_hosts_arp.opt
?????文件???????1224??2013-07-05?03:32??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\catch_hosts_arp.plg
?????文件?????548921??2013-07-05?03:32??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\Debug\catch_hosts_arp.exe
?????文件?????791972??2013-07-05?03:32??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\Debug\catch_hosts_arp.ilk
?????文件?????162985??2013-07-05?03:32??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\Debug\catch_hosts_arp.obj
?????文件????5455836??2013-07-05?01:17??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\Debug\catch_hosts_arp.pch
?????文件????1106944??2013-07-05?03:32??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\Debug\catch_hosts_arp.pdb
?????文件?????205824??2013-07-05?03:43??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\Debug\vc60.idb
?????文件?????143360??2013-07-05?03:32??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\Debug\vc60.pdb
?????文件?????350208??2013-07-06?17:32??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\課程設(shè)計報告.doc
?????目錄??????????0??2013-07-06?17:31??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼\Debug
?????目錄??????????0??2013-07-06?17:31??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\exe
?????目錄??????????0??2013-07-06?17:31??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址\源碼
?????目錄??????????0??2013-07-06?17:32??計算機網(wǎng)絡(luò)課設(shè)-使用ARP協(xié)議獲取局域網(wǎng)內(nèi)部活動主機的物理地址
?????文件?????103936??2013-07-06?17:51??winpcap環(huán)境配置.doc
-----------?---------??----------?-----??----
??????????????9511704????????????????????20
評論
共有 條評論