나는 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