JAVA的Socket主要在传输层,而网卡,则主要工作在数据链路层,那么JAVA监听数据包,就需要其他包的支持。
首先下载Winpcap,安装好。然后下载Jpcap,解压缩,将jpcap.dll放入jdk安装路径的bin目录下和jre安装路径的bin目录下。然后新建一个工程,将jpcap.jar引入就可以了。
监听数据包的程序如下:
import java.io.IOException;
import java.util.Scanner;
import jpcap.*;
import jpcap.packet.*;
public class NetFetcher implements PacketReceiver{
@Override
public void receivePacket(Packet arg0) {
//将抓取的包进行输出
System.out.println(arg0);
}
public static void main(String[] args){
//获得网卡设备列表
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
if(devices.length==0){
System.out.println("无网卡信息!");
return;
}
//输出网卡信息
for(int i=0;i
System.out.println("网卡"+i+"信息:"+devices[i].name);
for(NetworkInterfaceAddress address:devices[i].addresses){
System.out.print(address.address+" ");
}
System.out.println("\n");
}
Scanner scan = new Scanner(System.in);
System.out.println("请选择您要监听的网卡序号:");
int index = scan.nextInt();
//监听选中的网卡
try {
JpcapCaptor jpcapCaptor = JpcapCaptor.openDevice(devices[index], 2000, false, 20);
jpcapCaptor.loopPacket(-1, new NetFetcher());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}