浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Linux】LISTENして受け取った信号を記録するだけのワンライナサーバ

 時折何らかのクライアント端末のテストのために、モックサーバとでもいうべき受信して定型を返すだけのサーバを用意することがあります。web系ではHTTP通信が主になるためおおよそ静的ページを返すのみ、決まったJSONを返すのみといった本番同然のサーバ + 完成済みの1ファイルとなります。これがweb系から離れるともう通信さえできれば後はなんでもいい、といった要求も現れます。そういった際に一々サーバを用意するのは手間です。この記事ではそういった要求にこたえるワンライナを紹介します。
 記事の主役のコマンドは次です。

while : ; do (nc -l -p リッスンするポート番号 >> 受け取った信号.txt) ; done

例.
while : ; do (nc -l -p 12345 >> in_port_12345.txt) ; done

 使うのはnetcatというネットワークの万能屋ともいわれるCLIソフトです。
Netcat – Wikipedia
 これの l オプションはLISTENするサーバになるというオプションで、p オプションはポート番号の指定です。nc -l では受け取った信号が標準出力されるのでそれをリダイレクトしてテキストファイルに追記します。whileでくくるのはコネクションが切れる度にnetcatも終了するためです。whileでくくれば複数回の通信にも耐えます。
 Linuxは何かと暗号染みた略語まみれのコマンドとオプションだらけですが、慣れたり意味が分かったりしてくると簡易に処理が作れるようになり便利です。
 
追記:
時刻別にファイルを分けるなら次の様にします。

while : ; do (nc -l -p 12345 >> in_port_12345_`date "+%Y%m%d_%H%M%S"`.txt) ; done
  • この記事いいね! (0)