50,531
社区成员
发帖
与我相关
我的任务
分享
package com.fym.start;
import com.fym.main.MainPacketReceiver;
import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
public class Start {
//程序启动主方法
public static void main(String args[]){
try {
// 获取本机上的网络接口对象数组
final NetworkInterface[] devices = JpcapCaptor.getDeviceList();
for (int i = 0; i < devices.length; i++) {
NetworkInterface nc = devices[i];
// 创建某个卡口上的抓取对象,最大为2000个
JpcapCaptor jpcap = JpcapCaptor.openDevice(nc, 2000, true, 20);
startCapThread(jpcap);
System.out.println("开始抓取第" + i + "个卡口上的数据");
}
}catch(Exception ef){
ef.printStackTrace();
System.out.println("启动失败: "+ef);
}
}
//将每个Captor放到独立线程中运行
public static void startCapThread(final JpcapCaptor jpcap ){
java.lang.Runnable rnner=new Runnable(){
public void run(){
//使用接包处理器循环抓包
jpcap.loopPacket(-1, new MainPacketReceiver());
}
};
new Thread(rnner).start();//启动抓包线程
}
}
package com.fym.main;
import jpcap.PacketReceiver;
import jpcap.packet.Packet;
public class MainPacketReceiver implements PacketReceiver {
/**
* 实现的接包方法:
*/
public void receivePacket(Packet packet) {
byte b[] = packet.header;
System.out.print("-------以太网首部信息:-------\r\n");
int i=0;
System.out.print("i = "+i+" ");
System.out.print("目的Mac地址: "+(b[i++]&0xFF)+":"+(b[i++]&0xFF)+":"+(b[i++]&0xFF)+":"+(b[i++]&0xFF)+":"+(b[i++]&0xFF)+":"+(b[i++]&0xFF)+"\r\n");
System.out.print("i = "+i+" ");
System.out.print("源Mac地址: "+(b[i++]&0xFF)+":"+(b[i++]&0xFF)+":"+(b[i++]&0xFF)+":"+(b[i++]&0xFF)+":"+(b[i++]&0xFF)+":"+(b[i++]&0xFF)+"\r\n");
System.out.print("i = "+i+" ");
System.out.println("类型:"+((b[i++]<<8)|(b[i])));
}
}