Java抓包分析四(基于jnetpcap进行抓包)——分析Http请求数据包
在上篇文章中Java抓包分析三(基于jnetpcap進行抓包)——抓取Http請求數(shù)據(jù)包,我們講解了TCP三次握手的過程和如何抓取Http數(shù)據(jù)包,但是我們并沒有進行一個數(shù)據(jù)分析,接下來這篇文章我們將要開始對Http抓取的數(shù)據(jù)報進行深入的分析。
文章目錄
- 1.預(yù)備知識
- 1.1.OSI七層網(wǎng)絡(luò)模型
- 1.2.TCP/IP四層網(wǎng)絡(luò)模型
- 2.分析wireshark抓取的Http數(shù)據(jù)包
- 2.1.Frame(物理層)
- 2.2.Ethernet II(鏈路層)
- 2.3.Internet Protocol Version 4(網(wǎng)絡(luò)層)
- 2.4.Transmission Control Protocol(傳輸層)
- 2.5.Hypertext Transfer Protocol(應(yīng)用層)
- 3.分析jnetpcap抓取的Http數(shù)據(jù)包
- 3.1.提取Ethernet II(鏈路層)數(shù)據(jù)包
- 3.2.提取Internet Protocol Version 4(網(wǎng)絡(luò)層)數(shù)據(jù)包
- 3.3.提取Transmission Control Protocol(傳輸層)數(shù)據(jù)包
- 3.4.提取Hypertext Transfer Protocol(應(yīng)用層)數(shù)據(jù)包
- 3.5.查看提取Http數(shù)據(jù)包效果
1.預(yù)備知識
1.1.OSI七層網(wǎng)絡(luò)模型
在OSI七層網(wǎng)絡(luò)模型中,將整個網(wǎng)絡(luò)分成了七層(物數(shù)網(wǎng)傳會表應(yīng)),由于OSI是一種理論模型,這里我們不在展開討論,僅作了解。
| 應(yīng)用層(Application) | HTTP、TFTP, FTP, NFS, WAIS、SMTP |
| 表示層(Presentation | Telnet, Rlogin, SNMP, Gopher |
| 會話層(Session) | SMTP, DNS |
| 傳輸層(Transport) | TCP, UDP |
| 網(wǎng)絡(luò)層(Network) | IP, ICMP, ARP, RARP, AKP, UUCP |
| 數(shù)據(jù)鏈路層(Data Link) | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
| 物理層(Physical) | IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
1.2.TCP/IP四層網(wǎng)絡(luò)模型
在.TCP/IP中,TCP/IP把物理層和數(shù)據(jù)鏈路層統(tǒng)一為數(shù)據(jù)鏈路層,把會話層、表示層、應(yīng)用層統(tǒng)一為應(yīng)用層。
2.分析wireshark抓取的Http數(shù)據(jù)包
通過wireshar抓包時,我們看到如下這些信息:Frame、Ethernet 、Internet Protocol、Transmission Control Protocol、Hypertext Transfer Protocol這里我們將展開進行分析他們究竟時什么。
| Frame | 物理層的數(shù)據(jù)幀概況 |
| Ethernet II | 數(shù)據(jù)鏈路層以太網(wǎng)幀頭部信息,一般包含源(本機)、目的地(服務(wù)器)物理地址(MAC) |
| Internet Protocol Version 4 | IPV4 互聯(lián)網(wǎng)層IP包頭部信息,一般包含源(本機)、目的地(服務(wù)器)IP地址。 |
| Transmission Control Protocol | 傳輸層的數(shù)據(jù)段頭部信息,此處是TCP、UDP協(xié)議,一般包含源(本機)、目的地(服務(wù)器)端口和連接狀態(tài)。 |
| Hypertext Transfer Protocol | 應(yīng)用層的信息,如HTTP協(xié)議 |
如下篇幅較長,你要是沒耐心,建議就直接跳過,但是需要記得住這幾個點
從Ethernet II(鏈路層)中知道MAC地址
從Internet Protocol Version 4(網(wǎng)絡(luò)層)知道IP地址
從Transmission Control Protocol(傳輸層)知道端口(TCP端口尋址自己去補課了,我這里不廢話了)
從Hypertext Transfer Protocol(應(yīng)用層)知道傳輸數(shù)據(jù)
2.1.Frame(物理層)
雖然處于最底層,卻是整個開放系統(tǒng)的基礎(chǔ)。物理層為設(shè)備之間的數(shù)據(jù)通信提供傳輸媒體及互連設(shè)備,為數(shù)據(jù)傳輸提供可靠的環(huán)境。如果您想要用盡量少的詞來記住這個第一層,那就是“信號和介質(zhì)”。
2.2.Ethernet II(鏈路層)
通過我們使用wireshark珠寶,查看鏈路層,我們能看到三個特別直觀的信息
(如果你知道MAC地址是啥,下面這堆廢話你就跳過吧)
MAC 地址的英語是 Media Access Control Address,直譯為媒體存取控制位址,也稱為局域網(wǎng)地址(LAN Address)、以太網(wǎng)地址(Ethernet Address)或物理地址(Physical Address),它是一個用來確認(rèn)網(wǎng)絡(luò)設(shè)備位置的位址。
物理地址是一種標(biāo)識符,用來標(biāo)記網(wǎng)絡(luò)中的每個設(shè)備。同現(xiàn)實生活中收發(fā)快遞一樣,網(wǎng)絡(luò)內(nèi)傳輸?shù)乃袛?shù)據(jù)包都會包含發(fā)送方和接收方的物理地址。
由于數(shù)據(jù)包中都會包含發(fā)送方和接收方的物理地址,數(shù)據(jù)包從起始地發(fā)送到目的地,為了能夠正確地將數(shù)據(jù)包發(fā)送出去,就必須要求 MAC 地址具有唯一性。因此 MAC 地址都是由生產(chǎn)廠家在生產(chǎn)時固化在網(wǎng)絡(luò)硬件中,是硬件預(yù)留的地址。
硬件的 MAC 地址是廠家按照一定的規(guī)則,進行設(shè)置所產(chǎn)生的,因此,MAC 地址擁有自己的格式。
MAC 地址采用十六進制數(shù)表示,共 6 個字節(jié)(48 位),長度為 48bit(字節(jié))。整個地址可以分為前 24 位和后 24 位,代表不同的含義。
前 24 位稱為組織唯一標(biāo)識符(Organizationally Unique Identifier,OUI),是由 IEEE 的注冊管理機構(gòu)給不同廠家分配的代碼,區(qū)分了不同的廠家。
后 24 位是由廠家自己分配的,稱為擴展標(biāo)識符。同一個廠家生產(chǎn)的網(wǎng)卡中 MAC 地址后 24 位是不同的。
2.3.Internet Protocol Version 4(網(wǎng)絡(luò)層)
在網(wǎng)絡(luò)層,我們可以看到,如下這堆信息,其他的可能看不懂,但是下面這個IP地址應(yīng)該能看懂了
首先看下IPV4的一個數(shù)據(jù)包圖(當(dāng)然如果你不記得了,建議跳過,反正我也不想深入研究),這里涉及很多知識和網(wǎng)絡(luò)的太多了,這里就不展開了,總之,我們在這里需要知道就是通信的IP地址。
2.4.Transmission Control Protocol(傳輸層)
這里東西太多了,我也不想說,放一個TCP數(shù)據(jù)包給你們瞅瞅,愛看就看,不愛看就拉到。三次握手,四次揮手這里都不廢話了,看我以往的博客就行了,這里,我們就抓住一個重點,我們需要解析一個很重要的東西,那就是端口號,為什么是端口號嗯?不想說了,給你們看看軟考架構(gòu)師的一個考題,你們應(yīng)該就知道了
2.5.Hypertext Transfer Protocol(應(yīng)用層)
應(yīng)用就很直觀了,廢話我就不多說了
3.分析jnetpcap抓取的Http數(shù)據(jù)包
3.1.提取Ethernet II(鏈路層)數(shù)據(jù)包
通過我們上述的分析,我們知道鏈路層有三個很重要的信息,那就是使用什么協(xié)議?目的地MAC地址多少?源MAC地址?
核心代碼提取MAC地址
byte[]MAC地址轉(zhuǎn)字符串MAC地址
/*** @Description:將Mac地址的數(shù)組形式轉(zhuǎn)換為字符串形式 (適用于線程安全的情況下)* @param* @author:hutao* @mail:hutao_2017@aliyun.com* @date:2021年9月9日*/public static String macBytesToString(byte[] macBytes) {StringBuilder builder = new StringBuilder();for (int i = 0; i < macBytes.length; i++) {String hexString = Integer.toHexString(0xFF & macBytes[i]);if(hexString.length()<2) {hexString = "0"+hexString;}builder.append(':').append(hexString);}return builder.substring(1);}3.2.提取Internet Protocol Version 4(網(wǎng)絡(luò)層)數(shù)據(jù)包
核心代碼提取IP地址
if(!packet.hasHeader(Ip4.ID)) {return null; } Ip4 ip4 = packet.getHeader(new Ip4()); //這里獲取的IP地址同樣是byte[],而不是我們熟悉的十進制 byte[] sources = ip4.source(); byte[] destinations = ip4.destination();將字節(jié)數(shù)組地址轉(zhuǎn)為IP地址
import java.net.InetAddress;InetAddress sourceAddress = InetAddress.getByAddress(ip4.source(); String ipaddr= sourceAddress.getHostAddress();3.3.提取Transmission Control Protocol(傳輸層)數(shù)據(jù)包
核心代碼提取TCP端口號
if(!packet.hasHeader(Tcp.ID)) {return null; } Tcp tcp = packet.getHeader(new Tcp()); int sourcePort = tcp.source(); int destinationPort =tcp.destination();3.4.提取Hypertext Transfer Protocol(應(yīng)用層)數(shù)據(jù)包
if(!packet.hasHeader(Http.ID)) {return null;}Http http = packet.getHeader(new Http());//獲取當(dāng)前http請求中存在的請求頭參數(shù)String[] fieldArray = http.fieldArray();Map<String,String> fieldMap = new HashMap<>();for (String temp : fieldArray) {fieldMap.put(temp.toUpperCase(), temp);}//http請求頭參數(shù)Map<String,String> httpParams = new ConcurrentHashMap<>();//獲取http定義的請求頭參數(shù)Request[] valuesKeys = Request.values();for (Request value : valuesKeys) {//使用hash進行匹配,將雙重for變成一重forif(fieldMap.containsKey(value.name().toUpperCase().replace("_","-"))) {httpParams.put(value.toString(),http.fieldValue(value));}}//獲取http中請求的傳輸報文if(http.hasPayload()) {try {byte[] payload = http.getPayload();String result = new String(payload,"UTF-8");} catch (Exception e) {e.printStackTrace();}}3.5.查看提取Http數(shù)據(jù)包效果
請求接口準(zhǔn)備,準(zhǔn)備一個服務(wù)接口,這里示例的接口,將請求參數(shù)作為param參數(shù)返回給調(diào)用者。通過之前我們的分析,我們將會抓取到兩個Http數(shù)據(jù)包,一個我們想服務(wù)接口發(fā)起的,一個是服務(wù)接口向我們發(fā)起的。
我們向服務(wù)接口發(fā)起的請求數(shù)據(jù)包提取結(jié)果
服務(wù)器向我們發(fā)起請求
至此使用Jnetpcap對http進行請求抓包過程完畢。通過這四篇文章,相信大家也能按照某個協(xié)議進行數(shù)據(jù)抓取和解析了。
完整代碼,需要的滴滴滴,不需要積分
https://download.csdn.net/download/m0_37892044/67616418
總結(jié)
以上是生活随笔為你收集整理的Java抓包分析四(基于jnetpcap进行抓包)——分析Http请求数据包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 名帖04 李阳冰 篆书《城隍庙碑》
- 下一篇: 女生找工作,非常有用,好好 收藏,以后肯