jpcap抓包程序

import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
import jpcap.NetworkInterfaceAddress;
import jpcap.PacketReceiver;
import jpcap.packet.*;

import java.io.IOException;
import java.util.Scanner;

/**
* @author Chen Xian
* @version 1.0.0
* @Date 2018/4/3
* @email 3290698979@qq.com
*/
public class Jpcap {
private static int model;

public static void main(String[] args) throws IOException {
System.out.println("网络设备:");
NetworkInterface[] devices = JpcapCaptor.getDeviceList();


for (NetworkInterface n : devices) {
System.out.print(n.name + " | " + n.description + " | ");

for (NetworkInterfaceAddress a : n.addresses) {


System.out.print(" address:" + a.address);

}

System.out.println();
}
System.out.println("-------------------------------------------");


System.out.println("请输入你需要抓取的类型包:");
System.out.println("TCP包输入‘1’");
System.out.println("UDP包输入‘2’");
System.out.println("ICMP包输入‘3’");
System.out.println("ARP包输入‘4’");
Scanner in=new Scanner(System.in);
model = in.nextInt();

JpcapCaptor jpcap = JpcapCaptor.openDevice(devices[1], 2000, true, 20);

System.out.println("开始抓取数据:");
startCapThread(jpcap);

}



public static void startCapThread(final JpcapCaptor jpcap){
JpcapCaptor jp=jpcap;
java.lang.Runnable rnner=new Runnable(){ //创建线程
public void run(){
//使用接包处理器循环抓包
jpcap.loopPacket(-1, new TestPacketReceiver(model)); //-1无限抓取包,抓包监听器获取包
}
};
new Thread(rnner).start();//启动抓包线程
}

static class TestPacketReceiver implements PacketReceiver {

public int model;

public TestPacketReceiver (int n)
{
this.model = n;
}
/**
* 实现的接包方法:
*/
public void receivePacket(Packet packet) {
//Tcp包
if(packet instanceof jpcap.packet.TCPPacket && model== 1){
TCPPacket p=(TCPPacket)packet;
String s="TCPPacket:| 目的ip及端口 "+p.dst_ip+":"+p.dst_port
+"|源ip及端口 "+p.src_ip+":"+p.src_port
+" |数据长度: "+p.len;
System.out.println(s);
}
//UDP包
else if(packet instanceof jpcap.packet.UDPPacket && model== 2){
UDPPacket p=(UDPPacket)packet;
String s="UDPPacket:| 目的ip及端口 "+p.dst_ip+":"+p.dst_port
+"||源ip及端口 "+p.src_ip+":"+p.src_port
+" |数据长度: "+p.len;
System.out.println(s);
}
//ICMPPacket包
else if(packet instanceof jpcap.packet.ICMPPacket && model== 3){
ICMPPacket p=(ICMPPacket)packet;
//ICMP包的路由链
String router_ip="";
for(int i=0;i<p.router_ip.length;i++){
router_ip+=" "+p.router_ip[i].getHostAddress();
}
String s="@ @ @ ICMPPacket:| 路由IP: "+router_ip
+" |redir_ip: "+p.redir_ip
+" |最大传输单元: "+p.mtu
+" |长度: "+p.len;
System.out.println(s);
}
//ARP请求包
else if(packet instanceof jpcap.packet.ARPPacket && model== 4){
ARPPacket p=(ARPPacket)packet;
//Returns the hardware address (MAC address) of the sender
Object saa= p.getSenderHardwareAddress();
Object taa=p.getTargetHardwareAddress();
String s="* * * ARPPacket:| 发送硬件地址: "+saa
+"|目标硬件地址: "+taa
+" |长度: "+p.len;
System.out.println(s);

}


}


}
}

转载于:https://www.cnblogs.com/0chenxian0/p/8706174.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值