導航:首頁 > 文件教程 > jpcap獲取包文件內容

jpcap獲取包文件內容

發布時間:2023-07-25 17:53:51

1. java如何編程實現,獲取固定IP發來所有的數據包

額。。。初看到你的問題的時候嚇了一跳。還以為是用java實現網路嗅探呢。
你問的是socket編程?
那麼socket 均分為兩個,
一部分是服務端,
一部分是客戶端,
服務端一直開啟著監聽,
現在你的情況和平時不太一樣的是,平時,是服務端的ip不變化,而客戶端的變化。而是客戶端給服務端進行發送。
你的情況是相反。客戶端經常變動ip或者埠,而要求服務端發送。
其實轉換一下思路就好了。
有點類似於現在網頁在線聊天工具里的「長連接」思想。
你的那個固定ip伺服器,可以完全不管,你是什麼埠。因為,如果你的電腦准備好接受數據了。那麼你就向服務端發起請求。而服務端將結果發送給你。就是說,不是說伺服器一直給你發送,而是,你這個客戶端只要准備好接受數據,就向伺服器發送請求。這樣,不是沒有問題了么。。

如果還按你那個思路就是,你的電腦,需要實現網路嗅探的部分功能。但是

Java是網路層以上的。
你通過Java的Socket得到的數據包嗅探不出什麼敏感的東東了。
所以Java不適合做網路嗅探。

不過還好,現在有了叫jpcap的工具。你可以搜一下,
下面是一個簡單的實現,裡面獲得了來源的ip和埠 你可以加一個判斷,如果來源ip是固定的ip的話,那麼,你可以獲取對應的數據包

程序用eclipse編輯在J2SDK6.0+WinPcap 3.1+Jpcap 0.5下編譯運行

/*******************
* JpcapTip.java
*/
package m;

import jpcap.PacketReceiver;
import jpcap.JpcapCaptor;
import jpcap.packet.*;
import jpcap.NetworkInterface;
import jpcap.NetworkInterfaceAddress;
//import java.net.InetAddress;
//import java.net.UnknownHostException;

