【发布时间】:2018-05-13 01:10:30
【问题描述】:
我有来自套接字InputStream sin = socket.getInputStream(); 的 InputStream。我想从这个套接字解析 TCP/IP 数据包以获取目标主机和端口。
我该怎么做?
有什么建议吗?
更新
当打印出套接字的所有内容时:
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
当我将字节转换为字符时,我有这个:
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
【问题讨论】:
-
“数据包”是什么意思? TCP/IP 数据包?
-
是的,当然。
-
这些字节拼写出“�GET 2ip.ru/favicon.ico HTTP/1.1 Host: 2”。打印字母而不是数字可能更有用(只需将每个字节转换为字符)
-
看起来不错。但我没有主机端口。稍等一下,我会更新我的问题。
-
它看起来想要“GET 2ip.ru HTTP/1.1”和“Host: 2ip.ru”。由于没有指定端口,如果你尝试使用默认的 http 端口(80)会发生什么?
标签: java sockets parsing packet