这次是计算机网络的实验;首先我们需要jdk环境默认大家有的,当然了jpcap使用的是32位的系统,所以我们的jre、jdk也应该是32位的,如果你的jdk不是32位,那么自行百度下载32位jdk吧!
我们是基于eclipse环境下的
我们需要的是:自行百度下载或者留言问我要
安装winPcap
Jpcap.jar包
jdumper源代码
还有一个辅助我们导入JpcapSetup-0.7.exe。 给个链接:https://jpcap.software.informer.com/download/
然后我们可以开始了;
我们先运行Jdumper,在编写示例代码,首先解压好我们下载的Jdumper源代码。
1、首先打开eclipse,导入工程:
2、导入jpcap.jre包
新建一个lib文件夹,然后复制jpcap.jre包进去,然后右键,点击Build Path ,add to Build Path。
3、把Jpcap文件夹里面lib里面的Jpcap.dll文件放到你用的jre/bin目录中;
或者可以使用那个JpcapSetup-0.7.exe软件来导入;
4、运行jdumper包;
注意点:因为Jpcap是32位的,所以我们一定要使用32位的 jre 来作为工程的 system Library
编写抓包示例代码部分:
直接上代码:
package demo;
import java.io.IOException;
import jpcap.*;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;
public class GetPacket {
public static void main(String[] args) {
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
for(NetworkInterface n : devices)
{
System.out.println(n.name + " | " + n.description);
}
System.out.println("-------------------------------------------");
JpcapCaptor jpcap = null;
int caplen = 1512;
boolean promiscCheck = true;
try{
jpcap = JpcapCaptor.openDevice(devices[0], caplen, promiscCheck, 50);
}catch(IOException e)
{
e.printStackTrace();
}
/*----------第二步抓包-----------------*/
int i = 0;
while(i < 10)
{
Packet packet = jpcap.getPacket();
if(packet instanceof IPPacket && ((IPPacket)packet).version == 4)
{
i++;
IPPacket ip = (IPPacket)packet;//强转
System.out.println("版本:IPv4");
System.out.println("优先权:" + ip.priority);
System.out.println("区分服务:最大的吞吐量: " + ip.t_flag);
System.out.println("区分服务:最高的可靠性:" + ip.r_flag);
System.out.println("长度:" + ip.length);
System.out.println("标识:" + ip.ident);
System.out.println("DF:Don't Fragment: " + ip.dont_frag);
System.out.println("NF:Nore Fragment: " + ip.more_frag);
System.out.println("片偏移:" + ip.offset);
System.out.println("生存时间:"+ ip.hop_limit);
String protocol ="";
switch(new Integer(ip.protocol))
{
case 1:protocol = "ICMP";break;
case 2:protocol = "IGMP";break;
case 6:protocol = "TCP";break;
case 8:protocol = "EGP";break;
case 9:protocol = "IGP";break;
case 17:protocol = "UDP";break;
case 41:protocol = "IPv6";break;
case 89:protocol = "OSPF";break;
default : break;
}
System.out.println("协议:" + protocol);
System.out.println("源IP " + ip.src_ip.getHostAddress());
System.out.println("目的IP " + ip.dst_ip.getHostAddress());
System.out.println("源主机名: " + ip.src_ip);
System.out.println("目的主机名: " + ip.dst_ip);
System.out.println("----------------------------------------------");
}
}
}
}
2、结果截图: