2017-04-13 5 views
0

Ubuntu 14.04でnc経由で接続できるサーバのIPとポートがあります。NetcatまたはRailsでTCP/IP経由でデータを送信

> nc x.x.x.x PORT 

サーバと通信するためには、最初にWAKEUPコールを送信して肯定応答を得ることです。サーバはウェイクアップコールで3バイトのIDを要求します。 IDを送信し、ソフトウェアを使用してackを受信するという成功シナリオを示す例が、ドキュメントに記載されています。

<sy><sy><eq>111<et> 
を、サーバがで応答:すなわち

クライアントが送信する。ここ

<sy><ak>A<et><cr> 

<>カッコ内<sy>

のいくつかの詳細は、非印刷可能ですASCII文字(<sy> = ASCII 22または16進数0x16)

まったく同じシナリオを複製しようとしましたが、失敗しました。データはそこで受信されますが、サーバーは送信したデータに応答しません。私はこれらのタグについてよくわかりません<sy><sy><eq>などID(111)をこれらのタグと共に送る方法<sy>正しく?

また、RailsフレームワークとBindata ruby​​ gemを使用してこのデータを送信しようとしましたが、上記の形式の表現方法はわかりません。

答えて

1

netcatはおそらく間違ったツールです。あるいは、少なくともあなたはそれを入力するために他のプログラムを使いたいでしょう。

もし私がこれをしていたら、サーバーに接続して、それを送って(応答を受け取って解釈するのに)必要なデータを送り込んで、ncを残しておく何かをPythonまたはCでコーディングします。ウェブには多くの例があります。

制御文字をb'\x16'<sy>文字の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数字ですので、あなたはそのバイナリ同等b'\x31'で各1を置き換えることができます)

ncに戻るには、に制御文字を入力しようとしています終端からのnc入力ほとんどの場合可能ですが、非常に困難でエラーを起こしやすいです。同等の制御文字マッピング(例えば、0x16は "Ctrl-V")を知っている必要があり、ターミナルにそのリテラル文字を受け入れる方法を知る必要があります(偶然にも、linuxではほとんどの制御文字Ctrl-D == EOF、Ctrl-C == Interrupt、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 

しかし、また、重要な注意することは、通常ncが実際にはないということです改行を入力するまでReturnキーを押します。その後、その改行文字もあなたが望むものではないかもしれないサーバーに送られます。

+0

私はRuby on RailsフレームワークとBindata https://github.com/dmendel/bindataという名前の宝石を使ってこれを達成しようとしていますが、まだ成功していません。 – Arif

関連する問題