利用PCAP技术获取网卡MAC地址

合集下载

winPcap获取网卡网络地址和子网掩码

winPcap获取网卡网络地址和子网掩码

winPcap获取网卡网络地址和子网掩码下面是获取网络地址(不是IP地址)和子网掩码的示例,没时间接着往下做例子了,因为接下来需要在LINUX下面使用libPcap,当然我会贴出代码,会linux编程的大牛一般都会,所以准确的说是贴给自己的,喜欢玩数据包的朋友自己看官方例子就行[cpp]view plaincopy?1.#include<pcap.h>2./**3.数据包主执行函数4.*/5.#pragma comment(lib,"wpcap.lib")6.#pragma comment(lib,"Packet.lib")7.#pragma comment(lib,"ws2_32.lib")8.9.void getAddr();10.int main(int argc,char *argv[])11.{12.13.getAddr();14.return 0;15.}16.17.//获取网卡网络地址和子网掩码18.void getAddr()19.{20.pcap_if_t *alldevs;21.pcap_if_t *d;22.struct in_addr net_ip_address;//网卡IP信息,在pcap.h里面有定义23.u_int32_t net_ip;24.char *net_ip_string;25.26.struct in_addr net_mask_address;27.u_int32_t net_mask;28.char *net_mask_string;29.30.int i=0;31.char errbuf[PCAP_ERRBUF_SIZE];32.if(pcap_findalldevs(&alldevs,errbuf)==-1)//无法找到网卡列表33.{34.fprintf(stderr,"error in pcap_findalldevs: %s\n",errbuf);35.exit(1);36.}37./* 扫描列表 */38.for(d=alldevs;d;d=d->next)39.{40.printf("%s\n",d->name);41.printf("Description: %s\n",d->description);42.pcap_lookupnet(d->name,&net_ip,&net_mask,errbuf);43._ip_address.s_addr = net_ip;_ip_string = inet_ntoa(net_ip_address);//format46.printf("网络地址: %s \n",net_ip_string);47._mask_address.s_addr = net_mask;_mask_string = inet_ntoa(net_mask_address);//format50.printf("子网掩码: %s \n",net_mask_string);51.printf("\n");52.}53.54./* 释放链表 */55.pcap_freealldevs(alldevs);56.printf("\n");57.}VC6.0下测试通过。

电脑上网卡MAC地址查看方法

电脑上网卡MAC地址查看方法

电脑上网卡MAC地址查看方法在计算机网络中,每个网卡都有一种唯一的标识符,称为MAC地址(Media Access Control Address),它由12个十六进制数字组成,通常以“冒号”或“短划线”分隔为六个组。

MAC地址是一个网卡在工厂生产时分配的,无法更改的硬件地址。

在Windows、Mac和Linux等操作系统中,我们可以通过不同的方法来查看电脑上网卡的MAC地址。

下面将介绍Windows、Mac和Linux操作系统中查看MAC地址的方法。

在Windows操作系统中,有几种方法可以查看MAC地址:方法一:使用命令提示符(CMD)1.打开“开始”菜单,点击“运行”。

2. 输入“cmd”并按下回车键,打开命令提示符窗口。

3. 在命令提示符窗口中,输入“ipconfig /all”命令并按下回车键。

方法二:使用控制面板1.打开“开始”菜单,并点击“控制面板”。

2. 在控制面板窗口中,选择“网络和Internet”。

3. 在“网络和Internet”窗口中,点击“网络和共享中心”。

4.在“网络和共享中心”窗口中,点击左侧的“更改适配器设置”。

5.在“更改适配器设置”窗口中,找到你所使用的网络适配器,右键点击,并选择“状态”。

6.在网络适配器状态窗口中,点击“详细信息”按钮。

在Mac操作系统中,可以通过以下方法查看MAC地址:方法一:使用“系统偏好设置”1.点击屏幕左上角的苹果图标,选择“系统偏好设置”。

2.在“系统偏好设置”窗口中,点击“网络”。

3.在网络设置窗口中,选择你所使用的网络连接方式(如Wi-Fi)。

方法二:使用“终端”命令行1. 打开“Launchpad”(即启动台),选择“其他”文件夹。

