java jpcap 抓包并分析_用Jpcap赶做了一个极其简陋版的TCP抓包程序

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了。。。a4c26d1e5885305701be709a3d33442f.pnga4c26d1e5885305701be709a3d33442f.png

(话说貌似在vista和win7下,在真正的网卡上会有个虚拟网卡,就是上图的编号0)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值