public class JpcapTip implements PacketReceiver {

public void receivePacket(Packet packet) {
System.out.println("********************************************");
/*IP數據報報文頭*/
byte[] l=packet.header;
/*
for (int t=0;t<21;t++){
System.out.print(l[t]+" *** ");
}
*/
String str="";
System.out.print("報文頭 : ");
for (int i=0;i<l.length;i++) {
//str=str+l;
int m=0;
m=l[i];
m=m<<24;
m=m>>>24;
str=str+Integer.toHexString(m);
//System.out.print(" *** "+l[i]);
}
System.out.println(str);
int d=l.length;
System.out.println("首部長度 :"+(d*8)+"bit");

/*分析源IP地址和目的IP地址*/
/*分析協議類型*/
/**
if(packet.getClass().equals(IPPacket.class)) {
IPPacket ipPacket=(IPPacket)packet;
byte[] iph=ipPacket.option;
String iphstr=new String(iph);
System.out.println(iphstr);
}
*/
if(packet.getClass().equals(ARPPacket.class))
{
System.out.println("協議類型 :ARP協議");
try {
ARPPacket arpPacket = (ARPPacket)packet;
System.out.println("源網卡MAC地址為 :"+arpPacket.getSenderHardwareAddress());
System.out.println("源IP地址為 :"+arpPacket.getSenderProtocolAddress());
System.out.println("目的網卡MAC地址為 :"+arpPacket.getTargetHardwareAddress());
System.out.println("目的IP地址為 :"+arpPacket.getTargetProtocolAddress());

} catch( Exception e ) {
e.printStackTrace();
}
}
else
if(packet.getClass().equals(UDPPacket.class))
{
System.out.println("協議類型 :UDP協議");
try {
UDPPacket udpPacket = (UDPPacket)packet;
System.out.println("源IP地址為 :"+udpPacket.src_ip);
int tport = udpPacket.src_port;
System.out.println("源埠為:"+tport);
System.out.println("目的IP地址為 :"+udpPacket.dst_ip);
int lport = udpPacket.dst_port;
System.out.println("目的埠為:"+lport);
} catch( Exception e ) {
e.printStackTrace();
}
}
else
if(packet.getClass().equals(TCPPacket.class)) {
System.out.println("協議類型 :TCP協議");
try {
TCPPacket tcpPacket = (TCPPacket)packet;
int tport = tcpPacket.src_port;
System.out.println("源IP地址為 :"+tcpPacket.src_ip);
System.out.println("源埠為:"+tport);
System.out.println("目的IP地址為 :"+tcpPacket.dst_ip);
int lport = tcpPacket.dst_port;
System.out.println("目的埠為:"+lport);
} catch( Exception e ) {
e.printStackTrace();
}
}
else
if(packet.getClass().equals(ICMPPacket.class))
System.out.println("協議類型 :ICMP協議");
else
System.out.println("協議類型 :GGP、EGP、JGP協議或OSPF協議或ISO的第4類運輸協議TP4");

/*IP數據報文數據*/
byte[] k=packet.data;
String str1="";
System.out.print("數據 : ");
for(int i=0;i<k.length;i++) {
//int m=0;
//m=k[i];
//m=m<<24;
//m=m>>>24;
//str1=str+Integer.toHexString(m);
str1 = new String(k);
//str1=str1+k[i];
//System.out.print(" *** "+k[i]);
}
System.out.println(str1);
System.out.println("數據報類型 : "+packet.getClass());

System.out.println("********************************************");
}

public static void main(String[] args) throws Exception{
// TODO 自動生成方法存根

NetworkInterface[] devices = JpcapCaptor.getDeviceList(); //.getDeviceList();.
//for (int i =0; i<devices.length;i++) {
int a=0;
//try {
/*本地網路信息*/
byte[] b=devices[1].mac_address; //網卡物理地址
//}
//catch() {}
System.out.print("網卡MAC : 00");
for (int j=0;j<b.length;j++){
//a=a<<8;
a=b[j];
a=a<<24;
a=a>>>24;
System.out.print(Integer.toHexString(a));
}
System.out.println();
NetworkInterfaceAddress[] k=devices[1].addresses;

//System.out.println("網卡MAC : "+Integer.toHexString(a));
for(int n=0;n<k.length;n++) {
System.out.println("本機IP地址 : "+k[n].address); //本機IP地址
System.out.println("子網掩碼 : "+k[n].subnet); //子網掩碼
}
System.out.println("網路連接類型 : "+devices[1].datalink_description);
//}
NetworkInterface deviceName = devices[1];
/*將網卡設為混雜模式下用網路設備deviceName*/
JpcapCaptor jpcap =JpcapCaptor.openDevice(deviceName, 2000, false, 1); //openDevice(deviceName,1028,false,1);
jpcap.loopPacket(-1,new JpcapTip());
}

}

加油~~

2. 統計TCP流量,jpcap抓包時,通過loopPacket()方法,筆記本的有限網卡抓不包,而無線網可以,這是為什麼

( 1) 捕獲原始數據報, 包括共享網路上各主機發送/ 接收的以及相互之間交換的數據專報;
( 2) 在數據報發往屬應用程序之前, 按照自定義的規則將某些特殊的數據報過濾掉;
( 3) 在網路上發送原始的數據報;
( 4) 收集網路通信過程中的統計信息。

3. java編程:聽說有個叫網路嗅探器的東西,請問原理是 怎麼做出來的啊

Sniffer啊,自己去查,不想大片轉貼了。
主要原理是利用網卡的混雜模式,和乙太網自身的特點進行的。
java寫的話用 JPACAP

Jpcap是一個能夠抓取與發送網路數據包的Java組件。可以使用Jpcap從一個網路介面獲取數據包,然後在Java中對它們進行分析和顯示。同樣也可以通過一個網路介面發送任意數據包。Jpcap當前能夠 捕獲乙太網,IPv4,IPv6,ARP/RARP,TCP,UDP和ICMPv4數據包。
Jpcap實際上並非一個真正去實現對數據鏈路層的控制,而是一個中間件,Jpcap調用wincap/libcap,而給Java語言提供一個公共的介面,從而實現了平台無關性。在官方網站上聲明,Jpcap支持FreeBSD3.x,Linux RedHat6.1, Fedora Core4,Solaris,and Microsoft Windows 2000/XP等系統
Jpcap的整個結構大體上跟wincap/libpcap是很相像的,例如NetworkInterface類對應wincap的 typedef struct_ADAPTER ADAPTER,getDeviceList()對應pcap_findalldevs()等等。
Jpcap主要的類有如下幾個:
1.NetworkInterface
該類的每一個實例代表一個網路設備,一般就是網卡。這個類只有一些數據成員,除了繼承自java.lang.Object的基本方法以外,沒有定義其它方法。
2.JpcapCaptor
該類提供了一系列靜態方法實現一些基本的功能。該類一個實例代表建立了一個與指定設備的鏈接,可以通過該類的實例來控制設備,例如設定網卡模式、設定過濾關鍵字等等。
3.JpcapSender
該類專門用於控制數據包的發送。
4.Packet
這個是所有其它數據包類的父類。Jpcap所支持的數據包有:
ARPPacket、DatalinkPacket、EthernetPacket、ICMPPacket、IPPacket、TCPPacket、UDPPacket。

