簡體   English   中英

如何解析Java中來自套接字的TCP / IP數據包?

[英]How to parse TCP/IP packets from socket in Java?

我有來自套接字InputStream sin = socket.getInputStream(); 我想從此套接字解析TCP / IP數據包以獲取目標主機和端口。 我該怎么做? 有什么建議嗎?

UPD

當使用以下方法打印插座的所有內容時:

bytes = sin.readAllBytes();
System.out.println("-> " + sin);
System.out.println("-> -> " + sin.read());
for (int i = 0; i < bytes.length; i++) {
    System.out.println("++ -> " + bytes[i]);
}

我有這樣的事情:

-> java.net.SocketInputStream@36d64342
-> -> -1
++ -> 71
++ -> 69
++ -> 84
++ -> 32
++ -> 104
++ -> 116
++ -> 116
++ -> 112
++ -> 58
++ -> 47
++ -> 47
++ -> 50
++ -> 105
++ -> 112
++ -> 46
++ -> 114
++ -> 117
++ -> 47
++ -> 102
++ -> 97
++ -> 118
++ -> 105
++ -> 99
++ -> 111
++ -> 110
++ -> 46
++ -> 105
++ -> 99
++ -> 111
++ -> 32
++ -> 72
++ -> 84
++ -> 84
++ -> 80
++ -> 47
++ -> 49
++ -> 46
++ -> 49
++ -> 13
++ -> 10
++ -> 72
++ -> 111
++ -> 115
++ -> 116
++ -> 58
++ -> 32
++ -> 50

這是我打印的一個字節數組。

UPD2

當我將字節轉換為char我有這個:

GET http://2ip.ru/ HTTP/1.1
Host: 2ip.ru
Proxy-Connection: keep-alive
Accept
text/html,application/xhtml+xml,application/
xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 5.1; M3s Build/LMY47I; wv)
AppleWebKit/537.36 (KHTML, like Gecko)
Version/4.0 Chrome/44.0.2403.146     Mobile Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,en-US;q=0.8
Cookie: PHPSESSID=enph0vckkk9t1hqaglch3b6693;
IP%5B1511541539%5D=96.94.32.50;
__gads=ID=88de3c23be0f84e7:T=1511541553:S
=ALNI_MZbnsWDJcRSBUodYKfLeCg9pjw
YQw; _ym_uid=1511541569449405305; 
IP%5B1511886512%5D=217.77.220.27;
__utma=260173902.2002453512.1511541552.1511886514.
1511953525.5;
__utmc=260173902; __utmz=260173902.1511541565.1.1.utmcsr
=(direct)|utmccn=    (direct)|utmcmd=(none)
X-Requested-With: com.vestasoft.vadim.proxynator

獲取主機和端口使用

InetSocketAddress remoteAddress = (InetSocketAddress)socket.getRemoteSocketAddress();
String host = remoteAddress.getHostName();
int port = remoteAddress.getPort();

您可以對來自套接字的輸入流進行的主要操作是讀取數據

如果您正在傳輸String數據,則可以很容易地使用BufferedReader

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
for(String line = reader.readLine(); line != null; line = reader.readLine())
    //do stuff

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM