私はtcpdump
次のようなフィルタを使って実行しています。
not (
(host 1.165.155.169 and port 4444)
or (host 1.168.68.116 and port 4444)
or (host 1.173.192.253 and port 4444)
or (host 1.174.97.43 and port 4444)
:
or (host 161.138.104.1 and port 58339)
)
私の問題は、tcpdump
開始にO(n²)時間がかかり、何百もの行があることです。起動すると素晴らしい動作します。初期化のみ O(n²) で正常に処理されないようです。
tcpdump
初期化をO(n)または少なくともO(n log n)に最適化する方法はありますか?
<ip,port> テーブルがあります。
編集する
あなたの考えに感謝します。これまで、彼らはすべてO(n²)を提供しました。
私があなたのアイデアをテストするのを待つ理由はありません。テスト用のスクリプトは次のとおりです。
#!/bin/bash
# Make some network noise
(sudo nice nice ping -f localhost >/dev/null) &
noisepid=$!
filter() {
# $1 = How many entries?
perl -e '
$pre = "not (";
$post = ")";
$join = " and ";
sub hostport {
$host = sprintf "%d.%d.%d.%d", rand()*255,rand()*255,rand()*255,rand()*255;
$port = sprintf "%d", rand()*65535;
return "(host $host and port $port)";
}
print $pre, join($join,map { hostport() } 1..shift), $post;
' $1
}
export -f filter
seq 400 | parallel --joblog my.log 'sudo tcpdump -ni any "`filter {}`"|read a'
kill -9 $noisepid
# field - https://codeberg.org/tange/tangetools/src/branch/master/field
# plotpipe - https://codeberg.org/tange/tangetools/src/branch/master/plotpipe
field 14,4 < my.log | sort -n | plotpipe
tcpdump -F file
より高速ですが、まだO(n²)です。
編集2:
他のサーバーで再描画されたグラフ(たとえば、前のグラフと数字を比較できません)tcpdump
とtcpdump -O
-O
状況をさらに悪化させることは明らかです。
答え1
これはバグのように見えます。提出しましたhttps://github.com/the-tcpdump-group/libpcap/issues/1255
解決策が見つかったら、答えを投稿してください。
答え2
特定のIPとポートを使用できます。
はい
sudo tcpdump -n src 000.00.0.255 and tcp port 80 #You only see a packet
ipとポートを交換する必要があります
sudo tcpdump -n src 000.00.0.255 and tcp port 80 > myipandport.txt #If you need to save the information