tcpdump
(설정된 시간 내에) 나가고 들어오는 UDP 패킷의 수를 계산할 수 있습니까 ?
저는 이에 대한 경험이 많지 않으므로 tcpdump
이 작업을 수행하는 방법에 대한 제안이 매우 도움이 될 것입니다. timeout
일정 시간이 지난 후 프로세스를 중지하고 싶다면 권장 사항이 좋다는 내용 을 읽었 으므로 tcpdump
시간이 지나면 중지할 생각입니다.
하지만 나가고 들어오는 패킷 수를 계산하고 UDP 패킷만 필터링하려면 어떻게 해야 합니까?
답변1
나는 tcpdump
이것을 위해 (또는)을 사용하지 않을 것입니다. 대신 일정 기간 동안의 패킷 수를 계산 tshark
하는 데 사용합니다.iptables
# Prepare two sets of counters and set up the rules
#
iptables -N udp_in
iptables -N udp_out
iptables -A udp_in
iptables -A udp_out
iptables -A OUTPUT --protocol udp -j udp_out
iptables -A INPUT --protocol udp -j udp_in
생리가 시작되면 다음과 같이 카운터를 재설정할 수 있습니다.
# Reset the counters
#
iptables -Z udp_in
iptables -Z udp_out
생리 기간이 끝나면 아래와 같이 카운터를 읽을 수 있습니다.
# Look at the counters
#
packets_in=$(iptables -nvL udp_in | awk '/all/{print $1}')
packets_out=$(iptables -nvL udp_out | awk '/all/{print $1}')
echo "in=$packets_in, out=$packets_out"
카운터를 읽고 Z
동시에 플래그를 제공하여 즉시 재설정할 수 있습니다. 예를 들어
packets_in=$(iptables -nvLZ udp_in | awk '/all/{print $1}')
조각들을 하나로 모으고 필요한 추가 iptables 체인(위 참조)을 생성했다고 가정하면 다음과 같은 것을 사용할 수 있습니다.
# Reset the counters
#
iptables -Z udp_in
iptables -Z udp_out
# Wait 10 seconds
#
period=10
sleep "$period"
# Look at the counters
#
packets_in=$(iptables -nvL udp_in | awk '/all/{print $1}')
packets_out=$(iptables -nvL udp_out | awk '/all/{print $1}')
# Report the results
#
echo "During the last $period seconds we saw $packets_in UDP packet(s) in and $packets_out UDP packet(s) out."
답변2
man tcpdump
필요한 정보를 제공하세요. tcpdump 웹 페이지는 또한 다음을 제공합니다.맨페이지.
설명에는 tcpdump
패킷 캡처가 끝나면 캡처된 패킷 수, 필터에서 수신한 패킷 수, 커널에서 삭제한 패킷 수를 보고한다고 나와 있습니다.
필터링(즉, 특정 유형의 패킷만 찾는 방법)은 훨씬 더 어려울 수 있지만 예제 섹션에서는 필요한 필터만 udp
예제에 적용할 수 있다는 충분한 단서를 제공해야 합니다.
따라서 올바른 필터를 찾은 후에는 kill 을 사용하여 정의한 시간 동안 이를 실행하면 tcpdump
패킷 수를 얻을 수 있습니다.timeout
tcpdump
timeout 20 tcpdump udp
그러면 udp에 대한 tcpdump 필터링이 실행되고 20초 후에 tcpdump가 종료됩니다.