jpcap抓包心得

系统 1923 0

jpcap没有64位版的?这样就不得不用32的系统了。
用jpcap抓包,前提是装好了winpcap和jpcap。

过程很简单:
1.JpcapCaptor.getDeviceList()获取网卡列表,返回一个jpcap.NetworkInterface的数组
2.选择网卡,调用JpcapCaptor.openDevice(),返回一个JpcapCaptor类的对象。
3.创建PacketReceiver类的对象用来接收抓到的包,要覆写receivePacket()这个方法。
4.用JpcapCaptor的processPacket()方法执行抓包。

具体的参数见api

我就针对网络层是ip协议的包的抓取写了个程序,只是为了试验下,所以没有gui,在eclipse下跑跑还行,需要手动结束程序。
下面是抓到的东西:(源代码在最后)

src: /192.168.1.100
dst: /192.168.1.1
head: 54E6FC35DDA8701A04B54D7308004500003D1F3A0000801197C0C0A80164C0A80101F8AB00350029F9A7
data: 9482010000010000000000000373646C073336307361666503636F6D0000010001

src: /192.168.1.100
dst: /192.168.1.1
head: 54E6FC35DDA8701A04B54D7308004500003E1F3B0000801197BEC0A80164C0A80101FE6A0035002A6A75
data: 22630100000100000000000002627004636F6E6601660333363002636E0000010001

src: /192.168.1.100
dst: /192.168.1.1
head: 54E6FC35DDA8701A04B54D730800450000471F3C0000801197B4C0A80164C0A80101DD0B003500334ACD
data: FED8010000010000000000000674657265646F0469707636096D6963726F736F667403636F6D0000010001

src: /192.168.1.100
dst: /192.168.1.1
head: 54E6FC35DDA8701A04B54D7308004500003F1F3D0000801197BBC0A80164C0A80101F65C0035002B67DE
data: 77880100000100000000000002627005636F6E663201660333363002636E0000010001

      
        /*
      
      
        
*
*/
package org.wen;
import jpcap.*;
import jpcap.packet.*;
import java.io.*;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
public class Capture {
// 将抓包信息存入文件中。
File file= null ;
String str= null ;
static FileOutputStream fos= null ;
// 设备、捕获器和包
jpcap.NetworkInterface[] devices= null ;
JpcapCaptor captor= null ;
Packet packet= null ;
PacketReceiver receiver= null ;
// 字节到16进制的转换器,将包以16进制形式展现
HexBinaryAdapter hba= null ;
// MAC类型
byte [] pro= null ;
// 抓包函数
public void startCapture(){
while (captor!= null ){
captor.processPacket(1, receiver);
}
}
public Capture() throws IOException{
pro= new byte [2];
hba= new HexBinaryAdapter();
file= new File("./ipdata.txt");
if (!file.exists()){
file.createNewFile();
}
fos= new FileOutputStream(file);
devices=JpcapCaptor.getDeviceList();
// 注意,我的电脑第一个是有线网卡,第二个是无线的,这里devices[1]是有线的以太网卡
captor=JpcapCaptor.openDevice(devices[1], 1514, true , 50);
// 接收抓到的包,覆写下面这个方法来实现将抓到的包写入文件中
receiver = new PacketReceiver() {
@Override
public void receivePacket(Packet packet) {
// TODO Auto-generated method stub
try {
str="";
// 获得网络协议类型
pro[0]=packet.header[12];
pro[1]=packet.header[13];
// 这里暂且只抓ip包了
if (hba.marshal(pro).toString().equals("0800")){
str+="src: ";
str+=((IPPacket)packet).src_ip.toString();
str+="\n";
str+="dst: ";
str+=((IPPacket)packet).dst_ip.toString();
str+="\n";
str+="head: ";
str+=hba.marshal(packet.header);
str+="\n";
str+="data: ";
str+=hba.marshal(packet.data);
str+="\n\n";
} else {
str+="a non-ip packet\n\n";
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
// 将str写到文件中
try {
Capture.fos.write(str.getBytes());
Capture.fos.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}; // receiver初始化结束
// 开始抓包
startCapture();
}
public static void main(String[] args) throws IOException {
new Capture();
}
}




jpcap抓包心得


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论