pythonモニタTCP接続数
pythonモニタTCP接続数
pythonモニタTCP接続数
まず/proc/net/tcpというファイルを理解します.ここではipv 4のすべてのtcp接続の場合を記録します.以下の数値が含まれています.
備考:ファイルには16進法が使用されていますstという列に注目します.
ステータスコード照合テーブル
code
ステータスコード
説明
00
ERROR_STATUS
01
TCP_ESTABLISHED
開いている接続を表します
02
TCP_SYN_SENT
接続リクエストの送信後に一致する接続リクエストを待つ
03
TCP_SYN_RECV
接続リクエストを受信して送信した後、接続リクエストの確認を待つ
04
TCP_FIN_WAIT1
リモートTCP接続割込み要求、または以前の接続割込み要求の確認待ち
05
TCP_FIN_WAIT2
リモートTCPからの接続中断要求待ち
06
TCP_TIME_WAIT
リモートTCPが接続割り込み要求の確認を受信するのに十分な時間を待つ
07
TCP_CLOSE
リモートTCPによる接続中断の確認待ち
08
TCP_CLOSE_WAIT
ローカルユーザからの接続中断要求を待つ
09
TCP_LAST_ACK
元のリモートTCPへの接続割込み要求の確認待ち
0A
TCP_LISTEN
遠方のTCPポートからの接続要求をリスニングする
0B
TCP_CLOSING
接続ステータスなし
pythonコードは次のとおりです.
pythonモニタTCP接続数
まず/proc/net/tcpというファイルを理解します.ここではipv 4のすべてのtcp接続の場合を記録します.以下の数値が含まれています.
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
備考:ファイルには16進法が使用されていますstという列に注目します.
ステータスコード照合テーブル
code
ステータスコード
説明
00
ERROR_STATUS
01
TCP_ESTABLISHED
開いている接続を表します
02
TCP_SYN_SENT
接続リクエストの送信後に一致する接続リクエストを待つ
03
TCP_SYN_RECV
接続リクエストを受信して送信した後、接続リクエストの確認を待つ
04
TCP_FIN_WAIT1
リモートTCP接続割込み要求、または以前の接続割込み要求の確認待ち
05
TCP_FIN_WAIT2
リモートTCPからの接続中断要求待ち
06
TCP_TIME_WAIT
リモートTCPが接続割り込み要求の確認を受信するのに十分な時間を待つ
07
TCP_CLOSE
リモートTCPによる接続中断の確認待ち
08
TCP_CLOSE_WAIT
ローカルユーザからの接続中断要求を待つ
09
TCP_LAST_ACK
元のリモートTCPへの接続割込み要求の確認待ち
0A
TCP_LISTEN
遠方のTCPポートからの接続要求をリスニングする
0B
TCP_CLOSING
接続ステータスなし
pythonコードは次のとおりです.
#!/usr/bin/python
# coding:utf-8
from itertools import dropwhile
sys_st = {
"00": "ERROR_STATUS",
"01": "TCP_ESTABLISHED",
"02": "TCP_SYN_SENT",
"03": "TCP_SYN_RECV",
"04": "TCP_FIN_WAIT1",
"05": "TCP_FIN_WAIT2",
"06": "TCP_TIME_WAIT",
"07": "TCP_CLOSE",
"08": "TCP_CLOSE_WAIT",
"09": "TCP_LAST_ACK",
"0A": "TCP_LISTEN",
"0B": "TCP_CLOSING",
}
tcp_static_dict = {}
with open("/proc/net/tcp") as f:
for line in dropwhile(lambda line: line.strip().startswith('sl'), f):
tcp_status_code = line.split()[3]
if sys_st.has_key(tcp_status_code):
if tcp_static_dict.get(sys_st[tcp_status_code], None) is None:
tcp_static_dict[sys_st[tcp_status_code]] = 1
else:
tcp_static_dict[sys_st[tcp_status_code]] += 1
print tcp_static_dict