4. 我想要一個jpcap寫的抓包的小程序和一個發送IP數據包的小程序 不勝感激

摘抄他人的,在此共享了
開發工具:MyEclipse 6.5
JDK1.6

jpcap版本 : jpcap0.7

動態庫:jpcap.dll 、 wpcap.dll 、packet.dll 動態庫放到System32下

jar包: jpcap.jar 加入到類路徑下

本人機器接在一台交換機上,其他機器也接在這台交換機上

以下為開發代碼

try {
devices = JpcapCaptor.getDeviceList();//得到本機的網卡設備
// if true,the inferface becomes promiscuous mode(混雜模式)
captor = JpcapCaptor.openDevice(devices[0], 1024 * 10, true, 2000);//設為混合模式
captor.loopPacket(-1, handler );//循環獲取包
} catch (Exception e) {
System.out.println(e.getMessage());
}

private static PacketReceiver handler = new PacketReceiver() {
public void receivePacket(Packet packet) {
if (packet instanceof TCPPacket) {

TCPPacket tcp = (TCPPacket) packet;
InetAddress srcip = tcp.src_ip;
InetAddress dstip = tcp.dst_ip;

System.out.println("===================================");
System.out.println("TCP");
EthernetPacket ether = (EthernetPacket) tcp.datalink;
System.out.println("源IP:" + tcp.src_ip + " 目的IP:"
+ tcp.dst_ip + " 源埠:" + tcp.src_port + " 目的埠:"
+ tcp.dst_port);
System.out.println("源MAC:" + ether.getSourceAddress()
+ " 目的MAC:" + ether.getDestinationAddress());
System.out.println("協議:" + tcp.protocol);

}
}

};

運行結果如下:

TCP
源IP:/198.20.19.70 目的IP:/198.20.17.6 源埠:56914 目的埠:15002
源MAC:00:1f:d0:1d:ce:93 目的MAC:00:00:5e:00:01:1b
TCP
源IP:/198.20.17.6 目的IP:/198.20.19.70 源埠:15002 目的埠:56914
源MAC:00:0f:e2:3f:14:e8 目的MAC:00:1f:d0:1d:ce:93
TCP
源IP:/198.20.19.70 目的IP:/198.20.17.6 源埠:56914 目的埠:15002
源MAC:00:1f:d0:1d:ce:93 目的MAC:00:00:5e:00:01:1b
TCP
源IP:/198.20.17.6 目的IP:/198.20.19.70 源埠:15002 目的埠:56914
源MAC:00:0f:e2:3f:14:e8 目的MAC:00:1f:d0:1d:ce:93
TCP
源IP:/198.20.19.70 目的IP:/198.20.17.6 源埠:56914 目的埠:15002
源MAC:00:1f:d0:1d:ce:93 目的MAC:00:00:5e:00:01:1b
…………

我機器的IP為:198.20.19.70

閱讀全文

與jpcap獲取包文件內容相關的資料

熱點內容
兩個電腦數據怎麼一樣 瀏覽:829
順豐有什麼買東西的app 瀏覽:377
數位板word 瀏覽:939
win7寬頻連接出現多重網路 瀏覽:268
更改程序圖標c語言 瀏覽:629
網路電視偷停怎麼辦 瀏覽:418
linux連接ftp 瀏覽:512
es文件瀏覽器視頻筆記 瀏覽:874
mac無法打開描述文件 瀏覽:134
什麼軟體打文件 瀏覽:53
資料庫無數據變成0 瀏覽:899
名企筆試如何刷編程題 瀏覽:49
js跳到頁面某地 瀏覽:550
jsp展示clob欄位 瀏覽:779
nyx在網路上是什麼意思 瀏覽:145
樂播農業app是什麼 瀏覽:530
編程框架如何開發 瀏覽:136
金庸群俠傳3修改代碼 瀏覽:712
檢察院的文件類別有哪些 瀏覽:793
怎麼把九游殘留數據刪除 瀏覽:828

友情鏈接