資源簡介
使用ARP協議獲取局域網內部活動主機的物理地址,C++實現,附源碼、程序及文檔還有winpcap環境搭建介紹

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