我試着去建立一個基本的代理4服務器,我必須分析數據包並提取其信息,看起來像這樣:如何在java中解析代理socks數據包?
1 byte (version)
1 byte (command)
2 byte (port)
4 byte (ip)
X byte (userID, builds a string by looping until '\0' is found)
這裏是我到目前爲止的代碼:
InputStream reader = socket.getInputStream();
byte[] ver = new byte[1];
byte[] cmd = new byte[1];
byte[] port = new byte[2];
byte[] ip = new byte[4];
reader.read(ver, 0, 1); //should be: 4
reader.read(cmd, 1, 1); //should be: 1
reader.read(port, 2, 2); //should be: 00, 80
reader.read(ip, 4, 4); //should be: 217, 70, 182, 162
這裏的迴應我從我的代碼得到:[4, 1, 0, 80, -39, 70, -74, -94]
由於某些原因,我得到的IP部分總是錯的,我真的不知道爲什麼。我的第二個問題是:是否有一種簡單而乾淨的方法來獲取最後一個userID字符串部分,而不必構建一個混亂的循環,如果沒有找到\0
字節,可能會永遠掛起來,直到永遠懸掛?
謝謝。
你可以轉儲'Stream'數據'byte-by-'byte'來查看它包含的內容嗎? – 2014-11-23 09:58:22
@BoristheSpider:[4,1,0,80,-39,70,-74,-94,0,0](沒有用戶標識) – Heidi 2014-11-23 10:03:40