我必須為專有協定開發一個客戶端,如果能夠透過向現有伺服器發送自訂訊息並查看答案來了解其行為,這將非常有用。 「Telnet」非常適合此目的,只不過該協定是二進位的。
所以目前,我已經在文件中編寫了我想要的消息(使用十六進制編輯器)mymsg
,並且我嘗試以這種方式使用 netcat 發送它:
cat msg | netcat 127.0.0.1 1234
我的問題是 netcat 在到達 EOF 後就停止了,所以我永遠看不到伺服器的答案。有什麼建議麼?
(當然,可以使用運行專有伺服器的模型nc -l -p 1234
)
答案1
我有點困惑,因為我認為 netcat 有一個明確的功能來處理這種情況。我認為它會等到從標準輸入和套接字獲取 EOF。也許這只是一個超時問題;檢查你的 netcat 文檔,看看是否有一個選項可以在標準輸入上獲得 EOF 後繼續從套接字讀取一段時間。
或者你可以使用拼湊答案:
(cat msg; sleep 42) | netcat 127.0.0.1 1234
答案2
我想出了這個 python 腳本來完成這項工作。
#!/usr/bin/env python
import socket
import sys
if (len(sys.argv) != 3):
print "usage: " + sys.argv[0] + " host port <message >answer"
print ""
print "if you want to create a fake server side: nc -l -p port"
else:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((sys.argv[1], int(sys.argv[2])))
msg = sys.stdin.read()
s.send(msg)
answer = s.recv(1024)
print answer