• 大小: 2.28MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-30
  • 语言: C/C++
  • 标签: 课程设计  ARP  

资源简介

使用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


评论

共有 条评论