เป็นไปได้ที่จะถ่ายโอนคำขอ HTTP ทั้งหมดโดย apache? ฉันต้องติดตามส่วนหัว HTTP ทั้งหมดของคำขอที่มาถึง ทำอย่างไร
เป็นไปได้ที่จะถ่ายโอนคำขอ HTTP ทั้งหมดโดย apache? ฉันต้องติดตามส่วนหัว HTTP ทั้งหมดของคำขอที่มาถึง ทำอย่างไร
คำตอบ:
ฉันคิดว่าสิ่งที่คุณต้องการแทน Apache อาจเป็นตัววิเคราะห์แพ็คเก็ตหรือที่เรียกว่าแพ็คเก็ตดมกลิ่น สองที่ได้รับความนิยมมากที่สุดน่าจะเป็นTCPDumpและWiresharkซึ่งทั้งสองอย่างนี้ฟรีและมีเวอร์ชั่นสำหรับระบบปฏิบัติการ Windows และ * nix สิ่งเหล่านี้จะแสดงปริมาณการใช้งานทั้งหมดที่เข้ามาในอินเทอร์เฟซไม่ใช่เฉพาะสิ่งที่ Apache เห็น แต่คุณสามารถใช้ตัวกรองเพื่อ จำกัด พอร์ตที่ระบุเช่น 80 สำหรับ http
tcpdump:
คำสั่งต่อไปนี้เรียกใช้จากเซิร์ฟเวอร์จะแสดงแพ็กเก็ตทั้งหมดที่คุณกำหนดสำหรับพอร์ต 80:
sudo tcpdump -s 0 -X 'tcp dst port 80'
capital X switch ทิ้งส่วนของข้อมูลเป็น hex และ ASCII s สลับกับ 0 หมายถึงการรับแพ็คเก็ตทั้งหมด 'tcp dst port 80' หมายถึงการกรองและแสดงเฉพาะแพ็กเก็ตที่กำหนดไว้สำหรับพอร์ต 80 ในส่วนหัว tcp
Wireshark:
สำหรับผู้ใช้ที่เป็นมิตรมากขึ้นถ้าคุณมี GUI ที่ใช้งานให้พิจารณา wireshark (รู้จักกันอย่างเป็นทางการว่า ethereal)
-A
สำหรับข้อความเท่านั้น (ไม่มีการถ่ายโอนฐานสิบหก):sudo tcpdump -A -s 0 'tcp dst port 80'
อาจจะทิ้งคุกกี้ ? มิฉะนั้น - ดูที่mod_dumpio
การดักจับแพ็คเก็ตขั้นพื้นฐานเป็นเรื่องง่ายด้วย ngrep ไฮบริดของ tcpdump และ grep ในบางสถานการณ์หากคุณต้องการดูว่าเว็บเบราว์เซอร์สื่อสารกับเว็บเซิร์ฟเวอร์อย่างไรและตรวจสอบส่วนหัว HTTP
ในตัวอย่างนี้ให้เรียกใช้ ngrep บนเว็บเซิร์ฟเวอร์ดังนี้:
$ ngrep port 80
คุณสามารถเลือกที่จะกรองคำขอ http ไปยังคำขอ "GET /" ไปยังพอร์ต 80 ได้โดย:
$ ngrep -q '^GET .* HTTP/1.[01]'
ฝั่งไคลเอ็นต์มีเครื่องมือที่มีประโยชน์ชื่อ Tamper Data เป็นส่วนเสริมของ Firefox ซึ่งให้อำนาจในการดูบันทึกและปรับเปลี่ยนคำขอ HTTP ขาออก
คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่
แทนที่จะใช้ tcpdump หรือ wireshark ให้ใช้ tcpflow เป็นการแทนที่สำหรับ tcpdump แต่สร้างไฟล์สำหรับแต่ละด้านของการเชื่อมต่อดังนั้นคุณไม่ต้องพยายามถอดรหัสสตรีมด้วยตัวเอง
Apache มีฟังก์ชั่นในตัว; เพียงเพิ่มระดับการบันทึกเป็นtrace7
หรือtrace8
:
LogLevel trace8
หมายเหตุว่านี้จะถ่ายโอนข้อมูลจำนวนมากของข้อมูล คุณได้รับการเตือน