ローカリゼーション - netcat の非依存出力

ローカリゼーション - netcat の非依存出力

netcat を使用して、一部のポートがリッスンしているかどうかをテストしたいのですが、コマンドは英語以外の言語が使用されているマシンで実行されるため、grep単語に基づいて出力するのはあまり良い考えではありませんLISTENING(たとえば、ドイツ語の PC で という単語が表示されましたABHOREN)。

netcat のマニュアルページを見てみましたが、解決策が見つからないようです。そこで、ポートのステータスを文字列ではなく数値形式に変換できた人がいるかどうか気になりました。

前もって感謝します :)

答え1

netstatLISTENING と言っている場合、実際には( ではない)としたいのだと思いますnetcat。 最近のシステムのほとんどは、 が LISTENING tcp ソケットのみをリストし、それ以外は何もリストしないことを理解しています。 RHEL7 の最小インストールでは netstat がないので注意してください。 netstat は廃止され、 (同じフラグですが、出力形式がわずかに異なります)netstat -lntが優先されます。ssss -lnt

一般的なケースでは、答えは環境にロケールを適切に設定することです。これにより、すべてのプロセスが英語 (またはより良いのは C) で対話するようになります。

答え2

実行する前に、netcat の言語をエクスポートできます (またはスクリプト全体に対しても)。

LANG=C netcat ... 

答え3

netstatカーネルに直接問い合わせることができます。その情報はとから取得されます。/proc/net/tcp両方/proc/net/tcp6のファイルは同じ形式で、わずかに(咳)出力より読みにくいですnetstatが、言語に依存しません

これは切り刻まれ、わずかにマスクされたサンプル出力です。

$ cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
   0: 00000000:0385 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 5126 1 f4807080 100 0 0 10 -1
   1: 00000000:2328 00000000:0000 0A 00000000:00000000 00:00000000 00000000   113        0 5264 1 f62ff540 100 0 0 10 -1
   2: 00000000:008B 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 4535 1 f5bf1540 100 0 0 10 -1
   9: 0200000A:08AE xxxxxxxx:D512 01 00000030:00000000 01:00000018 00000000     0        0 759198 4 f63e95c0 24 4 3 10 19
  10: 0200000A:0D9B xxxxxxxx:7582 01 00000000:00000000 00:00000000 00000000   113        0 634192 1 f63e90c0 21 4 22 5 3

:確認する主要なフィールドは、下の 16 進数local_address(ローカル ポート) と列st(ステータス)に続きます。

ステータス列はカーネルソースで参照されます./include/net/tcp_states.hしかし、ありがたいことに、StackExchange で誰かが質問してくれました。https://stackoverflow.com/questions/5992211/list-of-possible-internal-socket-statuses-from-proc

完全性のためにここでも重複します:

enum {
    TCP_ESTABLISHED = 1,
    TCP_SYN_SENT,
    TCP_SYN_RECV,
    TCP_FIN_WAIT1,
    TCP_FIN_WAIT2,
    TCP_TIME_WAIT,
    TCP_CLOSE,
    TCP_CLOSE_WAIT,
    TCP_LAST_ACK,
    TCP_LISTEN,
    TCP_CLOSING,    /* Now a valid state */

    TCP_MAX_STATES  /* Leave at the end! */
};

コメントの1つにもあるように、これは状態であり、enum状態は1から順番に番号が付けられています。主に0A(LISTENING)と01(ESTABLISHED)を探します。

注: netstat がこの情報をどこから取得しているかを調べるために、 を実行しましたstrace -e open,write netstat -an

フィールド ヘッダーの詳細については、次のリンクを参照してください。http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html

関連情報