네트워크 인터페이스에서 온-더-플라이 모니터링 HTTP 요청?


79

디버깅 목적으로 네트워크 인터페이스에서 http 요청을 모니터링하고 싶습니다.

순진한 tcpdump명령 줄을 사용 하면 너무 낮은 수준의 정보를 얻을 수 있으며 필요한 정보가 명확하게 표현되지 않습니다.

tcpdump파일을 통해 트래픽을 덤프 한 다음 사용 wireshark하면 즉시 처리 할 수 ​​없다는 단점이 있습니다.

다음과 같은 도구 사용법을 상상해보십시오.

$ monitorhttp -ieth0 --only-get --just-urls
2011-01-23 20:00:01 GET http://foo.example.org/blah.js
2011-01-23 20:03:01 GET http://foo.example.org/bar.html
...

Linux를 사용하고 있습니다.


답변:


100

시도 tcpflow:

tcpflow -p -c -i eth0 port 80 | grep -oE '(GET|POST|HEAD) .* HTTP/1.[01]|Host: .*'

출력은 다음과 같습니다

GET /search?q=stack+exchange&btnI=I%27m+Feeling+Lucky HTTP/1.1
Host: www.google.com

grep 문에 추가 HTTP 메소드를 추가 sed하고 두 줄을 전체 URL로 결합하는 데 사용할 수 있습니다.


장점은 tcpflowUbuntu 10.04의 기본 리포지토리에서 이미 사용 가능하다는 것입니다 (단지, httpry는 아닙니다). 패키지 정보는 IP 조각이 올바르게 기록되지 않았 음을 나타냅니다.이 유스 케이스에 중요하다면 알 수 없습니다. 아마 저 스니퍼가 더 잘 처리 할 수 ​​있습니다.
maxschlepzig

URL을 잡고 있기 때문에 중요하지 않은 것 같습니다. Tcpflow는 인터페이스에서 수신 한 순서대로 패킷을 표시합니다. 따라서 파일 내용을 캡처하려고하면 패킷이 잘못 도착하여 손상된 파일이 생성 될 수 있습니다. 그러나 귀하의 유스 케이스는 이것이 당신에게 도움이 될 것이라고 생각하는 질문에 나열되어 있습니다. 또한 grep을 넓히거나 (-o 제거) 정렬을 위해 더 많은 패킷 데이터를 볼 수 있습니다.
bahamat

@bahamat "tcpflow"가 https URL과 작동 할 수 있습니까?
Maulik patel

점점 더 그렇습니다. 과거에는 흐름에 사용 된 키에 액세스 할 수 있으면 해당 키에 사용 된 트래픽을 해독 할 수있을 정도로 SSL이 약했습니다. 오늘날 대부분의 사이트는 완벽한 비밀을 유지하고 임시 키를 협상합니다. 오늘날 가장 좋은 옵션은 소위 "범프 인 더 와이어"투명 프록시입니다.
bahamat

1
wifi를 사용하여 탐색하는 동안 아무것도 얻지 못함 : sudo tcpflow -p -c -i wlo2 port 80 | grep -oE '(GET | POST | HEAD). * HTTP / 1. [01] | 호스트 :. *'
ses

23

httpry 또는 Justniffer 를 사용 하여 그렇게 할 수 있습니다 .

httpry Fedora 패키지 리포지토리를 통해 사용할 수 있습니다.

호출 예 :

# httpry -i em1

(여기서 em1네트워크 인터페이스 이름을 나타냄)

출력 예 :

2013-09-30 21:35:20    192.168.0.1     198.252.206.16    >    POST    unix.stackexchange.com    /posts/6281/editor-heartbeat/edit    HTTP/1.1
2013-09-30 21:35:20    198.252.206.16  192.168.0.1       < HTTP/1.1   200    OK
2013-09-30 21:35:49    192.168.0.1     198.252.206.16    >    POST    unix.stackexchange.com    /posts/validate-body                 HTTP/1.1
2013-09-30 21:35:49    198.252.206.16  192.168.0.1       < HTTP/1.1   200    OK
2013-09-30 21:33:33    192.168.0.1      92.197.129.26    >    GET     cdn4.spiegel.de    /images/image-551203-breitwandaufmacher-fgoe.jpg    HTTP/1.1

