2017-11-15 1 views
1

tcp 페이로드에서 'GE'를 읽습니다. 기본적으로 필터를 짧게 유지하기 위해 GET 키워드를 갖는 패킷을 얻는 'GE'만 사용하여 준비하십시오. 비트 쉬프트와TCPDUM 비트 마스킹

페라 필터

잘 작동 "tcpdump을 -r tcpdump.pcap -nta '의 TCP [((TCP [12] >> 4) * 4) 2] = 0x4745'"

하지만 난 확실하지 않다 왜 아래 하나

tcpdump를 작동하지 -r file.pcap -nta '의 TCP [((TCP [12] &의 0xF0 = 0) * 4!) : 2] = 0x4745'

누군가가 문제를 알릴 수 있다면 큰 도움이됩니다. 감사.

답변

0

오프셋 12의 낮은 니블을 마스킹하고 높은 니블을 유지하기 때문에 두 번째 것이 작동하지 않습니다 ... 올바른 것이지만 실제로 그 값을 캡처하지는 않습니다.

효과적으로, 당신은이 말을했다 : 참 또는 거짓으로 1 또는 0를 생성합니다

(tcp[12] & 0xf0 != 0) 

. 다음으로 4를 곱하면 ... TCP 헤더 길이가 항상 0보다 커야하므로 항상 작동하지만 TCP 헤더의 오프셋 4에서 "GE"문자를 찾습니다. 순서 번호의 선두

여전히 0xf0 마스크를 사용할 수 있지만 여전히 나누거나 이동해야합니다. 예를 들어 I 시프트 활용하고

(tcp[12] & 0xf0 >> 2) 

공지 2 비트 좌측 시프트 (shift)하는 것과 동일하다 4 ... 4 곱한 곱하지 않도록한다. 일반적으로 12 번째 바이트는 4 비트 오프셋으로 이동하므로 단계를 저장합니다.