如何在 TCP 中發送二進位訊息並儲存回應

如何在 TCP 中發送二進位訊息並儲存回應

我必須為專有協定開發一個客戶端,如果能夠透過向現有伺服器發送自訂訊息並查看答案來了解其行為,這將非常有用。 「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

相關內容