资源简介
使用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; i< inum-1 ;d=d->next 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
相关资源
- C语言课程设计
- c语言电子商务系统
- ChartCtrl控件库(可在VS2019中使用)
- qt进度条(RoundProgressBar)
- 基于Arduino的MLX90614温度采集程序
- usb之CDC(CDC_Standalone.rar)
- 基于esp32的摄像头采集图像代码
- Arduino 敲琴MIDI电子琴 程序报告.docx
- 基于arduino的红绿灯程序,包附原理图
- arduino I2C设备扫描并串口返回地址(
- Proteus仿真:DS1302(时钟or日历).rar
- Proteus仿真:LCD液晶屏显示.rar
- Proteus仿真:LED流水+定时器.rar
- Proteus仿真:PID算法输出.rar
- tm1650+stm32f103源码(board_tm1650.c)
- CrySearch内存搜索器源码
- 宠物管理系统课程设计(源码+数据库
- 西北大学2015年计算机网络复试真题回
- The GNU C Library Reference Manual (1196页)
- XUnZip Zip解压缩.rar
- c语言课程设计:客房登记系统源码
- C++ Primer by Stanley B. Lippman Josée La
- 8位竞赛抢答器的课程设计报告.docx
- Arduino程序(.ino)
- Arduino-LM35-LCD1602数字温度计实验.doc
- Wemos D1 mini阿里云MQTT例程
- 基于空调项目的Autosar 架构的设计.d
- 使用 IBM Rational Systems Developer 和 Rati
- MFCaccess.rar
- VC++MFC课程设计的学生成绩管理系统
川公网安备 51152502000135号
评论
共有 条评论