tcpdump를 사용하여 HTTP 요청, 응답 헤더 및 응답 본문을 가져올 수 있습니까?


83

tcpdump아래 명령을 실행하여 HTTP 데이터를 가져 오는 데 사용 하고 있습니다.

sudo tcpdump -A -s 1492 dst port 80

위 명령의 결과 :

  1. 헤더, 요청 및 응답 헤더라고 생각합니다.
  2. 읽을 수없는 데이터입니다.
  3. URL GET /modules/mod_news_pro_gk1/cache/stories.ilbalad.ajayeb.strange-tractor.jpg.

더 명확한 결과가 필요합니다 (예 : 읽기 가능한 요청> 응답 헤더> 응답 본문 등). 결과를 필터링하려면 어떻게해야합니까?


3
HTTP 응답은 압축되거나 청크 될 수 있으며 원시 텍스트를 가져 오는 것은 실제로 필요한 작업을 수행하지 못할 수 있습니다 ( "읽을 수없는 데이터"). 당신은 당신이하고 싶은 것과 당신의 환경이 허용하는 것을 더 완벽하게 설명해야 할 것입니다.
— EricLaw

tcpdumpAndroid OS에서 어떻게 실행 했 습니까? 어떻게 든 앱에 명령을 삽입하거나 Android 휴대폰에 연결된 PC에서 실행합니까?
— FAIZAL

1
@faizal-tcpdump 바이너리 파일을 기기에 설치 한 다음 기기 자체에서 실행할 수 있습니다. Android 기기에 tcpdump를 설치하는 방법은 다음 링크를 사용하세요. gadgetcat.wordpress.com/2011/09/11/tcpdump -on-android
— kimo 2014-07-25

답변:


206

HTTP GET 및 HTTP POST에 대한 tcpdump 필터가 있습니다 (또는 둘 다 메시지 본문에 대해).

  • man tcpdump | less -Ip examples몇 가지 예를 보려면 실행

  • 다음은 HTTP GET을위한 tcpdump를 필터입니다 ( GET= 0x47, 0x45, 0x54, 0x20) :

    sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
    
  • 다음은 HTTP POST에 대한 tcpdump를 필터입니다 ( POST= 0x50, 0x4f, 0x53, 0x54) :

    sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
    
  • 요청 및 응답 헤더와 메시지 본문 ( 소스 )을 포함한 HTTP 트래픽 모니터링 :

    tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
    tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
    

TCP 헤더의 비트 트위들 링에 대한 자세한 내용은 String-Matching Capture Filter Generator (Sake Blok의 설명 링크)를 참조하십시오 .


13
나는 몰랐다 less -Ip-시간 절약이 무엇인지
— n611x007 2013

11
tcpdump 호출에 대한 설명을보고 싶습니다
— tmc

1
HTTP GET 및 POST에 대한 필터를 함께 사용할 수 있습니까?
— Jim Ho

4
이것은 마법입니다. 누군가 어떻게 작동하는지 설명해주세요.
— sdkks jul.


34

특정 TCP 연결에 대한 전체 요청과 응답을 매우 쉽게 볼 수있는 "Follow TCP Stream"옵션이있는 Wireshark를 사용하는 것이 좋습니다 . 명령 줄을 사용하려는 경우 TCP 스트림의 콘텐츠를 캡처하고 재구성하는 전용 도구 인 tcpflow 를 사용해 볼 수 있습니다 .

다른 옵션은 EricLaw가 제안한대로 Charles 또는 Fiddler 와 같은 HTTP 디버깅 프록시를 사용하는 것 입니다. 이는 HTTP에 대한 특정 지원을 통해 다양한 종류의 인코딩을보다 쉽게 ​​처리 할 수 ​​있도록하는 장점과이를 재생하기위한 요청 저장 또는 요청 편집과 같은 기타 기능이 있습니다.

Firebug (Firefox), Web Inspector (Safari, Chrome 및 기타 WebKit 기반 브라우저) 또는 Opera Dragonfly 와 같은 도구를 사용할 수도 있습니다.이 도구는 모두 요청 및 응답 헤더와 본문을 볼 수있는 기능을 제공합니다 (대부분의 경우 정확한 바이트 스트림을 볼 수는 없지만 브라우저가 요청을 구문 분석하는 방법).

마지막으로 telnet, netcat 또는 socat 과 같은 것을 사용하여 포트 80에 연결하고 수동으로 요청을 입력하거나 htty 와 같은 도구를 사용 하여 요청을 쉽게 구성하고 응답을 검사하는 데 도움이 되는 도구를 사용 하여 언제든지 요청을 직접 구성 할 수 있습니다.


2
귀하의 답변 Brain에 감사드립니다. 나는 안드로이드 OS에서 tcpdump를 사용하고 있습니다 :) 따라서 tcpdump를 사용하여 제한됩니다. 헤더와 링크 요청을 얻을 수 있는지 확인하십시오. 본문, 도움, Perl 변환 스크립트 또는 이와 유사한 것을 가져와야합니까?
— kimo

11
@kimo이 경우를 사용 tcpdump -w outfile ...하여 원시 패킷을 파일로 덤프 한 다음 컴퓨터에 복사하고 Wireshark를 사용하여 분석하는 것이 좋습니다. Wireshark는 패킷 덤프를 열고, TCP 스트림을 디코딩하고, HTTP 콘텐츠를 압축 해제 할 수 있습니다 (읽을 수없는 이유는 압축 되었기 때문이라고 가정합니다).
— Brian Campbell

감사합니다 Brian, 나는이 솔루션을 구현하려고 노력할 것입니다. 어쨌든 원하는 요청을 얻기 위해 데이터를 필터링해야하기 때문에 파일을 PC로 옮기는 것이 낫습니다. 안드로이드 시스템에서 수행하는 것이 쉽지 않습니다.
— kimo

브라이언 우리가 여기에서 말하려는 것이 있다고 생각합니다. Busy Box로 어떻게 이것을 foo 할 수 있습니까? Android 기기에서도 동일한 제약이 있습니다.
— James

1
@JamesAndino 예, Android 기기에서는를 사용한 tcpdump -w outfile다음 Wireshark가있는 컴퓨터에 복사하고 Wireshark를 사용하여 덤프를 보는 것이 좋습니다 .
— Brian Campbell

6

또 다른 선택이 있습니다 : Chaosreader

따라서 xml을 타사 응용 프로그램에 게시하는 응용 프로그램을 디버깅해야합니다. 나는 모든 노력을 다하는 훌륭하고 작은 펄 스크립트를 찾았습니다. tcpdump 출력 파일에 그냥 넣으면 모든 조작을 수행하고 필요한 모든 것을 출력합니다.

스크립트는 chaosreader0.94라고합니다. 참조 http://www.darknet.org.uk/2007/11/chaosreader-trace-tcpudp-sessions-from-tcpdump/를

그것은 치료처럼 작동했으며 다음을 수행했습니다.

tcpdump host www.blah.com -s 9000 -w outputfile; perl chaosreader0.94 outputfile
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.