簡體   English   中英

使用Netcat或Rails通過TCP / IP發送數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM