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.