一、ARP数据包的基本格式
Ethernet头部 |
ARP数据部分 |
|||||||||
6 |
6 |
2 |
2 |
2 |
2 |
2 |
4 |
6 |
4 |
6 |
目标MAC地址 |
源地MAC地址 |
类型号0x0800:ip 0x0806:ARP |
局域网类型 以太网0x0001 |
网络协议类型 IP网络0x0800 |
MAC/IP地址长度,恒为0x06/04 |
01
|
ARP目标IP地址 |
ARP目标MAC 地址 |
ARP源IP地址 |
ARP源MAC地址 |
二、ARP数据包的信息
请求格式,回应格式。
包含物理地址和IP地址。
三、发送一个ARP请求
1.下载winpcap安装
2.下载jpcap 把jpcap.dll放到java的bin文件夹下
3.新建一个项目导入jpcap.jar
然后构建一个ARP数据请求包。
package com.stx.test; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jpcap.JpcapCaptor; import jpcap.JpcapSender; import jpcap.NetworkInterface; import jpcap.NetworkInterfaceAddress; import jpcap.packet.ARPPacket; import jpcap.packet.EthernetPacket; import jpcap.packet.IPPacket; import jpcap.packet.Packet; import jpcap.packet.TCPPacket; import jpcap.packet.UDPPacket; /* * 1.发送一个arp请求包 * 2.得到arp回应包解析出目的主机的mac地址 * */ public class Mac { private NetworkInterface devices[]; // 网络设备 private NetworkInterface device; // 网络设备对象 private JpcapCaptor jpcapCaptor; // 设备的链接 private JpcapSender jpcapSender; // 包的发送实例 private ARPPacket arpPacket; // arp包的构建 private byte[] hostMAC, goalMAC; // 源主机、目标主机的MAC private byte hostIP[], goalIP[]; // 源主机、目标主机的IP private List<String> IP; // 存放请求的IP用于后面的检查 private int request; // 发送请求的个数 private int get; // 得到请求的个数 // 实例化 public Mac() { devices = JpcapCaptor.getDeviceList(); IP = new ArrayList<String>(); } // 的到一个网卡的实例 public NetworkInterface getDervice(int index) { return devices[index]; } // 整个系统的实例化 public void init() { // 看具体的情况由于本地使用的是无线连接时第三个 int choice = choiceDevice(); device = getDervice(choice); // try { // 构建一个设别的连接(具体的实例,获取的字符串长度,是否开启混杂模式,超时连接) jpcapCaptor = JpcapCaptor.openDevice(device, 65535, false, 1000); // jpcapCaptor.setFilter("ip", true); // 构建一个发送的实例 jpcapSender = jpcapCaptor.getJpcapSenderInstance(); } catch (IOException e) { System.out.println("=====初始化失败了,设别连接实例失败======="); e.printStackTrace(); } } // 摧毁设别连接的实例 public void destory() { if (jpcapCaptor != null) jpcapCaptor.close(); else System.out.println("=======设备连接已经关闭了========"); } // 创建一个请求包并发送 public void creatRequestArp(String hostIP, String goalIP) { /* * 本地连接有源ip,目标ip 源MAC,目标MAC=0xff ff ff ff ff ff */ this.hostIP = getByte(hostIP); // 源ip hostMAC = device.mac_address; // 源头MAC this.goalIP = getByte(goalIP); // 目标IP goalMAC = new byte[] { (byte) 255, (byte) 255, (byte) 255, (byte) 255, (byte) 255, (byte) 255 }; // 构建一个数据包 arpPacket = new ARPPacket(); arpPacket.hardtype = ARPPacket.HARDTYPE_ETHER; // 网络类型 arpPacket.prototype = ARPPacket.PROTOTYPE_IP; // 网络协议IP arpPacket.operation = ARPPacket.ARP_REQUEST; // ARP请求 arpPacket.hlen = 6; // 硬件长度 arpPacket.plen = 4; // IP长度 arpPacket.target_hardaddr = goalMAC; // 目标MAC arpPacket.target_protoaddr = this.goalIP; // 目标IP arpPacket.sender_hardaddr = hostMAC; // 源MAC arpPacket.sender_protoaddr = this.hostIP; // 源IP // 声明一个以太网的包头 EthernetPacket ethToTarget = new EthernetPacket(); ethToTarget.frametype = EthernetPacket.ETHERTYPE_ARP;// 类型号 ethToTarget.src_mac = hostMAC; ethToTarget.dst_mac = goalMAC; // 数据包添加以太网的包头 arpPacket.datalink = ethToTarget; // 发送这个arp请求数据包 jpcapSender.sendPacket(arpPacket); System.out.println(arpPacket); // 添加一些统计信息 IP.add(goalIP); try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 把字符串的IP地址转换为了 byte数组行的 public byte[] getByte(String IP) { byte[] byteIP = new byte[4]; int i = 0; for (String s : IP.split("\\.")) { byteIP[i++] = (byte) (Integer.parseInt(s)); } // System.out.println(IP); // for(int j=0;j<4;j++){ // // System.out.print((int)(byteIP[j]& 0xff)+" "); // } return byteIP; } public int choiceDevice() { for (int i = 0; i < devices.length; i++) { System.out.println("--------------" + i + "------------------------------"); System.out.println("网卡名称:" + devices[i].name); for (NetworkInterfaceAddress a : devices[i].addresses) { System.out.println("IP地址:" + a.address); } System.out .println("------------------------------------------------"); } System.out.print("请输入你的选择【从0开始】:"); try { return System.in.read() - 48; } catch (IOException e) { e.printStackTrace(); return 0; } } // 接收数据包 public void getArp() { Packet ipPacket = null; do { ipPacket = jpcapCaptor.getPacket(); if (ipPacket instanceof ARPPacket) { // System.out.println(ipPacket.src_ip.getHostAddress()); ARPPacket a = (ARPPacket) ipPacket; if (a.operation == 2) { System.out.println(a.operation == 1 ? "请求" : "回答"); System.out.println(a.getSenderProtocolAddress() + " " + a.getSenderHardwareAddress()); System.out.println(a.getTargetProtocolAddress() + " " + a.getTargetHardwareAddress()); System.out.println("ARP " + ipPacket); } } // else if(ipPacket instanceof UDPPacket){ // System.out.println("UDP "+ipPacket); // } } while (true); } // 打印出测试IP地址 public void showGoalIP() { for (int i = 0; i < IP.size(); i++) { System.out.println(IP.get(i)); } } }
相关推荐
- **ARP数据包**:包含了上面提到的ARP数据包格式。 ##### 3.4 ARP协议的工作流程 ARP协议的工作流程大致可以分为以下几个步骤: 1. 当一台主机想要发送数据给另一台主机时,它会首先检查自己的ARP缓存中是否已经...
### ARP 数据包格式详解及其在 WinPcap 下的应用 #### ARP (Address Resolution Protocol) 概述 ARP(地址解析协议)是一种将网络层地址映射到数据链路层地址的协议,主要用于解决同一局域网内主机之间的 IP 地址到...
3. **嗅探和拦截**:一些ARP数据包生成器还具备监听网络流量的能力,可以捕获和分析经过的ARP数据包,帮助识别异常活动。 4. **网络诊断**:通过发送特定的ARP数据包,可以测试网络连接的稳定性,查找可能存在的ARP...
ARP协议的消息格式是指ARP数据包的结构,它由硬件类型、协议类型、物理地址长度、协议地址长度、操作、源物理地址、源IP地址、目的物理地址、目的IP地址等字段组成。其中,硬件类型指定硬件接口类型,例如,值为1...
观察ARP缓存的现实,分析IRIS软件捕获的数据包
inux下C语言实现ARP数据包发送 可以随意发送ARP数据包
标题中的“arp数据包抓取解析”涉及到网络通信的基础知识,特别是ARP(地址解析协议)的工作原理和数据包捕获技术。ARP是TCP/IP协议栈中的一个重要组成部分,它用于将IP地址转换为物理(MAC)地址,以便在局域网...
编程实现ARP数据包的解析,C语言编程。也可用wireshark捕获数据包~
#### 三、ARP数据包格式解析 ARP数据包的基本格式如下: - 硬件类型(Hardware Type):2字节,指示请求/应答中硬件地址的格式。对于以太网来说,值为1。 - 协议类型(Protocol Type):2字节,指示请求/应答中协议...
在本课程设计中,我们将深入探讨ARP数据包的结构,并通过编写程序代码来实现ARP数据包的解析,以增强对ARP协议的理解。 ARP协议的工作原理是这样的:当一个主机想要向另一个IP地址发送数据时,它首先检查自己的ARP...
计算机网络解析ARP数据包 计算机网络中的ARP(Address Resolution Protocol,地址解析协议)是一种重要的网络协议,用于将IP地址解析成MAC地址。ARP数据包是网络通信过程中的一种重要数据包,对于理解ARP协议和网络...
用于利用windows socket构造自己的ARP数据包并发送,其中包括选择网卡能功能-windows socket for the use of their tectonic ARP packet and sent, including the choice of Ethernet capabilities.
学习如何解析ARP数据包,你需要理解数据包的结构,包括操作码(OP字段)、发送者和接收者的IP及MAC地址等。这通常涉及到网络编程,如使用C#或其他语言编写程序来读取和分析网络流量。Visual Studio .NET 2003可能...
解析ARP数据包解析ARP数据包解析ARP数据包
在本课程设计中,我们将深入探讨“发送Ethernet ARP数据包”的技术细节,这是一门针对网络通信基础的重要实践。ARP(地址解析协议)是TCP/IP协议栈中的关键组件,它负责将IPv4地址映射为物理(MAC)地址,使得数据...
【Linux系统下ARP数据包截取和分析】 在Linux操作系统中,ARP(Address Resolution Protocol,地址解析协议)数据包的截取和分析是网络安全管理和故障排查的重要手段。ARP协议主要用于解决IP地址到物理地址(MAC...
本项目旨在通过编程方式捕获并解析网络中的ARP数据包,以便深入理解网络通信的底层机制。 在ARP协议中,当一个设备想要发送数据给另一个设备但只知道其IP地址时,它会广播一个ARP请求,询问哪个设备拥有特定的IP...
**基于WINPCAP ARP数据包捕获** 在计算机网络领域,数据包捕获是一种重要的技术,它允许我们观察网络上的通信细节。对于网络诊断、安全分析以及性能优化来说,这是一项不可或缺的工具。其中,WinPcap是Windows平台...
标题 "我的ARP数据包的文章的源代码" 涉及到的是网络协议中的ARP(Address Resolution Protocol)以及网络编程技术,特别是使用WINPCAP库进行数据包捕获和操作。ARP是TCP/IP协议栈中一个关键的部分,它用于将网络层...
报文格式与ping arp数据包转发过程概要 一、以太网帧格式(Ethernet II) 以太网帧格式是指以太网中传输的基本单元,包括前导码、帧首部、数据部分和CRC校验序列。其中,前导码不属于数据部分,数据长度为64-1518...