tshark에서 Http 헤더 만 어떻게 반환합니까? 패킷을 스니핑하고 http 헤더에만 관심이 있습니다 (바람직하게는

나는 tshark를 사용하여 패킷을 스니핑하고 http 헤더에만 관심이 있습니다 (바람직하게는 보낸 형식이지만 얻을 수있는 것을 취할 것입니다).

나는 다음을 사용하려고 시도했다.

tshark tcp port 80 or tcp port 443 -V -R "http"

그것은 나에게 헤더뿐만 아니라 내용 (파싱하기 위해 많은 양의 쓰레기로 원하지 않음)을 주었다. 나는 정말로 헤더 만 신경 쓰며, 데이터를 직접 파싱하는 것 외에는 쉽게 얻을 수있는 방법이 있습니까?

편집 : 여러 패킷의 요청을 추적 할 수 있도록 호스트 / 포트도 관리해야합니다.



답변

특정 HTTP 헤더 표시 필터를 사용하여 요청 헤더 만, 응답 헤더 만 또는 둘 다 표시 할 수 있습니다.

요청 헤더의 경우 :

tshark tcp port 80 or tcp port 443 -V -R "http.request"

응답 헤더 만 :

tshark tcp port 80 or tcp port 443 -V -R "http.response"

그리고 요청 및 응답 헤더 모두에 대해 :

tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response"

참고 : 헤더 만 포함하고 헤더가 포함 된 패킷 만 필터링하지 않으므로 여전히 일부 데이터를 얻을 수 있지만 데이터 양은 그렇지 않은 것보다 적어야합니다.


답변

사실 당신은 할 수 있습니다! 모든 이전 답변은 매우 가깝습니다. -OHTTP를 제외한 모든 정보를 필터링하는 플래그 만 있으면 됩니다.

tshark -O http -R http.request tcp port 80 or tcp port 443

답변

@heavyd의 답변을 결합하고 SO 기사 에서 얻은 sed 필터를 통해 실행할 수있었습니다. (FJ의 답변)이 아기를 요리하기 위해 헤더를 필터링합니다. 🙂

sudo tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response" | sed -rn '/Hypertext Transfer Protocol/{:a;N;/    \\r\\n:?/{/.*/p;d};ba}' >> /tmp/filtered

답변

쉽게 읽을 수있는 나만의 필터 버전 :

tshark -V -R "tcp.port ==80 && (http.request || http.response)" | awk "/Hypertext Transfer Protocol/,/Frame/ { print };/Transmission Control Protocol/{print};/Internet Protocol/{print}" | grep -v Frame

이 방법으로 모든 하위 수준 항목과 완전한 HTTP 정보가없는 관련 IP 및 TCP 정보 만 볼 수 있습니다.