2.打开“终端”应用程序。

3. 在终端窗口中,输入“ifconfig ,grep 'ether'”命令,并按下回车键。

4. 在命令输出中,可以找到以“ether”开头的行,紧跟着的就是你的MAC地址。

如何查看电脑网卡的MAC地址

如何查看电脑网卡的MAC地址

如何查看电脑网卡的MAC地址电脑网卡的MAC地址是硬件设备的唯一标识符,用于在局域网中识别和连接设备。

在一些情况下,您可能需要查看电脑的网卡MAC地址,以便进行网络配置或故障排除。

在本文中,我们将介绍几种不同的方法来查看电脑网卡的MAC地址。

1. 使用命令提示符(Windows)-打开“命令提示符”应用程序。

您可以在开始菜单中“命令提示符”。

- 输入“ipconfig /all”并按下回车键。

此命令将显示计算机上的所有网络适配器的详细信息。

-查找以太网适配器或无线局域网适配器的“物理地址”项。

该项旁边的数值就是MAC地址。

2. 使用PowerShell(Windows)- 打开“PowerShell”应用程序。

您可以在开始菜单中“PowerShell”。

- 输入“Get-NetAdapter”并按下回车键。

这会显示计算机上的所有网络适配器的列表。

- 查找以太网适配器或无线局域网适配器的“MacAddress”项。

该项的值是MAC地址。

3. 使用系统偏好设置(Mac)-点击屏幕上方的“苹果”图标,并选择“系统偏好设置”。

-在系统偏好设置窗口中,点击“网络”。

-在网络设置窗口中,选择左侧的网络适配器(例如以太网或Wi-Fi)。

-点击右侧的“高级”按钮。

-在高级设置窗口的“硬件”选项卡中,您可以找到“MAC地址”。

该项的数值就是MAC地址。

4. 使用ifconfig命令(Linux)- 打开终端应用程序。

在大多数Linux发行版中,您可以在应用菜单中找到终端。

- 输入“ifconfig”并按下回车键。

该命令会显示所有网络接口的详细信息。

- 查找以太网适配器或无线局域网适配器的“HWaddr”项。

该项后的数值就是MAC地址。

5. 使用ip命令(Linux)-打开终端应用程序。

- 输入“ip link show”并按下回车键。

该命令将显示计算机上的所有网络接口的信息。

- 查找以太网适配器或无线局域网适配器的“link/ether”项。

使用ARP获取局域网内设备IP和MAC地址

使用ARP获取局域网内设备IP和MAC地址

