Tcpdump로 ack 또는 syn 패킷을 캡처하는 방법은 무엇입니까?


48

필터 규칙을 사용하여 ack 또는 syn 패킷 만 캡처하려고합니다. 어떻게해야합니까?


개인적으로 나는 이것을하지 않을 것입니다. 모든 패킷을 캡처 한 다음 나중에 SYN 및 ACK 플래그를 필터링합니다. TCP 문제를 해결하는 경우 핸드 셰이크 나 ACK뿐만 아니라 거의 모든 대화를 보려고합니다. 실제 데이터 페이로드에 관심이 없다면로 패킷 크기를 제한 할 수 있습니다 tcpdump -s SIZE. TCP 헤더는 가변 길이 일 수 있으므로 캡처 -s 128는 가능한 모든 헤더와 약간의 데이터를 가져옵니다.
suprjami

4
TCP 문제를 해결하고 있지 않을 수 있습니다. 어쩌면 프로그램이 얼마나 번잡한지보고 싶어하고 아웃 바운드 연결을 계산하고 싶을 수도 있습니다. 나처럼 지금
Dan Pritts

답변:


81

PCAP 필터 구문 tcpdump를 위해 사용되는 와이어 샤크 캡처 필터에 정확히 같은 방식으로 작동합니다.

tcpdump를 사용하면 이와 같은 필터를 사용합니다.

tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"

tcpdump 매뉴얼 페이지를 확인 하고 tcpflags에주의를 기울이십시오.

캡처 및 표시 필터에 대한 Wireshark Wiki 섹션도 확인하십시오. 불행히도 두 유형의 필터는 완전히 다른 구문과 동일한 이름에 대해 다른 이름을 사용합니다.

캡처 필터 대신 디스플레이 필터를 원한다면 tcp.flags.ack 및 tcp.flags.syn을 결합한 표현식을 작성해야합니다. 캡처 필터에 대해 더 잘 알고 있으므로 직접 해결해야합니다.


1
나는 당신의 반응이 더 좋습니다. 노력한 것 같습니다. 당신을 위해 공감하십시오.
Ablue

4
이것은 좋은 참조를 가진 훌륭한 대답이지만,이 구문은 다른 플래그도 설정되어 있어도 SYN 또는 ACK 플래그가 설정된 패킷을 캡처합니다. 이것은 OP가 의도 한 것일 수도 아닐 수도 있습니다. TCP SYN 또는 ACK 패킷 만 원하는 경우 더 엄격한 필터에 대해서는 아래 답변을 참조하십시오. 건배.
JJC

14

@Zoredache의 대답은 훌륭하고 완전하지만 구문은 일반 "TCP SYN"또는 "TCP ACK"패킷이 아닌 패킷을 포함하여 TCP SYN 또는 TCP ACK 플래그가 설정된 패킷을 생성합니다. 또한 다른 플래그를 설정해야합니다. 이것은 귀하 (또는 미래 독자)가 의도 한 내용 일 수도 있고 아닐 수도 있습니다. 예를 들어,이 구문은 TCP SYN-ACK 패킷, TCP FIN-ACK 등도 캡처 합니다. TCP SYN 또는 TCP ACK 패킷 원하는 경우 (즉, 플래그 중 하나만 설정) 적절한 캡처 필터 구문은 다음과 같습니다.

'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'

동등하게 :

'tcp[13] == 2 or tcp[13] == 16'

건배!


9

나는 "synners"를 볼 수있는 스크립트를 만들었습니다. 이를 위해 초기 syn 패킷 (세 패킷 핸드 셰이크의 첫 번째 패킷) 만 고려합니다. 즉, syn = 1, ack = 0

while :; do
  date; 
  tcpdump -i eth1 -n -c 100 \
  'tcp[tcpflags] & (tcp-syn) != 0' and 
  'tcp[tcpflags] & (tcp-ack) == 0' 2> /dev/null \
  | awk '{ print $3}' \
  | sort | uniq -c | sort | tail -5;
  echo;
  sleep 1
done

5
좋은 예입니다. " 'tcp [tcpflags] & (tcp-syn)! = 0'및 'tcp [tcpflags] & (tcp-ack) == 0'"를 'tcp [tcpflags'로 바꾸면 tcpdump 캡처 필터를 더욱 단순화 할 수 있습니다. ] == tcp-syn '입니다. ACK가 설정된 패킷은 자동으로 제외됩니다. 건배!
JJC

9
tcpdump 'tcp[13] = 3'

http://danielmiessler.com/study/tcpdump/

많은, 진보 한, 많이 경과 한

패킷의 특정 부분을 기준으로 필터링하고 여러 조건을 그룹으로 결합 할 수도 있습니다. 전자는 예를 들어 SYNs 또는 RSTs 만 찾을 때 유용 하고 후자는 훨씬 고급 트래픽 격리를 위해 유용합니다 .

UAP RSF

[힌트 : TCP 플래그에 대한 아나그램 : 미숙련 공격자 Pester Real Security Folk]

메모 : ...

모든 긴급 ( URG) 패킷 표시 ...

tcpdump 'tcp[13] & 32 != 0'

ACKNOWLEDGE ( ACK) 패킷 모두 표시 ...

tcpdump 'tcp[13] & 16 != 0'

모든 PUSH ( PSH) 패킷 표시 ...

tcpdump 'tcp[13] & 8 != 0'

모든 재설정 ( RST) 패킷 표시 ...

tcpdump 'tcp[13] & 4 != 0'

모든 SYNCHRONIZE ( SYN) 패킷 표시 ...

tcpdump 'tcp[13] & 2 != 0'

FINISH ( FIN) 패킷을 모두 표시하십시오 ...

tcpdump 'tcp[13] & 1 != 0'

SYNCHRONIZE / ACKNOWLEDGE ( SYNACK) 패킷을 모두 표시하십시오 ...

tcpdump 'tcp[13] = 18'

[ 참고 :PSH, RST, SYN, 및 FIN플래그가 tcpdump와의 플래그 필드 출력에 표시됩니다. URGs와 ACKs가 표시되지만 플래그 필드가 아닌 출력의 다른 곳에 표시됩니다.]


2
Plagarism은 Stack Exchange에서 허용되지 않습니다 . 링크 된 사이트에서 컨텐츠를 복사했는지 확인하려면이 게시물을 편집하십시오. 감사합니다.
Chris S

4

SYN 패킷 만 가져오고 싶었고 다음 명령을 사용했습니다.

tcpdump -i eth7 'tcp[13] & 2 != 0'

이것은 바로 당신을 위해 작동합니다.


3
SYN, SYN-ACK 등을 포함하여 SYN 플래그가 설정된 모든 패킷을 캡처합니다. SYN 패킷 만 원하면 'tcp [13] == 2'를 대신 사용하십시오. 건배!
JJC

1

필터 나 인수없이 표시해야합니다.


귀하의 답변은 기술적으로 정확하지만 OP는 아마도 그의 질문에 "only"라는 단어를 포함 시키려고했을 것입니다. ;-) 건배!
JJC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.