(출력이 약간 단축되었습니다)


요청 또는 응답의 헤더 또는 본문을 표시하려면 어떻게해야합니까?
Mohammed Noureldin

sudo httpry -i wlo2 (wlo2는 wifi 장치 이름으로 표시됨)
ses

7

나는 https 에서도 작동해야한다는 추가 요구 사항과 비슷한 것을 찾고있었습니다 .

pcap 기반 도구와 같은 tcpflow httpry urlsnarf다른 tcpdump kung fu 는 http에서는 잘 작동하지만 안전한 요청에는 운이 없습니다.

나는 함께했다 urldump 주위에 작은 래퍼입니다, mitmproxy .
iptables트래픽을 프록시로 리디렉션하는 데 사용되므로 투명하게 작동합니다.

$ sudo urldump   
http://docs.mitmproxy.org/en/stable/certinstall.html
http://docs.mitmproxy.org/en/stable/_static/js/modernizr.min.js
https://media.readthedocs.org/css/sphinx_rtd_theme.css
https://media.readthedocs.org/css/readthedocs-doc-embed.css
https://media.readthedocs.org/javascript/readthedocs-doc-embed.js
...

자세한 내용은 README 를 참조하십시오 .


1

Wireshark 가 원하는 것을 할 수 있다고 생각 합니다.

장점은 매우 강력하며 apt-get을 통해 설치할 수 있으며 GUI와 함께 제공됩니다.

그러나 필터 시스템은 복잡하지만 튜토리얼이 내장되어 있으며 트래픽에 대한 실시간 또는 시작 / 중지 개요를 제공합니다.

'http'라는 단어를 필터에 입력하면 찾고있는 내용 (예 : 사용자가 생성 한 주요 트래픽)을 얻을 수 있습니다.


이것이 다운 보트 된 이유를 알고 싶습니다. Wireshark는 인터페이스를 즉시 읽고 http 트래픽으로 필터링 할 수 있습니다.
Kevin M

@ Kevin M, 글쎄, 난 당신의 대답을 downvote하지 않았습니다. 그러나 공정하게 대답하는 것은 약간 불완전하고 주제가 아닙니다. 1) 정확히 어떻게 wireshark를 사용 해야하는지, 즉 필터를 사용 해야하는지, 정확한 필터 표현인지에 대한 세부 사항이 누락되었습니다 .2) 질문에 스케치 된 것처럼 명령 줄 사용을 허용하지 않습니다. GUI 접근 방식의 경우 기본보기에는 GET 요청이 표시되는데, 여기서 도메인 이름이 나란히 표시되지 않습니다. 스케치 된 사용 사례에는 적합하지 않습니다.
maxschlepzig

내 말은 : s / 당신의 답변 / Phobia의 답변 /
maxschlepzig

1

또 다른 좋은 옵션은 nethogs입니다.

페도라에서는 핵심 패키지 중 하나를 사용할 수 있으며 센토에서는 epel repo를 통해 얻을 수 있습니다.


1

dsniff 패키지의 urlsnarf일부인 명령 행 프로그램 도 있습니다 (예 : Fedora 19와 함께 패키지화 됨).

예:

# urlsnarf -i em1
urlsnarf: listening on em1 [tcp port 80 or port 8080 or port 3128]
jhost - - [29/May/2014:10:25:09 +0200] "GET http://unix.stackexchange.com/questions HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/css/style-V5-2-2.css HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/jscfg/http/global-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/javascript-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/interface-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/netmind-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/favicon.ico HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "POST http://ocsp.thawte.com/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "POST http://ocsp.thawte.com/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
[..]

(SE를 먼저 탐색 한 다음 spiegel.de를 탐색 할 때)

제한 사항 : dsnarf는 IPv6을 지원 하지 않습니다 . Fedora 19에서 0.17로이 버그 보고서를 재현 할 수 있습니다. 또한 우분투 트러스티 atm (루시드에서 잘 작동 함)에서 고장난 것 같습니다.

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