概述
Jpcap是一个能够抓取与发送网络数据包的Java组件。 你可以使用Jpcap从一个网络接口获取数据包,然后在Java中对它们进行分析和显示。同样也可以通过一个网络接口发送任意数据包。Jpcap当前能够捕获以太网,IPv4,IPv6,ARP/RARP,TCP,UDP和ICMPv4数据包。Jpcap是一个中间件,调用的是winpcap/libpcap,提供给Java调用的接口。
下面就是程序的主要部分,由于Jpcap把要用的东西都封装好了,所以要做的就是调用几个函数,比如getDeviceList()取得网络设备,openDevice()建立与网络设备的链接,建立实例才控制网络设备,接着就是getPacket()啦,然后拿get到的包去instanceof一下jpcap.packet.TCPPacket,看看是不是TCP包,是的话就取出来输出。
主要代码:
public class Capture
implements Runnable {
private NetworkInterface[]
devices;//存放网络的接口设备的数组
private JpcapCaptor
captor;//用于与网络设备进行连接,通过该类实例来控制网络设备
boolean stopth;//线程的控制信号
int pMaxnum;//获取到数据包的最大上限
Thread time;//线程
int count;//计数器
Capture(){
devices =
JpcapCaptor.getDeviceList();
stopth=false;
pMaxnum=9999;
count=0;
for(int
i=0;i
windowView.jTextArea1.append(i+":
"+devices[i].name +"n" );
windowView.jTextArea1.append("(" +
devices[i].description+")n");
windowView.jTextArea1.append("
datalink: "+devices[i].datalink_name + "(" +
devices[i].datalink_description+")n");
}
}
public void getPacket() throws
IOException{
int
index=devices.length-1;
captor=JpcapCaptor.openDevice(devices[index],
65535, false, 20);//打开网卡
TCPPacket p[]=new
TCPPacket[pMaxnum];//用于保存TCP包
while(stopth){
Packet
tmp=captor.getPacket();//获取数据包
if(tmp instanceof
jpcap.packet.TCPPacket){//判断是否为TCP包
p[count]=(TCPPacket)tmp;
System.out.println(count+":"+p[count].toString());
System.out.println("本机地址:"+p[count].src_ip);
System.out.println("目标地址:"+p[count].dst_ip);
System.out.println("ack:"+p[count].ack_num+"
dst_port:"+p[count].dst_port+"
src port:"+
p[count].src_port+"
seq:"+p[count].sequence+"
win:"+p[count].window);
DefaultTableModel
model=(DefaultTableModel)windowView.jTable1.getModel();
String
sum="TCP:本机端口:"+p[count].src_port+"目标端口:"+p[count].dst_port+"ack("+p[count].ack_num+")seq("+p[count].sequence+")"+"win("+p[count].window+")";
Object[]
a={count,p[count].src_ip,p[count].dst_ip,sum,p[count].len};
model.addRow(a);
count++;
}
}
}
……
}
把界面做出来,一共花了不到两小时,不过比较杯具的是,在我做好之后,学校正好断电,我一开始还以为是我的程序有问题取不到包呢,百思不得其解啊~后来发现,是停电了,路由shutdown了。。。
(话说貌似在vista和win7下,在真正的网卡上会有个虚拟网卡,就是上图的编号0)
最后
以上就是大气灯泡为你收集整理的java jpcap 抓包并分析_用Jpcap赶做了一个极其简陋版的TCP抓包程序的全部内容,希望文章能够帮你解决java jpcap 抓包并分析_用Jpcap赶做了一个极其简陋版的TCP抓包程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复