使⽤ARP获取局域⽹内设备IP和MAC地址根据Arp列表数据,查询本地设备在线状态使⽤ arp -a 获得所有内⽹地址,⾸先看Mod对象public struct MacIpPair{public string HostName;public string MacAddress;public string IpAddress;public override string ToString(){string str = "";str += $"HostName:{HostName}\t{IpAddress}\t{MacAddress}";return str;}}其次看看查询⽅法:public List<MacIpPair> GetAllMacAddressesAndIppairs(){List<MacIpPair> mip = new List<MacIpPair>();System.Diagnostics.Process pProcess = new System.Diagnostics.Process();pProcess.StartInfo.FileName = "arp";pProcess.StartInfo.Arguments = "-a ";eShellExecute = false;pProcess.StartInfo.RedirectStandardOutput = true;pProcess.StartInfo.CreateNoWindow = true;pProcess.Start();string cmdOutput = pProcess.StandardOutput.ReadToEnd();string pattern = @"(?<ip>([0-9]{1,3}\.?){4})\s*(?<mac>([a-f0-9]{2}-?){6})";foreach (Match m in Regex.Matches(cmdOutput, pattern, RegexOptions.IgnoreCase)){mip.Add(new MacIpPair(){MacAddress = m.Groups["mac"].Value,IpAddress = m.Groups["ip"].Value});}return mip;}在写个调⽤就可以了:class Program{static void Main(string[] args){var arp = new Comm.ArpHelper();var i = arp.GetLocalIpInfo();Console.WriteLine(i.ToString());var l = arp.GetAllMacAddressesAndIppairs();l.ForEach(x =>{//Console.WriteLine($"IP:{x.IpAddress} Mac:{x.MacAddress}");Console.WriteLine(x.ToString());});Console.WriteLine("\r\n==================================================\r\n");Console.WriteLine("本地⽹卡信息:");Console.WriteLine(arp.GetLocalIpInfo() + " == " + arp.getLocalMac());string ip = "192.168.68.42";Console.Write("\n\r远程 " + ip + " 主机名信息:");var hName = arp.GetRemoteHostName(ip);Console.WriteLine(hName);Console.WriteLine("\n\r远程主机 " + hName + " ⽹卡信息:");string[] temp = arp.getRemoteIP(hName);for (int j = 0; j < temp.Length; j++){Console.WriteLine("远程IP信息:" + temp[j]);}Console.WriteLine("\n\r远程主机MAC :");Console.WriteLine(arp.getRemoteMac("192.168.68.21", "192.168.68.255"));Console.WriteLine(arp.getRemoteMac("192.168.68.21", "192.168.68.44"));Console.ReadKey();}}=====================================================================c# 通过发送arp包获取ip等信息利⽤dns类和WMI规范获取IP及MAC地址在C#编程中,要获取主机名和主机IP地址,是⽐较容易的.它提供的Dns类,可以轻松的取得主机名和IP地址.⽰例:string strHostName = Dns.GetHostName(); //得到本机的主机名IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IPstring strAddr = ipEntry.AddressList[0].ToString(); //假设本地主机为单⽹卡在这段代码中使⽤了两个类,⼀个是Dns类,另⼀个为IPHostEntry类,⼆者都存在于命名空间中.Dns类主要是从域名系统(DNS)中检索关于特定主机的信息,上⾯的代码第⼀⾏就从本地的DNS中检索出本地主机名.IPHostEntry类则将⼀个域名系统或主机名与⼀组IP地址相关联,它与DNS类⼀起使⽤,⽤于获取主机的IP地址组.要获取远程主机的IP地址,其⽅法也是⼤同⼩异.在获取了IP地址后,如果还需要取得⽹卡的MAC地址,就需要进⼀步探究了.这⾥⼜分两种情况,⼀是本机MAC地址,⼆是远程主机MAC地址.⼆者的获取是完全不同的.在获取本机的MAC地址时,可以使⽤WMI规范,通过SELECT语句提取MAC地址.在.NET框架中,WMI规范的实现定义在System.Management命名空间中.ManagementObjectSearcher类⽤于根据指定的查询检索管理对象的集合ManagementObjectCollection类为管理对象的集合,下例中由检索对象返回管理对象集合赋值给它.⽰例:ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ; ManagementObjectCollection queryCollection = query.Get();foreach( ManagementObject mo in queryCollection ){if(mo["IPEnabled"].ToString() == "True")mac = mo["MacAddress"].ToString();}获取远程主机的MAC地址时,需要借⽤API函数SendARP.该函数使⽤ARP协议,向⽬的主机发送ARP包,利⽤返回并存储在⾼速缓存中的IP和MAC地址对,从⽽获取远程主机的MAC地址.⽰例:Int32 ldest= inet_addr(remoteIP); //⽬的ipInt32 lhost= inet_addr(localIP); //本地iptry{Int64 macinfo = new Int64();Int32 len = 6;int res = SendARP(ldest,0, ref macinfo, ref len); //发送ARP包return Convert.ToString(macinfo,16);}catch(Exception err){Console.WriteLine("Error:{0}",err.Message);}return 0.ToString();但使⽤该⽅式获取MAC时有⼀个很⼤的限制,就是只能获取同⽹段的远程主机MAC地址.因为在标准⽹络协议下,ARP包是不能跨⽹段传输的,故想通过ARP协议是⽆法查询跨⽹段设备MAC地址的。

获取IP地址与MAC地址的对应关系报告

获取IP地址与MAC地址的对应关系报告

主机 A
主机 X
主机 B
主机 Y
假设在一个以太网中,主机 A 欲获得主机 B 的 IP 地址 Ib 与 MAC 地址 Pb 的映射关系, ARP 协议的工作过程为: ①主机 A 广播发送一个带有主机 B 的 IP 地址 Ib 同时带有本机 IP 地址与 MAC 地址对应 关系的请求信息包,请求主机 B 用它的 IP 地址 Ib 和 MAC 地址 Pb 的映射关系进行响应; ②以太网中的所有主机(包括主机 A 和 B 在内)接收到这个请求信息,并记录下主机 A 的 IP 地址与 MAC 地址之间的对应关系; ③主机 B 识别该请求信息,并向主机 A 发送带有自己的 IP 地址 Ib 和 MAC 地址 Pb 映射 关系的响应信息包; ④主机 A 得到主机 B 的 IP 地址与 MAC 地址之间的对应关系,并且在随后的数据发送过 程中使用该映射关系。 注:可以使用高速缓存技术对 ARP 工作过程进行优化,但是这个实验不要求我们实现。
获取 IP 地址与 MAC 地址的对应关系实验报告
一、实验目的: 在以太网中获取 MAC 地址常常是其他工作的前提。 本实验要求使用系统提供的命令和利 用 WinPcap 编程两种方式获取以太网中主机的 MAC 地址。学习 ARP 的工作过程,深入了解 IP 地址和 MAC 地址的有关概念。 二、实验环境与工具 本实验使用以太网中的主机,以太网既可以是共享式以太网也可以是交换式以太网。 应 用程序开发工具为 Microsoft Visual Studio 2010,MFC 三、实验原理 1、如何获取远程主机 IP 地址与 MAC 地址之间的对应关系(ARP 基本思想) :
址和源 IP 地址要用虚拟的地址(因为此时不知道本机的 MAC 地址是什么) ,本机收到 ARP 请求后马上做出响应; �本机的应用程序捕捉到此 ARP 响应,获取本机的 MAC 地址,从而得到本机 IP 地址与 MAC 地址之间的对应关系。

如何获取网卡的MAC地址

如何获取网卡的MAC地址

如何获取网卡的MAC地址获取网卡的MAC地址可以通过以下几种方法:1.使用操作系统提供的命令行工具:不同的操作系统提供了不同的命令行工具来获取网卡的MAC地址。

下面分别介绍Windows和Linux操作系统下的方法。

- Windows操作系统:在命令提示符或PowerShell中输入"ipconfig /all"命令,会列出所有网络接口的详细信息,包括MAC地址。

- Linux操作系统:在终端中输入"ifconfig"命令,会列出所有网络接口的详细信息,包括MAC地址。

2.使用编程语言获取:可以使用各种编程语言(如Python、Java、C++等)提供的网络编程库来获取网卡的MAC地址。

下面以Python为例,演示如何通过编程获取网卡的MAC地址:```pythonimport subprocessimport redef get_mac_address(:result = subprocess.run(["ipconfig", "/all"],capture_output=True, text=True)output = result.stdoutmac_pattern = r"Physical Address[ .]*: (.*)"mac_address = re.findall(mac_pattern, output)[0].replace("-", ":")return mac_addressmac = get_mac_addressprint(mac)```这段代码通过执行"ipconfig /all"命令,并使用正则表达式匹配输出中的MAC地址,最终返回网卡的MAC地址。

3.使用网络管理工具:可以使用一些网络管理工具来获取网卡的MAC地址,这些工具通常提供了更丰富的功能和更友好的界面,比如Wireshark、NetCut等。

电脑mac地址怎么查

电脑mac地址怎么查一、什么是MAC地址MAC地址(Media Access Control Address)又称物理地址,它是计算机网卡的唯一硬件地址。

每个网卡都有一个唯一的MAC地址,用于在局域网中标识计算机的身份。

MAC地址由12个十六进制位组成,通常以冒号(:)或连字号(-)分隔为六组。

例如,00:1A:E2:15:21:72就是一个典型的MAC地址。

二、为什么需要查找MAC地址在某些情况下,我们可能需要查找计算机的MAC地址。

1. 网络管理: 系统管理员可能需要通过MAC地址来跟踪和管理网络上的设备。

2. 网络安全: MAC地址可以用于实施网络安全策略,如MAC地址过滤和认证。

3. 网络故障排除: 在网络出现故障时,查找设备的MAC地址可以帮助我们确定问题的来源。

三、如何查找MAC地址下面我们将介绍几种常见的方法来查找计算机的MAC地址。

1. Windows系统在Windows系统中,查找MAC地址可以通过以下步骤进行:a. 打开“开始”菜单,点击“控制面板”。

b. 在控制面板中,选择“网络和Interne t”。

c. 在“网络和Internet”下,点击“查看网络状态和任务”。

d. 在新窗口中,点击“以太网”或“Wi-Fi”,然后点击“详细信息”。

e. 在新窗口中,查找“物理地址”或“MAC地址”,即可找到计算机的MAC地址。

2. macOS系统如果你是在macOS系统上查找MAC地址,可以按照以下步骤进行:a. 打开“系统偏好设置”。

b. 在“系统偏好设置”中,点击“网络”。

c. 在网络设置中,选择你正在使用的网络连接,如“以太网”或“Wi-Fi”。

d. 在右下方的窗口中,点击“高级”。

e. 在新窗口中,切换到“硬件”选项卡,即可找到计算机的MAC 地址。

3. Linux系统对于Linux系统,可以通过终端来查找MAC地址。

请按照以下步骤进行:a. 打开终端。

b. 在终端中,输入以下命令:ifconfig -a | grep HWaddrc. 终端将显示与每个网络接口相关的MAC地址。

第二章 利用winpcap获取网卡信息

第2章利用Winpcap获取计算机网卡信息一个主机可以拥有多张网卡,在进行网络编程之前,我们都会先得到计算机网卡配置的有关信息。

网卡的相关信息主要包括该网卡的名称,网卡的描述和相关配置的IP地址配置信息(IP地址、子网掩码、网关)以及网卡的MAC地址等。

本章的主要内容是利用Winpcap 提供的相关函数,取得网卡的名称以及IP地址配置的相关信息。

2.1 存储计算机网卡信息的数据结构在计算机中,由于存在多个网卡,所以常常使用链表的结构体来保存每个网卡节点的信息。

主机网卡链表每个节点的主要包含的信息如下:数据结构pcap_if(接口的信息)网卡节点pcap_if的数据结构。

struct pcap_if {struct pcap_if *next; // 指向下一个节点char *name; // 网卡名称char *description; // 网卡描述struct pcap_addr *addresses; // 网卡IP地址信息u_int flags; // 标记,目前只支持换回地址标记为PCAP_IF_LOOPBACK };IP地址信息的数据结构pcap_addr的结构如下:数据结构pcap_addr(地址信息)struct pcap_addr {struct pcap_addr *next; // 下一个IP地址信息节点(一个网卡可以绑定多个IP)struct sockaddr *addr; // IP 信息地址的结构struct sockaddr *netmask; // 子网掩码的信息结构struct sockaddr *broadaddr; // 广播IP地址信息struct sockaddr *dstaddr; //目标IP地址信息,如果不是点对点网络,该字段为NULL };2.2 winpcap获取网卡信息的相关函数在进行Winpcap编程之前,先介绍Winpcap编程的主要流程与相关步骤。

WINPCAP开发(一):零基础入门


unsigned char ucPhysicalAddr
{
pcap_if_t *alldevs;
pcap_if_t *d;
pcap_t *fp = NULL;
int i = 0;
char errbuf[PCAP_ERRBUF_SIZE], *p;
/* 这个 API 用来获得网卡的列表 */
if (pcap_findalldevs(&alldevs, errbuf) == -1)
tion) - 1; j > 0; j--)
for(int j = strlen(d->descrip
{
== 0x20)
if (d->description[j]
[j] = '';
d->description
else
break;
}
\n", szIPSelf, d->description);
printf("[*] Bind on %s %s ...
pcap_if_t *d;//用于遍历网卡链表的临时变量
int i = 0;//记录网卡个数
char errbuf[PCAP_ERRBUF_SIZE];//存储错误信息
char szGateIPAddr[16];//网卡对应网关地址
char *p;//网卡名词
char szIPAddr[16];//网卡对应 IP
{
pen the adapter. \ WinPcap\n", d->name);
fprintf(stderr,"\nUnable to o %s is not supported by

利用PCAP技术获取网卡MAC地址

48 位长, 由 6 位 00 ~ 0FFH 之间的十六进制数中间用
与网络上的其它主机进行通讯。 而 IP 地址冲突会使网 络客户不能正常工作, 有些非法的 IP 用户会对应用系 统的安全造成严重的威胁。 造成 IP 地址冲突的原因很多, 很多情况是用户对 “IP 地址” 、 “子网掩码” 、 “默认 TCP IP 不了解, 不知道 网关” 等参数如何设置, 混乱设置造成, 还有就是有人 窃用他人的 IP 地址。 作为网管人员, 必须全面掌握 IP 地址的分布情 况, 由于 IP 地址用户可以修改, 而网卡 M A C 地址必 须使用专用软件才能修改, 因此网管人员只需掌握网 卡 M A C 地址, 就可在网络管理中获得主动。
第 16 卷 第 11 期 电 脑 开 发 与 应 用 ( 总 723) ・23・
向网络发出一个 A R P R equest 广播包, 查询对方的 M A C 地址, 这个包会包含发送端的M A C 资料; ⑤当网络上的计算机接听到该广播后, 看看 IP 是 否和自己的一致, 如果不是则忽略; ⑥如果是则会先将发送端的M A C 和 IP 资料更 新到自己的 A R P 表格去; ⑦然后再回应一个 A R P R ep ly 包给对方; ⑧当发送端接到 A R P R ep ly 之后, 也会更新自己 的 A R P 表格; ⑨然后就可以用此记录进行传送了; β 否则宣告传送失败。 κ 在以太网中, 所有的通讯都是广播的, 也就是说通 常在同一个网段的所有网络接口都可以访问在物理媒 体上传输的所有数据, 在正常的情况下, 一个网络接口 只响应这样的两种数据帧: ①与自己硬件地址相匹配的数据帧; ②发向所有机器的广播数据帧。 在一个实际的系统中, 数据的收发是由网卡来完成 的。 网卡接收到传输来的数据, 网卡内的单片程序接收 数据帧的目的M A C 地址, 根据计算机上的网卡驱动程 序设置的接收模式判断该不该接收, 认为该接收就接收 后产生中断信号通知 CPU , 认为不该接收就丢掉不管, 所以不该接收的数据网卡就截断了, 计算机根本就不知 道。 CPU 得到中断信号产生中断, 操作系统就根据网卡 的驱动程序设置的网卡中断程序地址调用驱动程序接 收数据, 驱动程序接收数据后放入信号堆栈让操作系统 处理。 而对于网卡来说一般有四种接收模式: ①广播方式: 该模式下的网卡能够接收网络中的 广播信息; ②组播方式: 设置在该模式下的网卡能够接收组 播数据; ③直接方式: 在这种模式下, 只有目的网卡才能接 收该数据; ④混杂模式: 在这种模式下的网卡能够接收一切 通过它的数据, 而不管该数据是否是传给它的。 因此只要将网卡的接收模式设置成混杂模式, 路 过网卡的所有数据都被接收, 然后分析 A R P 包, 从中 获取 IP 地址和M A C 地址。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

由于程序 getm ac. c 代码太长, 不便全部列出, 如 有需要, 可与本人联系。 程序运行方法: 首先在 L inux 中安装 libp cap 和 libnet 库, libp cap 可 从 h t tp: www. in secu re. o rg nm ap 获 取, libnet 可从 h t tp: www. p acketfacto ry. net 获取。 然后在 L inux 中用 roo t 用户编译源程序 getm ac. c, 命令如下:
是位于 L inux 操作系统底下所提供的函数库之一, 它 提供可以往数据链路层读写的函数。 利用此函数库中 所提供的函数, 可以在以太网络上抓取所有被广播出 来的包。
・2 2・ ( 总 722) 利用 PCA P 技术获取网卡 M A C 地址 2003 年
利 用 PCAP 技 术 获 取 网 卡 M AC 地 址
O bta in ing M AC Addresses of Network Cards w ith PCAP
48 位长, 由 6 位 00 ~ 0FFH 之间的十六进制数中间用
与网络上的其它主机进行通讯。 而 IP 地址冲突会使网 络客户不能正常工作, 有些非法的 IP 用户会对应用系 统的安全造成严重的威胁。 造成 IP 地址冲突的原因很多, 很多情况是用户对 “IP 地址” 、 “子网掩码” 、 “默认 TCP IP 不了解, 不知道 网关” 等参数如何设置, 混乱设置造成, 还有就是有人 窃用他人的 IP 地址。 作为网管人员, 必须全面掌握 IP 地址的分布情 况, 由于 IP 地址用户可以修改, 而网卡 M A C 地址必 须使用专用软件才能修改, 因此网管人员只需掌握网 卡 M A C 地址, 就可在网络管理中获得主动。
3 3 何世明, 男, 1966 年生, 常熟高等专科学校讲师, 1988 年毕业于浙江大学, 东南大学在读硕士, 研究方向: 计算机网络与维护。 © 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.
何世明
( 东南大学 南京 210096)
【摘 要】 以 L inux 为平台, 利用 PCA P 技术获取以太网范围内 IP 地址所对应的网卡 M A C 地址, 使网管人员 在网络管理中获得主动, 同时为自主开发网络管理软件提供可能。 还介绍了网卡的两种地址、 A R P 协议、 PCA P 及程序 getm ac. c 部分清单实现。 【关键词】 地址解析协议, A R P 协议, PCA P , 以太网协议, A R P
IP 地址是 In ternet 协议地址, Ip v4 互联网协议族
2 A R P 协议
A R P (A dd ress R eso lu t ion P ro toco l) 是地址解析
协议, 其主要功能是实现 IP 地址到 M A C 地址的转 换。 每台计算机都有一个 A R P 表格 (A R P T ab le ) 存放 于 A R P 快存 (A R P Cache ) 之中, 它主要记录同一子网 中各节点的 IP 和 M A C 地址的对应。 当计算机有一个 TCP IP 包要发送出去的时候: ①会先看看目的地址是否属于同一子网, 不是则 送路由器; ②是, 则会检查 A R P 表格有没有对方的 IP 和 M A C 对应; ③如果有的话, 就直接将包传到该M A C 去; ④ 如果在A R P 表格上找不到对方的对应 , 则会
本文以 L inux 为平台, 利用 PCA P 技术获取以太 网范围内 IP 地址所对应的网卡M A C 地址, 使网管人 员在网络管理中获得主动, 同时为自主开发网络管理 软件提供可能。
1 网卡的两种地址
网卡在 In ternet 网络中有两种地址: 一种是M A C 地址, 即网卡的物理地址; 另一种是 IP 地址, 是网卡的 逻辑地址。 M A C 地址是以太网协议 (E thernet ) 使用的地址,
几个函数说明, 这些函数定义在 PCA P 提供的头 文件 p cap. h 中:
p cap t 3 p cap op en live (cha r 3 device, in t snap len, in t p rom isc, in t to m s, cha r 3 ebuf)
u ser 一般设置成 NU LL 。
“: ” 隔开表示, 如 “00: 50: BA : DO : AB: EB ” , 其中前面 三位为生产厂商代码, 每个 E thernet N IC 厂家都必须 申请一组专用的 M A C 地址, 后面三位为产品序号, M A C 地址在生产网络接口卡 (N IC ) 时编程于 N IC 卡 上的 EEPROM 中。 由于网卡根据 M A C 地址发送和 接收数据包, 所以原则上任何两个 N IC 的 M A C 地 址, 不管是哪一个厂家生产的都不应相同, 就像是身份 证一样。M A C 地址一般不能随意更改, 它是网卡自身 的惟一标识。
sho rt 3 ) ( &sn iffed- > a r op ) ) ) ;
if (a rp
typ e! = A R PO P R EQU EST ) {
( vo id )w a it3 (NU LL ,W NO HAN G, NU LL ) ; retu rn; 只获取 A R P R equests 包
A R P 报文格式: Struct libnet { a rp hdr h rd; 3 硬件地址格式3
u u u u u u u u u
};
sho rt a r cha r a r
sho rt a r p ro; h1n; cha r a r p 1n; sho rt a r op; cha r a r cha r a r cha r a r cha r a r sha [ 6 ]; sp a [ 4 ]; tha [ 6 ]; tp a [ 4 ];
struct libnet a rp un signed sho rt a rp cha r ta rget
ip
பைடு நூலகம்
string [ 16 ];
cha r buff[ 40 ]; da ta + = sizeof ( struct libnet ethernet hdr ) ; sn iffed= ( struct libnet a rp hdr 3 ) da ta; a rp typ e = ( ( un signed sho rt ) n toh s ( 3 ( un signed
第 16 卷 第 11 期 电 脑 开 发 与 应 用 ( 总 723) ・23・
向网络发出一个 A R P R equest 广播包, 查询对方的 M A C 地址, 这个包会包含发送端的M A C 资料; ⑤当网络上的计算机接听到该广播后, 看看 IP 是 否和自己的一致, 如果不是则忽略; ⑥如果是则会先将发送端的M A C 和 IP 资料更 新到自己的 A R P 表格去; ⑦然后再回应一个 A R P R ep ly 包给对方; ⑧当发送端接到 A R P R ep ly 之后, 也会更新自己 的 A R P 表格; ⑨然后就可以用此记录进行传送了; β 否则宣告传送失败。 κ 在以太网中, 所有的通讯都是广播的, 也就是说通 常在同一个网段的所有网络接口都可以访问在物理媒 体上传输的所有数据, 在正常的情况下, 一个网络接口 只响应这样的两种数据帧: ①与自己硬件地址相匹配的数据帧; ②发向所有机器的广播数据帧。 在一个实际的系统中, 数据的收发是由网卡来完成 的。 网卡接收到传输来的数据, 网卡内的单片程序接收 数据帧的目的M A C 地址, 根据计算机上的网卡驱动程 序设置的接收模式判断该不该接收, 认为该接收就接收 后产生中断信号通知 CPU , 认为不该接收就丢掉不管, 所以不该接收的数据网卡就截断了, 计算机根本就不知 道。 CPU 得到中断信号产生中断, 操作系统就根据网卡 的驱动程序设置的网卡中断程序地址调用驱动程序接 收数据, 驱动程序接收数据后放入信号堆栈让操作系统 处理。 而对于网卡来说一般有四种接收模式: ①广播方式: 该模式下的网卡能够接收网络中的 广播信息; ②组播方式: 设置在该模式下的网卡能够接收组 播数据; ③直接方式: 在这种模式下, 只有目的网卡才能接 收该数据; ④混杂模式: 在这种模式下的网卡能够接收一切 通过它的数据, 而不管该数据是否是传给它的。 因此只要将网卡的接收模式设置成混杂模式, 路 过网卡的所有数据都被接收, 然后分析 A R P 包, 从中 获取 IP 地址和M A C 地址。
gcc - 02 libnet loca l lib lnet config lp cap defines o getm ac getm ac. c L u sr
3 PCA P
Packet Cap tu re L ib ra ry ( PCA P , 包抓取函数库) ,
执行如下命令: . getm ac eth0 m ac. tx t
地址为 32 位长, 通常用 4 位 “ . ” 分隔的 0 ~ 255 之间的 十进制数的形式表示, 如 “210. 28. 160. 61” 。 在 In ternet 网络上, 使用 TCP IP 协议时每台主 机必须具有独立的 IP 地址, 有了 IP 地址的主机才能
3 2003 03 10 收到, 2003 08 10 改回
ABSTRACT T h is p ap er p resen ts ob ta in ing M A C address of netw o rk adap ter co rresponding to IP address w ith in the E thernet scop e by u sing PCA P techn ique and on the ba sis of L inux p la tfo rm , m ak ing netw o rk adm in istra to r know IP address fo r conven ien t netw o rk m anagem en t, and is p robab le to develop netw o rk m anagem en t softw a re au tonom ou sly. Tw o k inds of addresses, A R P p ro to 2 co l, PCA P a re in troduced and p rogram getm ac. c list is i m p lem en ted. KEYWO RD S address ana lytic p ro toco l, A R P p ro toco l, PCA P, E thernet p ro toco l, A R P
相关文档
最新文档