ソケットメッセージを送信する単純なシェルスクリプト


16

テストのために、リモートIP> Portに接続し、単純なテキストTCPIPソケットメッセージを送信するシェルスクリプトを作成する必要があります。

回答:


18

ncnetcat)を使用します。

サーバ:

$ nc -l localhost 3000

クライアント:

$ nc localhost 3000

サーバーとクライアントの両方が標準出力/入力を読み書きします。

これは、サーバーとクライアントの両方が同じマシン上にある場合に機能します。それ以外の場合localhostは、サーバーの外部名に変更します。

少しおもしろい、サーバーに接続して送信すると時刻が表示される「サーバー」で、送信するdと終了しますq

サーバー(bash):

#!/bin/bash

coproc nc -l localhost 3000

while read -r cmd; do
  case $cmd in
    d) date ;;
    q) break ;;
    *) echo 'What?'
  esac
done <&"${COPROC[0]}" >&"${COPROC[1]}"

kill "$COPROC_PID"

クライアントセッション:

$ nc localhost 3000
d
木1月12日18:04:21 CET 2017
こんにちは?
何?
q

(サーバーはの後qに終了しますが、クライアントはを押すまでそれがなくなったことを検出しませんEnter)。


2
クライアントがデータの送信を終了したときにサーバーが結果を返す場合、結果ctrl+cは表示されません。エコーを使用する場合、たとえばecho "cookie" | nc localhost 9090、クライアントの出力ストリームは閉じられます(送信されます)が、クライアントはサーバーの結果を待機します。
AlikElzin-kilaka

12

一般的なアドバイスで netcatは、より良い方法です。

しかし、中にbashksh、あなたもこれを行うことができます:

exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"

なに1>&3?それが何を意味するのかわからない
アレクサンダーミルズ

言い換えれば、なぜだけecho "request" >&3ではないのか、私は1がちょうど冗長だと思う
アレクサンダーミルズ

4

netcatを試してください(例:nc)

echo GET / HTTP/1.0 | nc 0 80
HTTP/1.1 400 Bad Request
Date: Thu, 12 Jan 2017 13:44:23 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 311
Connection: close
Content-Type: text/html; charset=iso-8859-1
  • 上記のサンプルではecho GET / HTTP/1.0、ローカルHTTPサーバーにGET()を送信します
  • 複雑なプロトコルが必要ない場合は、これで十分です。

0

多くの場合、私はnetcat / socatにアクセスできませんでした。また、bashの使用に問題がありますexec、分散コンピューティング環境でました。

その普及のため、代替ソリューションはGNU AWKのTCP / IP機能を使用することです。「双方向パイプ」演算子に基づいたシンプルな構文を提供します。

以下は、ソケットを介してTCPメッセージを送信するこのソースからの変更例です。

BEGIN {
 NetService = "/inet/tcp/0/cs.wisc.edu/finger"
 print "coke" |& NetService
 close(NetService)
}

アドレスの完全な構文は次のとおり/net-type/protocol/local-port/remote-host/remote-portです。local-portが0に設定されている場合、ローカルホストはポートを自動的に選択しますが、これは通常、必要なポートです。gawkTCP / IPネットワーク機能の詳細については、こちらをご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.