단일 애플리케이션의 발신 HTTP 요청을 검사하는 방법은 무엇입니까?


70

내 응용 프로그램이 일부 서버로 HTTP 요청을 보내고 있으며 실제로 전송하는 데이터를보고 싶습니다. 내가보고 싶은 몇 가지 세부 사항 :

  • 요청 방법 (GET / POST / PUT 등)
  • 컨텐츠 타입

이것을 달성하는 가장 좋고 간단한 방법은 무엇입니까?


"요청 방법, 콘텐츠 유형, 본문 등" HTTP 특정 검사에 대해 이야기하고 있습니까? 우연히 HTTPS (보안)입니까?
gertvdijk

네, 그렇습니다. 그러나 브라우저로 전송되지 않습니다
megas

죄송합니다. HTTP 요청 일뿐입니다.
megas

3
좋아, 그럼 괜찮아 대화하는 서버 중 하나 입니까 아니면 작은 서버입니까? 그리고 다른 응용 프로그램이 해당 서버와 통신하고 있지 않습니까? 둘 다 그렇다면 Wireshark에 대한 대답은 내가 갈 것입니다. 작동 방식에 대해 알아보십시오. 그렇게 어렵지 않습니다.
gertvdijk

답변:


71

글쎄, 모든 tcpdump 팬들에게는 =)

루트로 모든 이러한 명령을 실행하십시오!

터미널에서 루트를 얻습니다.

sudo -i

RAW 패킷을 캡처하려면 ...

sudo tcpdump -i any -w /tmp/http.log &

이것은 모든 원시 패킷, 모든 포트, 모든 인터페이스에서 캡처하여 파일에 씁니다 /tmp/http.log.

응용 프로그램을 실행하십시오. HTTP (웹 브라우저)를 사용하는 다른 응용 프로그램을 실행하지 않으면 분명히 도움이됩니다.

죽이다 tcpdump

killall tcpdump

로그를 읽으려면 -A플래그를 사용 하여 출력을 파이프하십시오 less.

tcpdump -A -r /tmp/http.log | less

-A패킷에서 "페이로드"또는 ASCII 텍스트 밖으로 플래그 인쇄합니다. 출력을로 보내면 less페이지를 상하로 이동할 수 있습니다. 종료하려면을 less입력하십시오 Q.

Google에 갈 때 (원시 패킷으로) 다음을 볼 수 있습니다.

20:42:38.179759 IP ufbt.local.56852 > sea09s02-in-f3.1e100.net.www: Flags [P.], seq 1:587, ack 1, win 913, options [nop,nop,TS val 25523484 ecr 492333202], length 586
E..~.v@.@..q......!#...P.(.gS.c..............u..Xh.GET /generate_204 HTTP/1.1
Host: clients1.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34
Referer: http://www.google.com/
Accept: */*
Accept-Encoding: gzip, deflate, x-gzip, x-deflate
Accept-Charset: utf-8,*;q=0.5
Accept-Language: en-US, en-US; q=0.8, en; q=0.6
Cookie: PREF=ID=dd958d4544461998:FF=0:TM=1323842648:LM=1360205486:S=Fg_QCDsLMr4ZepIo; NID=67=OQJWjIDHG-B8r4EuM19F3g-nkaMcbvYwoY_CsOjzvYTOAxwqAos5kfzsk6Q14E70gIfJjHat8d8PuQIloB12BE-JuSHgsKHR2QSpgN12qSWoxeqhdcSQgzw5CHKtbR_a

tcpdump네트워크 인터페이스 지정에서 포트, 소스 및 대상 IP 주소에 이르기까지 데이터 수집을 세분화하는 긴 옵션 세트가 있습니다. 암호를 해독 할 수 없으므로 HTTPS에서는 작동하지 않습니다.

관심있는 것을 알고 나면 여러 가지 옵션을 사용하여 tcpdump관심있는 데이터 만 기록 할 수 있습니다 . 일반적인 전략은 먼저 모든 패킷을 기록하고 원시 데이터를 검토 한 다음 관심있는 패킷 만 캡처하는 것입니다.

유용한 플래그 (옵션) :

-i Specify an interface
-i eth0

tcp port xx
tcp port 80

dst 1.2.3.4
specify a destination ip address

tcpdump수집 한 데이터를 분석하고 사용 하는 방법에 대한 학습 곡선이 있습니다 . 추가로 읽으 려면 Daniel Miessler의 tcpdumpPrimer with Examples를 강력히 제안 합니다.


1
이것은 내 우분투 14.04에 아무것도 캡처하지 않습니다. 내 노트북은 Wi-Fi 라우터를 통해 인터넷에 연결됩니다. tcpdump 사용법에 차이가 있습니까? 내가 그것을 죽일 때, 그것은 단지 말한다. 0 packets captured 0 packets received by filter 0 packets dropped by kernel 그러나 tcpdump가 모니터링 할 때 Chrome 브라우저에서 많은 사이트를 열었습니다.
faizal

1
아아 기사가 도움이되었습니다. tcpdump -i any -w /tmp/http.log &일했다.
faizal

22

tcpflowUbuntu 공식 저장소에서 먼저 설치하십시오 .

sudo apt-get install tcpflow

그런 다음이 명령을 실행하여 표준 포트에서 모든 HTTP 요청을 검사하십시오.

sudo tcpflow -p -c port 80

1
결과를 어디에서 볼 수 있습니까? 감사합니다!
Gediminas

2
@Gediminas 당신은 터미널에서 출력을 볼 수 있습니다. HTTPS 트래픽은 표시되지 않습니다. httpvshttps.com
Vanni Totaro

1
요청을 보는 데 관심이 있고 모든 TCP 세부 정보 (syn, ack ...)를 처리 할 필요가없는 경우 tcpdump보다 훨씬 편리합니다.
herm

13

Wireshark 를 사용해 보는 것이 좋습니다.Wireshark 설치

Wireshark는 상당히 발전된 기술이므로 약간 익숙해 질 수 있습니다. 몇 년 동안 사용하지는 않았지만 기능이 너무 많지 않은 경우에도 여전히 완벽합니다.

Wireshark에 대한 정보 및 사용 방법 은 Wireshark 홈페이지 에서 찾을 수 있습니다 .


1
단일 프로세스에서는 작동하지 않습니다. 당신은 인터페이스의 모든 트래픽을 얻을 것이다 당신은 등 IP / 프로토콜하여 필터링해야합니다 와이어 샤크 - / PID 프로세스에 의해 필터
gertvdijk

그러나 wireshark 인터페이스를 사용하면 쉽게 수행 할 수 있습니다.
Panther

2
나는 wireshark를 전에 시험해 보았고 나에게는 너무 발전했다. 나는 또 다른 옵션을 찾고있다
megas

4
다른 옵션은 tcpdump입니다. tcpdump는 명령 행 도구이며, 작업을 쉽게 수행하지만 학습 곡선이 가파 릅니다. danielmiessler.com/study/tcpdump
Panther

1
@gertvdijk-당신이 원하는대로;) 기본 사항에 자유롭게 추가
Panther

5

SSL을 사용하더라도 깔끔한 출력을 제공하는 명령을 사용할 수도 있습니다.

sudo tcpdump dst port 80
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.