-
2016-04-06 20:33:24
通过上一次的配置环境,现在就可以使用了,那么这里我们就先来发一个arp请求吧,这里建议大家安装一个wireshark(抓包工具,操作简单),以便于我们随时查看数据包,方便调试。
首先,我们需要知道的是,ARP是地址解析协议,工作在数据链路层,用来在一个局域网内获取一个IP的mac地址,当我们想要知道一个IP的MAC地址的时候,我们就向局域网广播一个arp请求,如果此IP为活动主机,则其就会回复一个arp应答,我们就是通过有没有收到arp应答来判断此ip主机是否为活动的。
按照上次文章所说的建立好工程,我建立的是简单的控制台程序,配好环境,写上需要的头文件,这里我们还需要#include"packet32.h",#include "ntddndis.h"这两个头文件,我们会用到里面的一些东西。
先定义三个结构体,用来表示我们的包,以太网首部和arp包
//以太网首部 struct ethernet_head { unsigned char dest_mac[6];//目的MAC地址 unsigned char source_mac[6];//源MAC地址 unsigned short eh_type;//帧类型 };
这里有个问题需要主要,在vs中,由于编译的优化问题,结构体的大小不等于结构体中每个变量的大小和,这样在后面的使用会存在问题(将我们构造的数据包强转为char*数据和将收到数据强转回来时),主要原因可以看一下这位的这篇 点击打开链接//arp数据包 struct arp_head { unsigned short hardware_type;//硬件类型 unsigned short protocol_type;//协议类型 unsigned char add_len;//硬件地址长度 unsigned char pro_len;//协议地址长度 unsigned short option;//操作类型,arp请求与应答,rarp请求与应答 unsigned char sour_addr[6];//源MAC unsigned long sour_ip;//源IP unsigned char dest_addr[6];//目的MAC unsigned long dest_ip;//源IP unsigned char padding[18];//填充数据 }; //发送的数据包 struct arp_packet { ethernet_head eth;//以太网首部 arp_head arp;//arp包 };
这里可以这样设置,取消这种对齐项目->属性->C/C++->代码生成,结构成员对齐中设为1字节即可。
需要的变量:(不是所有都用了,有些是我用来做测试的,自己看着用吧)
pcap_if_t *alldevs; //全部网卡列表 pcap_if_t *d; //一个网卡 int inum; //用户选择的网卡序号 int i = 0; //循环变量 pcap_t *adhandle; //一个pcap实例 char errbuf[PCAP_ERRBUF_SIZE]; //错误缓冲区 unsigned char *mac; //本机MAC地址 unsigned char *packet; //ARP包 unsigned long sourceIP; //要伪装成的IP地址 unsigned long destIP; pcap_addr_t *pAddr; //网卡地址 unsigned long ip; //IP地址 unsigned long netmask; //子网掩码 struct in_addr net_ip_address;//网卡IP信息,在pcap.h里面有定义 struct in_addr net_mask_address; char *net_ip_string; char *net_mask_string;
1.获取本机网卡列表
if (pcap_findalldevs(&alldevs, errbuf) == -1) { cout << "Error in pcap_findalldevs:" << errbuf << endl; }
2.这里我们可以输出一下我们获取到的所有网卡信息,当然这在发送arp请求中不是必须的,但考虑到一个电脑可能有多个网卡,这时我们需要让用户选择自己想要用来发送arp请求的网卡
3.打开我们需要的那个网卡,这里我需要的就是第一个网卡,所以直接打开,如果你需要的是其它网卡,先用一个循环跳转到你需要的网卡(d->next表示下一个网卡信息:d=d->next)for (d = alldevs; d; d = d->next) { cout << ++i; if (d->description) { cout << "." << d->description << ";"<< d->addresses << endl; } else cout << ".No description available" << endl; } //如果没有网卡 if (i == 0) { cout << "\nNo interfaces found! Make sure WinPcapis installed.\n" << endl; return -1; }
4.获取本机ip地址(这里为什么是pAddr->next->addr,很多地方直接是pAddr->addr,实际我在使用的时候,后者不行,获取的ip这些信息是空的,必须要先next,你们可以自己试试,原因布吉岛。。。。。。。。)d = alldevs; if ((adhandle = pcap_open_live(d->name, 65536, 0, 1000, errbuf)) == NULL) { cout << "Unable to open the adapter." << d->name << " is not supported bu WinPcap" << endl; return -1; }
5.获取本机mac(这个函数自己实现的)pAddr = d->addresses ip = ((struct sockaddr_in *)pAddr->next->addr)->sin_addr.s_addr;
mac = GetSelfMac(alldevs->name);
unsigned char* GetSelfMac(char* pDevName) { static u_char mac[6]; LPADAPTER lpAdapter = PacketOpenAdapter(pDevName); if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) return NULL; PPACKET_OID_DATA OidData = (PPACKET_OID_DATA)malloc(6 + sizeof(PACKET_OID_DATA)); if(OidData == NULL) { PacketCloseAdapter(lpAdapter); return NULL; } OidData->Oid = OID_802_3_CURRENT_ADDRESS; OidData->Length = 6; memset(OidData->Data, 0, 6); BOOLEAN Status = PacketRequest(lpAdapter, FALSE, OidData); if (Status) memcpy(mac, (u_char*)(OidData->Data), 6); free(OidData); PacketCloseAdapter(lpAdapter); return mac; }
6.构造包(函数自己实现),不修改vs的结构体对齐,这里就会出错
destIP = inet_addr("192.168.218.128");//我要探测的IP packet = BuildArpPacket(mac, sourceIP, destIP);
unsigned char *BuildArpPacket(unsigned char* source_mac, unsigned long srcIP, unsigned long destIP) { static struct arp_packet packet; //目的MAC地址为广播地址,FF-FF-FF-FF-FF-FF memset(packet.eth.dest_mac, 0xFF, 6); //源MAC地址 memcpy(packet.eth.source_mac, source_mac, 6); //上层协议为ARP协议,0x0806 packet.eth.eh_type = htons(0x0806); //硬件类型,Ethernet是0x0001 packet.arp.hardware_type = htons(0x0001); //上层协议类型,IP为0x0800 packet.arp.protocol_type = htons(0x0800); //硬件地址长度:MAC地址长度为0x06 packet.arp.add_len = 0x06; //协议地址长度:IP地址长度为0x04 packet.arp.pro_len = 0x04; //操作:ARP请求为1 packet.arp.option = htons(0x0001); //源MAC地址 memcpy(packet.arp.sour_addr, source_mac, 6); //源IP地址 packet.arp.sour_ip = srcIP; //目的MAC地址,填充0 memset(packet.arp.dest_addr, 0, 6); //目的IP地址 packet.arp.dest_ip = destIP; //填充数据,18个字节 memset(packet.arp.padding, 0, 18); return (unsigned char*)&packet; }
7.发送数据包,这里之后,wireshark(以后我就叫他鲨鱼了)就能抓到数据包了
if (pcap_sendpacket(adhandle, packet, 60) == -1) { cout << "pcap_sendpacket error" << endl; }
至此,arp请求的发送完成,下次我们来看接收,通过对一个我们想要扫描的ip发送arp请求,如果收到了来自该ip的arp应答,则此ip的主机为活动主机
更多相关内容 -
不用安装Wincap程序实现ARP广播包的发送和接收
2014-10-09 21:00:50的一个驱动文件,当安装Wincap程序后你会发现 在C:\WINDOWS\system32\drivers下面会有一个npf.sys文件,系统下的驱动,在 C:\WINDOWS\system32文件夹下会发现 WinPcap 相关的库文件,其中有一个paket.dll库就是我在...这几天由于项目需求,做了一个局域网ip和MAC地址搜索的程序,程序调试完成了但是有一个问题一直困扰这我,就是软件打包后,每次都要安装WinPcap后才能用自己的程序,很是烦人,经过几天的测试终于找到了两种方法,不需要安装WinPcap。经过测试都没有问题。
方法一:经过很多次的分析,程序主要是用到了WinPcap的一个驱动文件,当安装Wincap程序后你会发现 在C:\WINDOWS\system32\drivers下面会有一个npf.sys文件,系统下的驱动,在C:\WINDOWS\system32文件夹下会发现WinPcap相关的库文件,其中有一个paket.dll库就是我在程序中用到的库。这时你可以把这个npf.sys文件拷出来,再把Wincap卸载掉,此时运行自己的程序是不能实现IP和MAC地址的搜做的,这时可以把刚才拷出来的文件npf.sys重新拷贝到C:\WINDOWS\system32\drivers下面,再运行自己的程序,你会奇迹般的发现可以正常搜索。所以这个npf.sys文件是很重要的,现在的方法是你可以在程序中编写一个copy程序,把npf.sys文件拷贝到C:\WINDOWS\system32\drivers文件夹下。这样就OK了。
方法二:方法一其实实现起来比较简单而且方便,但是还有一个更好的办法。其实通过分析发现npf.sys就是系统的一个驱动,你只要把它加载注册表中,就把这个驱动加载好了。当你把npf.sys文件拷贝到C:\WINDOWS\system32\drivers下面时系统会自动加载到注册表如下图:system32\drivers\npf.sys
现在我们怎么办那,我们也可以仿照这个自己加载这个NPF驱动程序到注册表,只是我们加载路径不是系统路径,可以把npf.sys文件拷贝到我们的工程中,通过程序创建注册表,并加载我们自己的路径驱动。这样就不用在程序打包后每次安装时先要安装WinPcap程序。
经过测试两种方法都能实现功能,只是第二种方法稍微麻烦点。还有要注意的是32位系统和64位系统用到的npf文件是不一样的。在不同系统中要加载不同的文件。
-
WinPcap实战(一)——发送ARP包
2015-09-17 17:00:09ARP包的结构: ARP包格式:物理帧头(14B)——ARP帧结构(28B)——填充数据(18B)——CRC(4B)。这里给出一张图(图中没有18字节的填充数据和4字节的校验位): 物理帧头(14B):目的MAC (6B) ——源MAC(6B) ——...ARP包的结构:
-
ARP包格式:物理帧头(14B)——ARP帧结构(28B)——填充数据(18B)——CRC(4B)。这里给出一张图(图中没有18字节的填充数据和4字节的校验位):
-
物理帧头(14B):目的MAC (6B) ——源MAC(6B) ——类型(2B, ARP帧:0x0806)
-
ARP帧结构(28B):硬件类型(2B,Ethernet:0x1)——上层协议类型(2B,IP:0x0800)——硬件地址长度(1B,0x6)——IP地址长度(1B,0x4)——操作(2B,请求: 0x1; 应答: 0x2)——源MAC地址(6B)——源IP地址(6B)——目的MAC地址(6B)——目的IP地址(6B)
依据ARP包的结构定义结构体
//14字节以太网首部 struct EthernetHeader { u_char DestMAC[6]; //目的MAC地址 6字节 u_char SourMAC[6]; //源MAC地址 6字节 u_short EthType; //上一层协议类型,如0x0800代表上一层是IP协议,0x0806为arp 2字节 }; //28字节ARP帧结构 struct ArpHeader { unsigned short hdType; //硬件类型 unsigned short proType; //协议类型 unsigned char hdSize; //硬件地址长度 unsigned char proSize; //协议地址长度 unsigned short op; //操作类型,ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)。 u_char smac[6]; //源MAC地址 u_char sip[4]; //源IP地址 u_char dmac[6]; //目的MAC地址 u_char dip[4]; //目的IP地址 }; //定义整个arp报文包,总长度42字节 struct ArpPacket { EthernetHeader ed; ArpHeader ah; };
源代码
#include "stdafx.h" #include <pcap.h> #define ETH_ARP 0x0806 //以太网帧类型表示后面数据的类型,对于ARP请求或应答来说,该字段的值为x0806 #define ARP_HARDWARE 1 //硬件类型字段值为表示以太网地址 #define ETH_IP 0x0800 //协议类型字段表示要映射的协议地址类型值为x0800表示IP地址 #define ARP_REQUEST 1 //ARP请求 #define ARP_RESPONSE 2 //ARP应答 //14字节以太网首部 struct EthernetHeader { u_char DestMAC[6]; //目的MAC地址 6字节 u_char SourMAC[6]; //源MAC地址 6字节 u_short EthType; //上一层协议类型,如0x0800代表上一层是IP协议,0x0806为arp 2字节 }; //28字节ARP帧结构 struct ArpHeader { unsigned short hdType; //硬件类型 unsigned short proType; //协议类型 unsigned char hdSize; //硬件地址长度 unsigned char proSize; //协议地址长度 unsigned short op; //操作类型,ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)。 u_char smac[6]; //源MAC地址 u_char sip[4]; //源IP地址 u_char dmac[6]; //目的MAC地址 u_char dip[4]; //目的IP地址 }; //定义整个arp报文包,总长度42字节 struct ArpPacket { EthernetHeader ed; ArpHeader ah; }; int main() { pcap_if_t *alldevs; //所有网络适配器 pcap_if_t *d; //选中的网络适配器 int inum; //选择网络适配器 int i = 0; //for循环变量 pcap_t *adhandle; //打开网络适配器,捕捉实例,是pcap_open返回的对象 char errbuf[PCAP_ERRBUF_SIZE]; //错误缓冲区,大小为256 /* 获取本机设备列表 */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { fprintf(stderr, "Error in pcap_findalldevs: %s\n", errbuf); exit(1); } /* 打印列表 */ for (d = alldevs; d; d = d->next) { printf("%d. %s", ++i, d->name); if (d->description) printf(" (%s)\n", d->description); else printf(" (No description available)\n"); } if (i == 0) { printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); return -1; } printf("Enter the interface number (1-%d):", i); scanf("%d", &inum); if (inum < 1 || inum > i) { printf("\nInterface number out of range.\n"); /* 释放设备列表 */ pcap_freealldevs(alldevs); return -1; } /* 跳转到选中的适配器 */ for (d = alldevs, i = 0; i< inum - 1; d = d->next, i++); /* 打开设备 */ if ((adhandle = pcap_open(d->name, // 设备名 65536, // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容 PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式 1000, // 读取超时时间 NULL, // 远程机器验证 errbuf // 错误缓冲池 )) == NULL) { fprintf(stderr, "\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); /* 释放设备列表 */ pcap_freealldevs(alldevs); return -1; } /*以上代码在WinPcap开发文档中都可以找到,填充ARP包的代码则要自己编写*/ //开始填充ARP包,填充数据写死在代码中,测试用时数据可随意填写 unsigned char sendbuf[42]; //arp包结构大小,42个字节 unsigned char mac[6] = { 0x00,0x11,0x22,0x33,0x44,0x55 }; unsigned char ip[4] = { 0x01,0x02,0x03,0x04 }; EthernetHeader eh; ArpHeader ah; //赋值MAC地址 memset(eh.DestMAC, 0xff, 6); //以太网首部目的MAC地址,全为广播地址 memcpy(eh.SourMAC, mac, 6); //以太网首部源MAC地址 memcpy(ah.smac, mac, 6); //ARP字段源MAC地址 memset(ah.dmac, 0xff, 6); //ARP字段目的MAC地址 memcpy(ah.sip, ip, 4); //ARP字段源IP地址 memset(ah.dip, 0x05, 4); //ARP字段目的IP地址 eh.EthType = htons(ETH_ARP); //htons:将主机的无符号短整形数转换成网络字节顺序 ah.hdType = htons(ARP_HARDWARE); ah.proType = htons(ETH_IP); ah.hdSize = 6; ah.proSize = 4; ah.op = htons(ARP_REQUEST); //构造一个ARP请求 memset(sendbuf, 0, sizeof(sendbuf)); //ARP清零 memcpy(sendbuf, &eh, sizeof(eh)); memcpy(sendbuf + sizeof(eh), &ah, sizeof(ah)); //如果发送成功 if (pcap_sendpacket(adhandle, sendbuf, 42) == 0) { printf("\nPacketSend succeed\n"); } else { printf("PacketSendPacket in getmine Error: %d\n", GetLastError()); } /* 释放设备列表 */ pcap_freealldevs(alldevs); return 0; }
运行结果
程序在VS2015企业版里面运行无误,需要提前配置好WinPcap的编程环境
选择第三个网卡,成功发送ARP包
抓包软件抓到ARP包:
传送门
接收ARP包:
http://blog.csdn.net/u013539342/article/details/48525525
参考网址:http://blog.csdn.net/cqcre/article/details/40213911
WinPcap编程配置:http://www.findspace.name/easycoding/871
VS下This function or variable may be unsafe解决办法:
http://jingyan.baidu.com/article/49711c616b8a1ffa441b7cdc.html -
-
每个UDP包都会发送ARP请求,如何关闭强制ARP?
2021-04-16 14:54:21解决方案: ...可以通过设置MR2 (Mode Register 2)的FARP寄存器来设置强制ARP功能,如果此位设置为“1”,它为每个UDP数据包发送ARP请求。设置为“0”,将只在第一次发送的时候发送一次ARP请求数据包。 ... -
ARP原理概述——基于WinPcap发送ARP请求数据包获取远程MAC地址
2020-12-04 00:33:20ARP原理概述——基于WinPcap发送ARP请求数据包获取远程MAC地址ARP协议ARP概述ARP工作原理ARP数据包格式编写程序发送ARP请求获取本机和远程IP的MAC注意: ARP协议 ARP概述 互联网中,IP地址的作用是屏蔽物理网络地址... -
Windows 网络 ARP的防护
2021-11-23 08:22:10ARP攻击原理 攻击主机发送虚假的MAC地址给被攻击主机和网关,使被攻击主机无法正常通信 ARP欺骗原理 攻击主机发送自己的MAC地址给被攻击主机和网关被攻击主机可以正常通信,但所有数据都要经过攻击主机 第十二章... -
ARP协议之广播请求单播回应
2018-06-30 23:55:07ARP协议很不安全,因为会全网广播你的IP和MAC。原理:在同一个局域网内,当PC1需要跟PC2进行通讯时,PC1没有PC2的MAC信息(注:图片来自拼客网http://www.pinginglab.net)这样的包得不到目标主机的MAC,没办法装... -
Python实现简易ARP请求
2021-01-14 06:57:24主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存... -
基于Winpcap实现的发送ARP数据包和IP数据包
2019-09-26 20:16:15仿真ARP协议获得网段内主机的MAC表 使用帧完成两台主机的通信(Hello! I’m …) 1.2 高端任务 完成两台主机通过中间主机的数据通信(网络层) 增加基于IP地址的转发功能 增加网络层封装... -
day14、1 - 网络层--ARP协议
2022-05-09 13:31:07一、ARP协议>二、ARP攻击和欺骗 -
LAN技术 之 免费ARP
2020-08-31 11:19:34通过目的IP地址来获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。 一个网络设备要发送数据给另一个网络设备时,必须要知道对方的IP地址。但是,仅有IP地址是不够的,因为IP数据.. -
【免费ARP】
2021-11-30 11:48:04用于通告一个新的现AC地址:发送方更换网卡,AC地址发生改变,为了能够在AP表项老化前通告所有主机,发送方可以发送一个免费ARP C、C.用于检查重复的IP地址:正常情况下不会收到ARP回应,如果收到,则表明本网络中... -
网络安全学习(十五)ARP
2022-05-26 18:54:21广播与广播域 一广播:将广播地址做为目的地址的数据帧 一广播域:网络中能接收到同一个广播所有节点的集合 MAC地址广播 —广播地址为FF-FF-FF-FF-FF-FF IP地址广播 1.255.255.255.255 2.广播IP地址为IP... -
网络层协议介绍以及ARP在Windows和华为系统中相关命令
2020-10-22 13:56:44(一)、IP字段的详细解释:三、ICMP协议(一)、Windows系统中ping命令常用选项:(二)、跟踪路由路径命令:四、广播与广播域五、ARP协议(一)、ARP协议概述(二)、ARP的工作原理:六、ARP相关命令(一)、Windows... -
Windows的WinPcap编程实现ARP欺骗的基本功能的源码
2017-01-07 11:37:10主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以... -
ARP协议基础
2020-06-27 11:45:311、ARP协议简介 地址解析协议(Address Resolution Protocol),功能是通过目标设备的IP地址,查询出目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居... -
什么是免费ARP-看这篇就够了
2021-03-23 11:31:00免费ARP本质是ARP协议的实现,所以只要有支持TCP/IP的网卡,支持ARP协议,就有免费ARP。免费ARP报文就是ARP请求或ARP响应,只是它的...什么情况下触发ARP协议发送免费ARP 局域网IP地址冲突时,地址修改或变更时,DH. -
使用ARP对局域网进行欺骗攻击
2021-10-13 06:07:38ARP是什么? ARP是地址转换协议(Address Resolution Protocol)的英文缩写。是链路层协议,工作在OSI 模型的第二层,在本层和硬件接口间进行联系,同时对上层(网络层)提供服务。在局域网中我们的主机网卡通信并不能... -
ARP攻击python实现
2021-01-26 16:08:161. 前言代码参考:https://github.com/byt3bl33d3r/arpspoof/blob/master/arpspoof/arpspoof.py题目描述:任务三:网络协议堆栈渗透测试任务环境说明:服务器场景:WindowsServer18065服务器场景操作系统:Windows... -
网络-ARP协议详解与ARP欺骗(中毒)攻击实战
2020-12-02 16:01:05过程:检查ARP高速缓存,有对应表项则写入MAC帧,没有则用目的MAC地址为FF-FF FF-FF-FF-FF的帧封装并广播ARP请求分组,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个ARP响应分组,源... -
【转】TCP/IP协议——ARP详解
2020-01-29 14:59:45本文主要讲述了ARP的作用、ARP分组格式、ARP高速缓存、免费ARP和代理ARP。 1.学习ARP前要了解的内容 建立TCP连接与ARP的关系 应用接受用户提交的数据,触发TCP建立连接,TCP的第一个SYN报文通过connect函数到达IP... -
ARP数据包伪造
2017-02-22 16:36:28ARP封包相关测试 -
网络知识:ARP转发原理
2021-02-23 19:41:57windows系统中ping命令常用选项: -t 参数会一直不停的执行ping -a 参数可以显示主机名称 -l 参数可以设定ping包的大小 ###在Linux系统下为:-s –n 指定发送包的个数 -c –S 指定源IP去ping ... -
网络安全实战(一)ARP欺骗
2021-12-27 17:08:39网络安全实战(一)ARP欺骗 -
Python scapy 实现一个简易 arp 攻击脚本
2021-01-28 15:30:43scapy是python写的一个功能强大的交互式数据包处理程序,可用来发送、嗅探、解析和伪造网络数据包,常常被用到网络攻击和测试中。scapy的安装在Linux非常便利,但在Windows下比较复杂。以下假定读者使用的是Ubuntu ... -
Socket基础九:ARP欺骗程序设计
2021-01-13 12:41:07参考书目:《Windows网络编程》刘琰等著 一、ARP欺骗程序设计 位于数据链路层的ARP欺骗(ARP spoofing)是针对以太网地址解析协议(ARP)的一种攻击技术。此种攻击可让攻击者取得局域网上的数据分组甚至篡改分组,且可... -
ARP操作系统更新方式
2019-06-27 22:01:32ARP操作系统更新方式 1)windows xp 接收到ARP请求,源物理地址改变 ... -
Arp命令
2021-07-04 03:09:38ARP命令用于显示和修改“地址解析协议(ARP)”缓存中的项目。ARP缓存中包含一个或多个表,它们用于存储IP地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表... -
ARP协议解析与实战
2022-05-14 18:54:341.ARP协议概述 1.1 什么是ARP协议? ARP是Address Resolution Protocol的简写。翻译成中文就是:地址解析协议。 那么解析什么地址呢?本质上就是把IP解析成MAC的一种协议。 1.2 为什么需要把IP解析成MAC地址?... -
ARP命令参数详解
2021-07-27 01:51:47Arp显示和修改“地址解析协议(ARP)”缓存中的项目。ARP缓存中包含一个或多个表,它们用于存储IP地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在...