これについてはかなり広範囲に検索しましたが、実用的な例が見つからないようです。
私の目的は、特定のポートの TCP トラフィックを監視して、着信接続を確認し、それをテキスト ファイルに書き込むことです。問題は、クライアントが接続した時刻を秒単位で正確に表示するために、各行にタイムスタンプも必要になることです。
すでに netstat、nmap、tcptrack を試しましたが、タイムスタンプをサポートしているものはありません。
特定のローカル ポートを監視し、接続が確立されたときにファイルにテキストを書き込み、各行の日付を連結するだけで、Linux シェル スクリプトが機能する可能性があると考えていました。
私はこれで遊んでいました:
netstat -ano|grep 443|grep ESTABLISHED
これと同様に:
tcptrack -i eth0 port 443
しかし、接続がいつ行われるかを知る必要があるため、どちらも私のニーズに合いません。
何かご提案がありましたら、または正しい方向を指示していただければ幸いです。
ありがとう。 :)
答え1
編集: 何年も経った今でも、この回答に賛成票が集まっています。この回答はやめてください。回答するiptables
私の意見では、ここの方がはるかに優れています。
tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'
またはtcp-syn
、 のみ、または のみtcp-ack
(おそらくこれでしょう) など、必要なものに応じて選択します。
答え2
これには、Linux カーネルの iptables サポートを使用できます。利点は、適度に便利にするために追加のソフトウェアを必要としないことです。欠点は、セットアップにルート権限が必要であることです (ただし、特権ポートであるポート 443 について話していることを考えると、ほとんどのソリューションでルート権限が必要になる可能性があります)。
次のような iptables ルールを追加します。
sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "
(-I INPUT
お好みに合わせて調整してください。)
ルールがトリガーされると、カーネルによって syslog エントリが出力されます。たとえば、入力ルールの場合、ログ エントリは次のようになります。
12月5日 09:10:56 ホスト名カーネル: [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) のマニュアル ページを参照してください。
答え3
マイクロ秒の解像度
デフォルトでは、tcpダンプユーティリティはマイクロ秒単位の解像度で時間を報告します。例:
$ sudo tcpdump -i any port 443
次のような出力が表示されます。
12:08:14.028945 IP localhost.33255 > localhost.https: フラグ [S]、シーケンス 1828376761、win 43690、オプション [mss 65495、sackOK、TS val 108010971 ecr 0、nop、wscale 7]、長さ 0
12:08:14.028959 IP localhost.https > localhost.33255: フラグ [R.]、シーケンス 0、ack 1828376762、win 0、長さ 0
tcpdump オプションの完全なリストについては tcpdump(8) を参照してください。また、使用できるフィルターの完全な構文については pcap-filter(7) を参照してください。
答え4
他のマシンからの受信パケットと送信パケットを監視するためにもこれが必要になる場合があります。
tcpflow -i eth0 -c port 7891
(-i
ネットワークを指定するオプション、-c
コンソールにパケットを印刷するオプション)