[安全]使用ARP协议获取局域网内部活动主机的物理地址

本文详细介绍了如何利用ARP协议来获取局域网内部活动主机的物理地址。通过解析ARP请求和响应的过程,理解ARP协议在确定IP地址与MAC地址对应关系中的关键作用。同时,探讨了这一技术在网络安全监测和管理中的潜在应用。
摘要由CSDN通过智能技术生成
#include<iostream>
#include <stdlib.h>
#include <pcap.h>
#include <remote-ext.h>
#pragma comment(lib, "ws2_32.lib")

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;

int 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) == -
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值