web-dev-qa-db-ja.com

/ procからの可能な内部ソケットステータスのリスト

_/proc/net/tcp_のst列の可能な値を知りたいのですが。 st列はnetstat(8)またはss(8)のSTATE列と同じだと思います。

私はなんとか3つのコードを識別しました:

_sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
0: 0100007F:08A0 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 7321 1 ffff81002f449980 3000 0 0 2 -1                     
1: 00000000:006F 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 6656 1 ffff81003a30c080 3000 0 0 2 -1                     
2: 00000000:0272 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 6733 1 ffff81003a30c6c0 3000 0 0 2 -1                     
3: 0100007F:0277 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 7411 1 ffff81002f448d00 3000 0 0 2 -1                     
4: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 7520 1 ffff81002f4486c0 3000 0 0 2 -1                     
5: 0100007F:089F 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 7339 1 ffff81002f449340 3000 0 0 2 -1           
6: 0100007F:E753 0100007F:0016 01 00000000:00000000 02:000AFA92 00000000   500        0 18198 2 ffff81002f448080 204 40 20 2 -1                   
7: 0100007F:E752 0100007F:0016 06 00000000:00000000 03:000005EC 00000000     0        0 0 2 ffff81000805dc00                                      
_

上記は次のことを示しています。

  • ラインsl0:tcp/2208のリスニングポート。 _st = 0A = LISTEN_
  • オンラインsl6:tcp/22で確立されたセッション。 _st = 01 = ESTABLISHED_
  • オンラインsl7:sshログアウト後のTIME_WAIT状態のソケット。 iノードはありません。 _st = 06 = TIME_WAIT_

誰かがこのリストを拡張できますか? proc(5)のマンページは、次のように述べている主題について非常に簡潔です。

_   /proc/net/tcp
          Holds a dump of the TCP socket table. Much of the information is not of use apart from debugging. The "sl" value is the kernel hash slot for the socket, the "local address" is  the  local  address  and
          port  number pair.  The "remote address" is the remote address and port number pair (if connected). ’St’ is the internal status of the socket.  The ’tx_queue’ and ’rx_queue’ are the outgoing and incom-
          ing data queue in terms of kernel memory usage.  The "tr", "tm->when", and "rexmits" fields hold internal information of the kernel socket state and are only useful  for  debugging.   The  "uid"  field
          holds the effective UID of the creator of the socket.
_

また、関連する注記として、上記の/ proc/net/tcp出力は、いくつかのリスニングプロセス(2208、62、111など)を示しています。ただし、確立された状態とtime_wait状態は表示されますが、tcp/22でリスニングtcp接続を確認できません。はい、_/proc/net/tcp6_に表示されますが、_/proc/net/tcp_にも表示されるべきではありませんか? Netstatの出力は、ipv4のみにバインドされているアプリケーションとは異なる方法で表示されます。例えば。

_tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      4231/portmap        
tcp        0      0 :::22                       :::*                        LISTEN      4556/sshd           
_

どうもありがとう、-アンドリュー

23
The_Viper

これらは、Linuxカーネルソースの ./ include/net/tcp_states.h の列挙型と一致する必要があります。

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! */
};

2.質問については、たとえば、sshdがリッスンしていないことを本当に確信していますか。 0.0.0.0:22?そうでない場合、私はあなたが見ているものがv4-mapped-on-v6ソケットに関連していると思います。例えばを参照してください。 man 7 ipv6

30
nos