나는 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"
참고 : 헤더 만 포함하고 헤더가 포함 된 패킷 만 필터링하지 않으므로 여전히 일부 데이터를 얻을 수 있지만 데이터 양은 그렇지 않은 것보다 적어야합니다.
답변
사실 당신은 할 수 있습니다! 모든 이전 답변은 매우 가깝습니다. -O
HTTP를 제외한 모든 정보를 필터링하는 플래그 만 있으면 됩니다.
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 정보 만 볼 수 있습니다.