คำตอบ:
ฉันไม่เห็นวิธีการ PID ไม่ได้เชื่อมต่อกับสายไฟ (โดยทั่วไปพูด) รวมทั้ง Wireshark ช่วยให้คุณดูสิ่งที่อยู่บนสายซึ่งอาจเป็นไปได้ว่าเครื่องทั้งหมดที่สื่อสารผ่านสายไฟ รหัสกระบวนการจะไม่ซ้ำกันในเครื่องต่างๆอย่างไรก็ตาม
ในกรณีที่คุณกำลังมองหาวิธีอื่นและสภาพแวดล้อมที่คุณใช้คือ Windows Network Monitor 3.3 ของ Microsoft ก็เป็นตัวเลือกที่ดี มีคอลัมน์ชื่อกระบวนการ คุณสามารถเพิ่มลงในตัวกรองได้อย่างง่ายดายโดยใช้เมนูบริบทและใช้ตัวกรอง .. ตามปกติ GUI นั้นใช้งานง่ายมาก ...
คุณสามารถจับคู่หมายเลขพอร์ตจาก wirehark ถึงหมายเลขพอร์ตจากเช่นnetstatซึ่งจะบอกคุณถึง PID ของกระบวนการที่ฟังบนพอร์ตนั้น
ใช้ Microsoft Message Analyzer v1.4
ไปที่ ProcessId จากตัวเลือกฟิลด์
Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId
คลิกขวาและเพิ่มเป็นคอลัมน์
ใน Windows มีรุ่นทดลองที่ทำเช่นนี้ตามที่อธิบายไว้ในรายชื่ออีเมลกรองตามชื่อกระบวนการในระบบ
นี่เป็นสิ่งสำคัญที่จะสามารถตรวจสอบได้ในกรณีที่กระบวนการบางอย่างพยายามเชื่อมต่อและดูเหมือนว่าไม่มีวิธีใดที่สะดวกในการทำเช่นนี้บน Linux อย่างไรก็ตามสามารถแก้ปัญหาได้หลายวิธีดังนั้นฉันจึงรู้สึกว่าควรค่าแก่การกล่าวถึง
มีโปรแกรมที่เรียกว่าnonetซึ่งอนุญาตให้เรียกใช้โปรแกรมที่ไม่มีการเข้าถึงอินเทอร์เน็ต (ฉันมีโปรแกรมเรียกใช้งานโปรแกรมส่วนใหญ่ในระบบของฉันที่ตั้งค่าไว้) ใช้ setguid เพื่อรันกระบวนการในกลุ่ม nonet และตั้งค่ากฎiptablesเพื่อปฏิเสธการเชื่อมต่อทั้งหมดจากกลุ่มนี้
อัปเดต: ตอนนี้ฉันใช้ระบบที่ง่ายกว่าเดิมคุณสามารถกำหนดค่า iptables ที่อ่านได้ด้วย ferm และใช้โปรแกรมsg
เพื่อเรียกใช้โปรแกรมกับกลุ่มเฉพาะ นอกจากนี้ Iptables ยังกำหนดให้คุณเปลี่ยนเส้นทางการรับส่งข้อมูลเพื่อให้คุณสามารถกำหนดเส้นทางไปยังอินเทอร์เฟซแยกต่างหากหรือพร็อกซีในเครื่องบนพอร์ตที่ช่วยให้คุณสามารถกรองใน Wireshark หรือ LOG แพ็กเก็ตได้โดยตรงจาก iptables หากคุณไม่ต้องการปิดการใช้งานอินเทอร์เน็ตทั้งหมดในขณะที่คุณ กำลังตรวจสอบการจราจร
ไม่ซับซ้อนมากที่จะปรับให้รันโปรแกรมในกลุ่มและตัดทราฟฟิกอื่น ๆ ทั้งหมดด้วย iptables สำหรับอายุการดำเนินการจากนั้นคุณจะสามารถดักจับทราฟฟิกจากกระบวนการนี้เท่านั้น
ถ้าฉันเคยเขียนมันฉันจะโพสต์ลิงค์ที่นี่
ในหมายเหตุอื่นคุณสามารถเรียกใช้กระบวนการในเครื่องเสมือนและสูดดมอินเทอร์เฟซที่ถูกต้องเพื่อแยกการเชื่อมต่อที่สร้างขึ้น แต่นั่นจะเป็นวิธีที่ค่อนข้างด้อยกว่า ...
หากคุณต้องการติดตามแอปพลิเคชันที่ยังต้องเริ่มต้นก็เป็นไปได้อย่างแน่นอน:
docker run -t -i ubuntu /bin/bash
(เปลี่ยน "ubuntu" เป็น distro ที่คุณชื่นชอบซึ่งไม่จำเป็นต้องเหมือนกับในระบบจริงของคุณ)any
, wlan0
, eth0
... เลือกอินเตอร์เฟซเสมือนใหม่docker0
แทนคุณอาจมีข้อสงสัยเกี่ยวกับการใช้งานซอฟต์แวร์ของคุณในคอนเทนเนอร์ดังนั้นนี่คือคำตอบสำหรับคำถามที่คุณอาจต้องการถาม:
ในบางกรณีคุณไม่สามารถกรองตามรหัสกระบวนการได้ ตัวอย่างเช่นในกรณีของฉันฉันต้องสูดอากาศเข้าจากกระบวนการหนึ่ง แต่ฉันพบในเครื่องกำหนดเป้าหมายที่อยู่ IP เพิ่มตัวกรองip.dst==someip
และ voila มันจะใช้ไม่ได้ในทุกกรณี แต่สำหรับบางกรณีก็มีประโยชน์
การใช้งานstrace
เหมาะกับสถานการณ์นี้มากกว่า
strace -f -e trace=network -s 10000 -p <PID>;
ตัวเลือก-f
ในการติดตามกระบวนการแยกทั้งหมด-e trace=netwrok
เพื่อกรองเฉพาะการโทรระบบเครือข่ายและ-s
เพื่อแสดงความยาวสตริงสูงสุด 10,000 อักขระ
นอกจากนี้คุณยังสามารถติดตามการโทรบางสายเท่านั้นเช่นส่ง, รับ, อ่านการดำเนินการ
strace -f -e trace=send,recv,read -s 10000 -p <PID>;
คุณสามารถตรวจสอบหมายเลขพอร์ตด้วยตัวอย่างคำสั่งเหล่านี้บน Wireshark: -
tcp.port == 80
tcp.port == 14220