การร้องขอ 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
...

ฉันใช้ลีนุกซ์


มีคำถามเดียวกันตอบไว้ในsuperuser.com/questions/67428/possible-to-catch-urls-in-linux
AlexD

คำตอบ:


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

คุณสามารถเพิ่มวิธี HTTP เพิ่มเติมให้กับคำสั่ง grep และใช้sedเพื่อรวมสองบรรทัดเข้ากับ URL แบบเต็ม


ข้อดีของtcpflowมันก็คือมันมีอยู่แล้วใน repositories เริ่มต้นใน Ubuntu 10.04 (justsniffer, httpry ไม่ได้) ข้อมูลแพ็กเกจระบุว่าชิ้นส่วน IP ไม่ได้รับการบันทึกอย่างถูกต้อง - ไม่รู้ว่าสิ่งนี้สำหรับกรณีการใช้งาน - บางที justsniffer สามารถจัดการได้ดีกว่า
maxschlepzig

เนื่องจากคุณเพิ่งคว้า URL มันจึงดูเหมือนว่ามันจะไม่สำคัญ Tcpflow จะแสดงแพ็กเก็ตตามลำดับที่ได้รับบนอินเทอร์เฟซ ดังนั้นหากคุณพยายามจับเนื้อหาของไฟล์คุณสามารถรับแพ็กเก็ตที่ไม่ตรงกับความต้องการและจะสร้างไฟล์ที่เสียหาย แต่กรณีการใช้งานของคุณอยู่ในคำถามฉันคิดว่านี่จะใช้งานได้สำหรับคุณ คุณยังสามารถขยาย grep ของคุณ (หรือลบ -o) เพื่อดูข้อมูลแพ็กเก็ตเพิ่มเติมสำหรับการเรียงลำดับหรืออะไรก็ได้ในภายหลัง
bahamat

@bahamat "tcpflow" สามารถทำงานกับ https URL ได้หรือไม่
Maulik Patel

มากขึ้นคำตอบคือไม่ ในอดีต SSL มีความอ่อนแอพอที่หากคุณมีการเข้าถึงคีย์ที่ใช้สำหรับโฟลว์คุณสามารถถอดรหัสการรับส่งข้อมูลใด ๆ ที่ใช้กับคีย์นั้น วันนี้ไซต์ส่วนใหญ่จะใช้การส่งต่อความลับที่สมบูรณ์แบบและเจรจาคีย์ชั่วคราว ตัวเลือกที่ดีที่สุดในวันนี้คือพร็อกซีแบบโปร่งใสที่เรียกว่า "bump in the wire"
บาฮามา

1
ไม่มีอะไรในขณะที่ท่องเว็บโดยใช้ wifi: sudo tcpflow -p -c -i wlo2 port 80 | grep -oE '(GET | POST | HEAD). * HTTP / 1. [01] | Host:. *'
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

@ เควินเอ็มดีฉันไม่ได้ลงคะแนนคำตอบของคุณ แต่เพื่อความยุติธรรมคำตอบของคุณนั้นค่อนข้างไม่สมบูรณ์และไม่อยู่ในหัวข้อ 1) มันขาดรายละเอียดว่าควรใช้ wireshark อย่างไรเช่นควรใช้ตัวกรองนิพจน์ตัวกรองที่แน่นอน ฯลฯ 2) ไม่อนุญาตให้ใช้บรรทัดคำสั่งเช่นร่างในคำถาม - แม้ว่าฉันจะไม่เป็นไร วิธีการของ GUI มุมมองเริ่มต้นจะแสดงคำขอ GET โดยที่ชื่อโดเมนไม่ได้แสดงแบบเคียงข้างกัน - ซึ่งไม่สะดวกสำหรับกรณีการใช้งานแบบร่าง
maxschlepzig

ฉันหมายถึง: s / คำตอบของคุณ / คำตอบของ Phobia /
maxschlepzig

1

อีกตัวเลือกที่ดีอาจเป็นnethogs

ใน fedora มีให้บริการในแพ็คเกจหลักและใน centos คุณสามารถรับได้ผ่าน epo repo


1

นอกจากนี้ยังมีโปรแกรมบรรทัดคำสั่งurlsnarfซึ่งเป็นส่วนหนึ่งของแพ็คเกจdsniff (ซึ่งบรรจุด้วยเช่น 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 ฉันสามารถสร้างรายงานข้อผิดพลาดนี้ขึ้นอีกครั้งด้วย 0.17 ใน Fedora 19 และดูเหมือนว่ามันจะแตกภายใต้ Ubuntu ที่เชื่อถือได้ atm (ใช้งานได้ดีภายใต้ lucid)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.