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<devices.length;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();
- }
- }
- }