-
Notifications
You must be signed in to change notification settings - Fork 12
/
README
182 lines (148 loc) · 10.4 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/**************************************************************************/
/* */
/* tcpeek README */
/* */
/* Copyright (C) 2012 KLab Inc. */
/**************************************************************************/
【はじめに】
tcpeek(てぃーしーぴーく)は、TCPのセッション確立(3wayハンドシェイク)時に発生するエラーを監視・集計するネットワークモニタです。
以下のような機能があります。
・エラー検出 - 接続に失敗したTCPセッションを集計できます
・RSTにより接続拒否されたセッションをカウントします
・ICMP Unreachにより到達不能を検出したセッションをカウントします
・接続がタイムアウトしたセッションをカウントします
・再送検出 - 再送が発生したTCPセッションを集計できます
・SYNセグメントの再送が発生したセッションをカウントします
・SYN/ACKセグメントの再送が発生したセッションをカウントします
・フィルタ - フィルタを指定して個別に集計できます
・通信方向・IPアドレス・ポート番号の組合わせでフィルタを指定します
・複数のフィルタを指定できます
・※ ただしこのポートは除く。といったフィルタも指定できます
・データ出力 - 集計したデータをUNIXドメインソケット経由で出力します
・スクリプトで扱いやすいJSON形式で出力します
・gmetric経由でrrdを出力するためのスクリプト(tcpeekstat)が付属しています
【インストール方法】
$ git clone git://github.com/pandax381/tcpeek.git
$ cd tcpeek
$ ./configure
$ make
$ sudo make install
【使い方】
usage: tcpeek [option]... [expression]...
option:
-u --user=uid # 指定したuserにsetuidして動作します
-i --interface=dev # インターフェース名を指定します(例:eth0)
-U --socket=path # UNIXドメインソケットのパスを指定します (デフォルト:/var/run/tcpeek/tcpeek.sock)
-c --checksum=[0|1|2] # チェックサムの検証モードを指定します 0=検証なし 1=IPヘッダのみ 2=IPヘッダ+TCPヘッダ(デフォルト:0)
-t --timeout=sec # セッションのタイムアウト時間(デフォルト:60)
-B --buffer # libpcapのバッファサイズをMB単位で指定します(デフォルト:2)
-l --loglevel=LEVEL # SYSLOGレベル(デフォルト:LOG_NOTICE)※ 現状は機能していないです
-q --quiet # このオプションを指定すると、リアルタイムのセッション情報出力を抑制します
--promisc # このオプションを指定すると、プロミスキャスモードで動作します
--icmp # このオプションを指定すると、ICMP 到達不能メッセージを解釈するようになります
-h --help # ヘルプを表示して終了します
-v --version # バージョンを表示して終了します
expression:
[filter]:dir@addr:port[:port...][,...]
example) '%' is the same as wildcard '*'
tcpeek -i eth0 filter:RX@%:80:443
tcpeek -i eth0 filter:[email protected]/24:%
tcpeek -i eth0 filter1:RX@%:80:443 filter2:[email protected]/24:%
-i オプションでインターフェースだけ指定すればとりあえず動きます。(デフォルトで「RX:RX@*:*」と「TX:TX@*:*」のフィルタが指定されています)
$ sudo ./tcpeek -i eth0
expression の指定方法が少し複雑ですが、以下のように指定します。
フィルタ名:通信方向(RX|TX)@IPアドレス:ポート番号
フィルタは複数指定できます。
filter1:[email protected]:80 filter2:[email protected]:80
IPアドレスとポート番号は「%」でワールドカードが指定できます。
filter:TX@%:%
IPアドレスにはネットワークアドレスも指定できます。
filter:[email protected]/24:%
ポート番号は「:」区切りで複数指定できます。
filter:[email protected]:80:443:8080
IPアドレスとポート番号の組合わせは「,」区切りで複数指定できます。
filter:[email protected]:80:443:8080,192.168.0.2:80,192.168.0.3:80:8080
フィルタ名を省略すると除外フィルタとなり、条件にマッチするセッションは全てのフィルタに記録されません(記述順は関係ありません)
:RX@*:22 :TX@*:22
※ 複数のフィルタにマッチするセッションは、該当する全てのフィルタにて集計されます
【結果出力】
tcpeekを実行すると、標準エラーへTCPセッションの情報がリアルタイムで出力されます。
$ sudo ./tcpeek -i eth0
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
TIME(s) | TIMESTAMP | SRC IP:PORT DST IP:PORT | RESULTS | DUP SYN DUP S/A
----------------------------------------------------------------------------------------------------------------------
0.002 | 12-07-06 16:39:02.552 | 192.168.2.227:48967 192.168.2.202:80 | success | 0 0
0.002 | 12-07-06 16:39:02.559 | 192.168.2.227:48968 192.168.2.202:80 | success | 0 0
0.002 | 12-07-06 16:39:11.219 | 192.168.2.227:42031 192.168.2.202:443 | success | 0 0
0.002 | 12-07-06 16:39:11.273 | 192.168.2.227:48970 192.168.2.202:80 | success | 0 0
0.002 | 12-07-06 16:39:11.279 | 192.168.2.227:42033 192.168.2.202:443 | success | 0 0
0.002 | 12-07-06 16:39:11.309 | 192.168.2.227:48972 192.168.2.202:80 | success | 0 0
0.002 | 12-07-06 16:39:11.323 | 192.168.2.227:42035 192.168.2.202:443 | success | 0 0
0.001 | 12-07-06 16:39:11.354 | 192.168.2.227:42036 192.168.2.202:443 | success | 0 0
0.002 | 12-07-06 16:39:11.385 | 192.168.2.227:42037 192.168.2.202:443 | success | 0 0
0.001 | 12-07-06 16:39:36.254 | 192.168.2.228:62876 192.168.2.227:80 | failure (reject) | 0 0
0.000 | 12-07-06 16:39:38.160 | 192.168.2.228:62877 192.168.2.227:80 | failure (reject) | 0 0
0.000 | 12-07-06 16:39:44.689 | 192.168.2.227:56371 192.168.2.228:8080 | failure (reject) | 0 0
39.947 | 12-07-06 16:41:29.723 | 192.168.2.227:58376 192.168.2.207:8080 | failure (timeout) | 2 0
TIME(s) TCPセッションの確立(3wayハンドシェイク)に掛かった時間(秒)
TIMESTAMP TCPセッションが開始された時刻
SRC IP:PORT TCPセッションの始端(クライアント)のIPアドレスとポート番号
DST IP:PORT TCPセッションの終端(サーバ)のIPアドレスとポート番号
RESULTS TCPセッションの確立可否
DUP SYN SYNセグメントが再送された回数(再送が発生していなければ 0)
DUP S/A SYN/ACKセグメントが再送された回数(再送が発生していなければ 0)
【統計出力】
Ctrl+C にて、上記の統計情報を出力して終了します。
========== TCPEEK SUMMARY ==========
from : 2012-07-02 16:48:33 集計開始時刻
to : 2012-07-02 16:49:59 集計終了時刻
time : 86.106 (sec) 集計時間(秒)
------------------------------------
RX フィルタ名
Success: 0 session 3wayハンドシェイクが成功したセッション数
SYN Segment Duplicate : 0 SYNセグメントの再送が発生したセッション数
S/A Segment Duplicate : 0 SYN/ACKセグメントの再送が発生したセッション数
Failure: 10 session 3wayハンドシェイクが失敗したセッション数
Connection Timed Out : 0 接続がタイムアウトしたセッション数
Connection Rejected : 10 接続が拒否されたセッション数
------------------------------------
TX
Success: 783 session
SYN Segment Duplicate : 0
S/A Segment Duplicate : 0
Failure: 0 session
Connection Timed Out : 0
Connection Rejected : 0
------------------------------------
http-rx
Success: 0 session
SYN Segment Duplicate : 0
S/A Segment Duplicate : 0
Failure: 10 session
Connection Timed Out : 0
Connection Rejected : 10
------------------------------------
http-tx
Success: 767 session
SYN Segment Duplicate : 0
S/A Segment Duplicate : 0
Failure: 0 session
Connection Timed Out : 0
Connection Rejected : 0
====================================
この統計情報は、後述する tcpeekstat コマンドを使うことで、tcpeekの実行中にも取得できます。
【tcpeekstat】
usage: tcpeekstat [OPTION]
[OPTION]
-g --gmetric # exec gmetric
-U --socket=path # unix domain socket (default: /var/run/tcpeek/tcpeek.sock)
-v --version # version
-h --help # help
tcpeekstat を実行すると、動作中のtcpeekから統計情報を取得できます。
$ sudo ./tcpeekstat
-g オプションを付けて実行すると、gmetricコマンド経由でrrdを出力します。
$ sudo ./tcpeekstat -g
※ -g オプションなしの場合は起動時からの累計、-g オプションありの場合は「前回 -g オプションつきで実行したタイミング」からの差分を出力します
【注意事項】
libpcapがインストールされている必要があります(libpcapは最新版の仕様をおすすめします http://www.tcpdump.org/#latest-release)
このソフトウェアを使用して発生したいかなる損害についても作者は責任を負いません。