日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java socket 包头包体_使用JAVA上抓取Socket服务端和客户端通信TCP数据包

發布時間:2025/3/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java socket 包头包体_使用JAVA上抓取Socket服务端和客户端通信TCP数据包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Java抓取Socket通信TCP數據包

使用WireShark默認使用的是winpcap去抓本地環回的數據包,需要安裝npcap再在Wireshark選擇本地環回的網卡抓包

在Java-Socket中,在本地Socket不使用127網段無法與服務端進行通信。

但是常用的Jcap和Pcap4j都是依據libpcap/winpcap實現的。但是這倆又抓不到本地127網段的數據包。

所以選擇在局域網中使用兩臺設備進行數據傳輸并抓取相應數據包

抓包需要使用的winpcap地址:www.winpcap.org/

使用Pcap4j的Maven依賴

org.pcap4j

pcap4j-core

1.7.5

org.pcap4j

pcap4j-packetfactory-static

1.7.5

123456789101112復制代碼

服務端:import?org.pcap4j.core.*;

import?org.pcap4j.packet.Packet;

import?java.io.IOException;

import?java.net.InetAddress;

import?java.net.ServerSocket;

import?java.net.Socket;

public?class?TCPServer?{

public?static?void?Pcap4j(InetAddress?addr){

{

//1.Pcap抓取不?了本地127的包

//2.本地Socket不用127網段的包無法與服務端通信

try?{

PcapNetworkInterface?nif?=?Pcaps.getDevByAddress(addr);

int?snaplen?=?64?*?1024;

int?timeout?=?50;

//初始化抓包器

PcapHandle.Builder?phb?=?new?PcapHandle.Builder(nif.getName()).snaplen(snaplen)

.promiscuousMode(PcapNetworkInterface.PromiscuousMode.PROMISCUOUS).timeoutMillis(timeout)

.bufferSize(1?*?1024?*?1024);

PcapHandle?handle?=?phb.build();

/**?設置TCP過濾規則?*/

String?filter?=?"tcp?and?port?7788";//過濾條件是tcp數據包,端口號為7788

handle.setFilter(filter,?BpfProgram.BpfCompileMode.OPTIMIZE);

PacketListener?listener?=?new?PacketListener()?{

@Override

public?void?gotPacket(Packet?packet)?{

System.out.println(packet);

System.out.println("-----------------------------------------");

}

};

handle.loop(3,?listener);//loop里設置抓3個數據包,要無限抓設置-1

}?catch?(Exception?e)?{

e.printStackTrace();

}

}

}

public?static?void?main(String[]?args)?throws?IOException,?PcapNativeException,?NotOpenException?{

ServerSocket?serverSocket=new?ServerSocket(7788);

System.out.println("建立服務端");

InetAddress?addr=InetAddress.getLocalHost();

Pcap4j(addr);

Socket?socket=serverSocket.accept();

System.out.println("連接成功");

socket.close();

serverSocket.close();

}

}

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950復制代碼

客戶端:import?java.io.*;

import?java.net.Socket;

public?class?TCPClient?{

public?static?void?main(String[]?args)?throws?IOException?{

Socket?socket=new?Socket("192.168.43.15",7788);

System.out.println("客戶端連接成功");

socket.close();

}

}

12345678910復制代碼

運行結果:

總結

以上是生活随笔為你收集整理的java socket 包头包体_使用JAVA上抓取Socket服务端和客户端通信TCP数据包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。