jpcap沒有64位版的?這樣就不得不用32的系統(tǒng)了。
用jpcap抓包,前提是裝好了winpcap和jpcap。
過程很簡單:
1.JpcapCaptor.getDeviceList()獲取網(wǎng)卡列表,返回一個jpcap.NetworkInterface的數(shù)組
2.選擇網(wǎng)卡,調(diào)用JpcapCaptor.openDevice(),返回一個JpcapCaptor類的對象。
3.創(chuàng)建PacketReceiver類的對象用來接收抓到的包,要覆寫receivePacket()這個方法。
4.用JpcapCaptor的processPacket()方法執(zhí)行抓包。
具體的參數(shù)見api
我就針對網(wǎng)絡(luò)層是ip協(xié)議的包的抓取寫了個程序,只是為了試驗下,所以沒有g(shù)ui,在eclipse下跑跑還行,需要手動結(jié)束程序。
下面是抓到的東西:(源代碼在最后)
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
;
//
設(shè)備、捕獲器和包
jpcap.NetworkInterface[] devices=
null
;
JpcapCaptor captor=
null
;
Packet packet=
null
;
PacketReceiver receiver=
null
;
//
字節(jié)到16進制的轉(zhuǎn)換器,將包以16進制形式展現(xiàn)
HexBinaryAdapter hba=
null
;
//
MAC類型
byte
[] pro=
null
;
//
抓包函數(shù)
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();
//
注意,我的電腦第一個是有線網(wǎng)卡,第二個是無線的,這里devices[1]是有線的以太網(wǎng)卡
captor=JpcapCaptor.openDevice(devices[1], 1514,
true
, 50);
//
接收抓到的包,覆寫下面這個方法來實現(xiàn)將抓到的包寫入文件中
receiver =
new
PacketReceiver() {
@Override
public
void
receivePacket(Packet packet) {
//
TODO Auto-generated method stub
try
{
str="";
//
獲得網(wǎng)絡(luò)協(xié)議類型
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初始化結(jié)束
//
開始抓包
startCapture();
}
public
static
void
main(String[] args)
throws
IOException {
new
Capture();
}
}
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

