[英]Send data over TCP/IP with Netcat or Rails
我有服務器的IP和端口,可以在Ubuntu 14.04上通過nc連接到該端口。
> nc x.x.x.x PORT
為了與服務器進行通信,第一步是發送WAKEUP呼叫並獲得確認。 服務器在喚醒調用中期望3字節的ID。 文檔中提供了一個示例,該示例顯示了使用軟件發送ID和接收確認的成功方案。 即
客戶端發送:
<sy><sy><eq>111<et>
服務器響應:
<sy><ak>A<et><cr>
這是<sy>
一些細節
在<>括號內是不可打印的ASCII字符(
<sy>
= ASCII 22或十六進制0x16)
我試圖復制完全相同的方案,但沒有這樣做。 服務器沒有響應我發送的數據,盡管在那里收到了數據。 我不確定這些標簽<sy><sy><eq>
等。如何正確發送ID(111)和這些標簽<sy>
?
還嘗試使用Rails框架和Bindata ruby gem發送此數據,但不知道如何表示以上格式。
netcat
可能是錯誤的工具。 或者至少您將要使用其他程序來提供輸入。
如果這樣做的話,我會用python或C語言編寫一些代碼,這些代碼既可以連接到服務器,也可以向我提供發送(以及接收/解釋響應)所需的任何數據,而完全不使用nc
。 網上有很多例子。
您可以使用<sy>
字符的語法b'\\x16'
將控制字符編碼為python中的字節字符串。 大多數其他語言都具有等效的功能。
我不確定這些字符到底是什么。 似乎它們是標准的ASCII控制字符,但它們沒有使用標准的縮寫(例如,請參見http://www.theasciicode.com.ar/ )。 因此,大概您正在查看的文檔中有相應值的列表。 舉例來說,假設<eq>
對應於ASCII ENQ字符,而<et>
對應於ASCII EOT(並且已經知道<sy>
等同於ASCII SYN),則需要的字符串<sy><sy><eq>111<et>
可以用python字節字符串編碼: b'\\x16\\x16\\x05111\\x04'
(或者,如果喜歡規律性,則等效地為b'\\x16\\x16\\x05\\x31\\x31\\x31\\x04'
: 1
字符只是ASCII數字,因此您可以將每個1
替換為其等效的二進制b'\\x31'
)
要返回nc
,在大多數情況下嘗試在終端窗口的nc
輸入中鍵入控制字符是非常困難且容易出錯的。 您將需要知道等效的控制字符映射(例如0x16為“ Ctrl-V”),並且需要知道如何使終端接受該文字字符(巧合的是,在Linux中,您必須在大多數控制字符之前)使用Ctrl-V,以便將它們作為輸入輸入,並避免以通常的方式解釋它們:Ctrl-D == EOF,Ctrl-C ==中斷,Ctrl-W == Delete-Previous-Word等)。
因此,如果您想從命令行將上述數據輸入到nc
的輸入中,則需要輸入以下字符:
Ctrl-V Ctrl-V <sy> / SYN
Ctrl-V Ctrl-V <sy> / SYN
Ctrl-V Ctrl-E <eq> / ENQ
1
1
1
Ctrl-V Ctrl-D <et> / EOT
但要注意的另一個重要事項是,通常在輸入換行符之前(即按Return鍵), nc
實際上不會發送任何內容。 然后,該換行符也將發送到服務器,而這可能不是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.