私はこれをかなり徹底的に調べましたが、実用的な例を考え出すことはできません。
私の目的は、着信接続を確認してテキストファイルに書き込むために、特定のポートのTCPトラフィックを監視することです。キャッチは、クライアントが2番目に接続したときを正確に示すために、各行にタイムスタンプも必要です。
Netstat、nmap、およびtcptrackをすでに使い果たしましたが、タイムスタンプをサポートするものはありません。
特定のローカルポートを監視し、接続時にテキストをファイルに書き込んでから各行の日付を連結すると、Linuxシェルスクリプトが機能すると考えていました。
私はこれで遊んでいました:
netstat -ano|grep 443|grep ESTABLISHED
これと同様に:
tcptrack -i eth0 port 443
しかし、どちらにしても私のニーズには合いません。
あなたが何か提案があるか、正しい方向に私を指すことができればそれは大歓迎です。
ありがとう。 :)
edit:この数年後もまだ支持率が高いです。この答えには行かないでください、ここでの iptables
を使った答え は私の考えでははるかに優れています。
tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'
必要に応じて、あるいはtcp-syn
のみ、またはtcp-ack
のみ(私の推測ではそれになるでしょう)。
これにはLinuxカーネルのiptablesサポートを使うことができます。利点はそれほど便利であるために特別なソフトウェアを必要としないことです。欠点は、設定にroot権限が必要なことです(ただし、特権ポートであるポート443について話しているのであれば、ほとんどのソリューションではおそらくroot権限が必要です)。
次のようにiptablesの規則を追加します。
Sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "
(あなたの好みに合うように-I INPUT
部分を調整してください。)
ルールが起動されると、syslogエントリがカーネルによって発行されます。たとえば、入力規則では、ログエントリは次のようになります。
Dec 5 09:10:56 hostname kernel:[1023963.185332] HTTPS SYN:IN = ifX OUT = MAC = 80:80:80:80:80:80:80:80:80:80:80:80:08:00 SRC = ABCD DST = WXYZ LEN = 52 TOS = 0x00 PREC = 0x20 TTL = 119 ID = 11901 DF PROTO = TCP SPT = 37287 DPT = 443 WINDOW = 8192 RES = 0x00 SYN URGP = 0
その後、この情報を使って何か便利なことをするために、あらゆる一般的なログ監視ツールを使用することができます。 syslogの実装でサポートされている場合は、これらを別のログファイルに転送することもできます。追加のソフトウェアを使用せずに、接続データをタイムスタンプ付きのファイルに書き込むという要件を効果的に満たします。
LOG
ターゲットは非終了ターゲットであることに注意してください。これは、それに続くどんな規則もまだ評価され、パケットはLOG規則自体によって拒否も受け入れもされないことを意味します。これにより、LOG
ターゲットはファイアウォールルールのデバッグにも役立ちます。
ログがあふれないようにするには、これと一緒にlimit
モジュールを使用することを検討してください。詳細はiptables(8)のmanページを参照してください。
デフォルトでは、 tcpdump ユーティリティはマイクロ秒の分解能で時間を報告します。例えば:
$ Sudo tcpdump -i any port 443
次のような出力が表示されます。
12:08:14.028945 IP localhost.33255> localhost.https:フラグ[S]、シーケンス1828376761、勝ち43690、オプション[mss 65495、sackOK、TS val 108010971 ecr 0、nop、wscale 7]、長さ0
12:08:14.028959 IP localhost.https> localhost.33255:フラグ[R.]、シーケンス0、確認応答1828376762、勝利0、長さ0
Tcpdumpオプションの全リストについてはtcpdump(8)を、使用できるフィルタの完全な構文についてはpcap-filter(7)を参照してください。
443は暗号化されたトラフィックです - とにかくこのポートでトラフィックの先頭や末尾を作るのはとても難しいです。
できるよ
yre install ngrepまたはapt-get install ngrep
それから走る
ngrep -W byline -d any port 443 -q
他のマシンからの送受信パケットを監視するためにもこれが必要になるかもしれません。
tcpflow -i eth0 -c port 7891
(ネットワークについて言及するためのオプション-i
、コンソールでパケットを印刷するためのオプション-c
)
あなたはtcpdumpまたはWiresharkを使用することができます。
興味のあるポート上のトラフィックを常に監視する恒久的な解決策が必要な場合は、QoS(linuxのtcコマンド)を使用することをお勧めします。 tcは少々わかりにくく文書化されていないので、FireQoSを使ってQoSを設定し、リアルタイムデータを監視するためにnetdataを使います。
詳しくは、こちらをご覧ください。 https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers