กรองตามกระบวนการ / PID ใน Wireshark


117

มีวิธีกรอง / ติดตามสตรีมTCP / SSLตาม ID กระบวนการโดยใช้Wiresharkหรือไม่


7
จากการเขียนนี้ Wireshark ยังไม่รองรับคุณสมบัตินี้ อย่างไรก็ตามคุณสามารถติดตามความคืบหน้า (ถ้ามี) ใน [ข้อผิดพลาด 1184] [1] [1]: bugs.wireshark.org/bugzilla/show_bug.cgi?id=1184
Christopher Maynard

คำตอบ:


58

ฉันไม่เห็นวิธีการ PID ไม่ได้เชื่อมต่อกับสายไฟ (โดยทั่วไปพูด) รวมทั้ง Wireshark ช่วยให้คุณดูสิ่งที่อยู่บนสายซึ่งอาจเป็นไปได้ว่าเครื่องทั้งหมดที่สื่อสารผ่านสายไฟ รหัสกระบวนการจะไม่ซ้ำกันในเครื่องต่างๆอย่างไรก็ตาม


7
จุดดี.. นั่นคือสิ่งที่ฉันคิดเหมือนกัน .. ให้ฉันรอสักวันก่อนที่จะปิดสิ่งนี้ในกรณีที่มีนินจาสายไฟอยู่ที่นั่นซึ่งสามารถจัดการได้ ..
Ryan Fernandes

30
Wireshark รู้ว่ากำลังใช้พอร์ตใดและระบบปฏิบัติการจะรู้ PID ของกระบวนการที่กำลังใช้พอร์ต ด้วยการเปลี่ยนแปลงโค้ดควรเป็นไปได้ที่ Wireshark จะแมปพอร์ตกับ PID มีบางกรณีที่จะล้มเหลวเช่นเมื่อระบบปฏิบัติการจัดสรรพอร์ตใหม่ไปยังแอปอื่นก่อนที่ Wireshark จะสอบถาม OS สำหรับ PID สำหรับพอร์ต ดังนั้นสิ่งนี้จะไม่เป็นการพิสูจน์คนโง่และการพิสูจน์ความผิดพลาด แต่หากผู้ใช้ตระหนักถึงข้อ จำกัด เหล่านี้ก็จะยังคงเป็นคุณสมบัติที่มีประโยชน์
Dojo

ฉันบอกว่าแค่เพิ่มโมดูลให้กับ Wireshark ที่ฟังพอร์ตเปิด / ปิดและแมป PID กับพอร์ต ซิงค์กับกระบวนการหลักและคุณจะมีตัวทำแผนที่พอร์ตต่อกระบวนการที่สมบูรณ์แบบ อย่างไรก็ตามการอ่านข้อบกพร่องจากความคิดเห็นของคำถามโมดูลนี้ไม่ได้สร้างขึ้นมาง่ายๆ
Vesper

ฉันจำได้ว่าครั้งแรกที่ฉันดาวน์โหลด Wireshark มันแสดงให้เห็นแผนผังกระบวนการและคุณสามารถเลือกกระบวนการที่จะตรวจสอบได้ Dunno เมื่อตัวเลือกนี้หายไป แต่มันอยู่ที่นั่น
Tomáš Zato - คืนสถานะ Monica

90

ในกรณีที่คุณกำลังมองหาวิธีอื่นและสภาพแวดล้อมที่คุณใช้คือ Windows Network Monitor 3.3 ของ Microsoft ก็เป็นตัวเลือกที่ดี มีคอลัมน์ชื่อกระบวนการ คุณสามารถเพิ่มลงในตัวกรองได้อย่างง่ายดายโดยใช้เมนูบริบทและใช้ตัวกรอง .. ตามปกติ GUI นั้นใช้งานง่ายมาก ...


10
Microsoft Network Monitor 3.4 อยู่ที่microsoft.com/en-us/download/details.aspx?id=4865
gt

39
นอกจากนี้ยังมีMicrosoft Message Analyzerซึ่งโดยพื้นฐานแล้วเป็นเวอร์ชันของ Microsoft ของ Wireshark (และตัวสนับสนุนของ Network Monitor ตามที่ฉันเข้าใจ) แต่มีการรวมที่ดีขึ้นเล็กน้อย ในตัวเลือกคอลัมน์ใต้ 'Etw' -> 'EtwProviderMsg' จะมีคอลัมน์สำหรับ 'PID' ได้ผลดี!
Cameron

3
เส้นทางที่แน่นอนคือ EtwProviderMsg -> EventRecord -> Header -> ProcessId
r590

ฉันเพิ่งลองใช้และ Microsoft Message Analyzer เป็นซอฟต์แวร์ที่น่าเบื่อมาก! เกือบจะนำระบบของฉันไปสู่การรวบรวมข้อมูล UI ที่ตอบโต้ได้ง่ายมากเช่นกัน มีใครหาวิธีล้างรายการด้วยข้อมูลที่รวบรวมได้ไหม ฉันยอมแพ้และถอนการติดตั้งขยะชิ้นนั้น (ปล. น่าเสียดายที่ Wireshark devs ไม่ได้เพิ่มคุณสมบัติในการเชื่อมต่อ PID / ชื่อกระบวนการเข้ากับพอร์ตในตัวกรองมันง่ายมากที่จะทำสิ่งนี้อาจมีความสำคัญในการดูว่าเกิดอะไรขึ้นระหว่างการเริ่มต้น วิธีแก้ปัญหาที่ฉันได้รับแนวคิดทั่วไปโดยใช้ ProcMon จาก SysInternals)
c00000fd

1
ฉันเพิ่งค้นพบ Microsoft Message Analyzer เมื่อเร็ว ๆ นี้และเป็นเครื่องมือที่มีประโยชน์มาก! เป็นไปได้อย่างไรที่ฉันไม่เคยได้ยินมาก่อน ต่ำเกินไป มีความสามารถในการกรองที่ยอดเยี่ยมเนื่องจากการทำงานร่วมกับ Windows ได้ดีกว่า Wireshark ฉันเปลี่ยนไปใช้โฮสต์ของ บริษัท ทั้งหมดภายใน ~ 3 เดือนหลังจากทำงานในแต่ละวัน ขอบคุณ @Cameron อย่างมากสำหรับความคิดเห็นของเขา / เธอภายใต้คำตอบนั้น! :-)
Skipper

16

คุณสามารถจับคู่หมายเลขพอร์ตจาก wirehark ถึงหมายเลขพอร์ตจากเช่นnetstatซึ่งจะบอกคุณถึง PID ของกระบวนการที่ฟังบนพอร์ตนั้น


12
สิ่งนี้อาจใช้ไม่ได้.. โปรแกรมเปิดขึ้นและปิดพอร์ตท้องถิ่นและระยะไกลจำนวนมาก
Ryan Fernandes

11

ใช้ Microsoft Message Analyzer v1.4

ไปที่ ProcessId จากตัวเลือกฟิลด์

Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId

คลิกขวาและเพิ่มเป็นคอลัมน์


1
ขอบคุณที่ชี้ทางให้ฉันเห็นว่าเป็นสิ่งที่ฉันต้องการจริงๆ FWIW กลุ่มระดับบนสุด "ProcMon" ดูเหมือนจะมี ProcessId เดียวกันรวมถึงข้อมูลอื่น ๆ เช่นชื่อกระบวนการ ParentId เป็นต้น
Tobias J

3

ใน Windows มีรุ่นทดลองที่ทำเช่นนี้ตามที่อธิบายไว้ในรายชื่ออีเมลกรองตามชื่อกระบวนการในระบบ


ภายใน Wireshark "คุณสามารถจับคู่หมายเลขพอร์ตจาก Wireshark ถึงหมายเลขพอร์ตจากเช่น netstat ซึ่งจะบอก PID ของกระบวนการที่รับฟังบนพอร์ตนั้น" สิ่งต่างๆจากความคิดเห็นของ Tom Woolfrey ดังนั้น (ตามที่ข้อความบันทึกไว้) อยู่ภายใต้ข้อ จำกัด ของกลไกนั้น

3

นี่เป็นสิ่งสำคัญที่จะสามารถตรวจสอบได้ในกรณีที่กระบวนการบางอย่างพยายามเชื่อมต่อและดูเหมือนว่าไม่มีวิธีใดที่สะดวกในการทำเช่นนี้บน Linux อย่างไรก็ตามสามารถแก้ปัญหาได้หลายวิธีดังนั้นฉันจึงรู้สึกว่าควรค่าแก่การกล่าวถึง

มีโปรแกรมที่เรียกว่าnonetซึ่งอนุญาตให้เรียกใช้โปรแกรมที่ไม่มีการเข้าถึงอินเทอร์เน็ต (ฉันมีโปรแกรมเรียกใช้งานโปรแกรมส่วนใหญ่ในระบบของฉันที่ตั้งค่าไว้) ใช้ setguid เพื่อรันกระบวนการในกลุ่ม nonet และตั้งค่ากฎiptablesเพื่อปฏิเสธการเชื่อมต่อทั้งหมดจากกลุ่มนี้

อัปเดต: ตอนนี้ฉันใช้ระบบที่ง่ายกว่าเดิมคุณสามารถกำหนดค่า iptables ที่อ่านได้ด้วย ferm และใช้โปรแกรมsgเพื่อเรียกใช้โปรแกรมกับกลุ่มเฉพาะ นอกจากนี้ Iptables ยังกำหนดให้คุณเปลี่ยนเส้นทางการรับส่งข้อมูลเพื่อให้คุณสามารถกำหนดเส้นทางไปยังอินเทอร์เฟซแยกต่างหากหรือพร็อกซีในเครื่องบนพอร์ตที่ช่วยให้คุณสามารถกรองใน Wireshark หรือ LOG แพ็กเก็ตได้โดยตรงจาก iptables หากคุณไม่ต้องการปิดการใช้งานอินเทอร์เน็ตทั้งหมดในขณะที่คุณ กำลังตรวจสอบการจราจร

ไม่ซับซ้อนมากที่จะปรับให้รันโปรแกรมในกลุ่มและตัดทราฟฟิกอื่น ๆ ทั้งหมดด้วย iptables สำหรับอายุการดำเนินการจากนั้นคุณจะสามารถดักจับทราฟฟิกจากกระบวนการนี้เท่านั้น

ถ้าฉันเคยเขียนมันฉันจะโพสต์ลิงค์ที่นี่

ในหมายเหตุอื่นคุณสามารถเรียกใช้กระบวนการในเครื่องเสมือนและสูดดมอินเทอร์เฟซที่ถูกต้องเพื่อแยกการเชื่อมต่อที่สร้างขึ้น แต่นั่นจะเป็นวิธีที่ค่อนข้างด้อยกว่า ...


3

หากคุณต้องการติดตามแอปพลิเคชันที่ยังต้องเริ่มต้นก็เป็นไปได้อย่างแน่นอน:

  1. ติดตั้งนักเทียบท่า (ดูhttps://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ )
  2. เปิดเทอร์มินัลและเรียกใช้คอนเทนเนอร์ขนาดเล็ก: docker run -t -i ubuntu /bin/bash (เปลี่ยน "ubuntu" เป็น distro ที่คุณชื่นชอบซึ่งไม่จำเป็นต้องเหมือนกับในระบบจริงของคุณ)
  3. ติดตั้งแอปพลิเคชันของคุณในคอนเทนเนอร์โดยใช้วิธีเดียวกับที่คุณจะติดตั้งในระบบจริง
  4. เริ่ม Wirehark ในระบบจริงของคุณไปที่ capture> options ในหน้าต่างที่จะเปิดขึ้นคุณจะเห็นอินเทอร์เฟซทั้งหมดของคุณ แทนการเลือกany, wlan0, eth0... เลือกอินเตอร์เฟซเสมือนใหม่docker0แทน
  5. เริ่มจับภาพ
  6. เริ่มแอปพลิเคชันของคุณในคอนเทนเนอร์

คุณอาจมีข้อสงสัยเกี่ยวกับการใช้งานซอฟต์แวร์ของคุณในคอนเทนเนอร์ดังนั้นนี่คือคำตอบสำหรับคำถามที่คุณอาจต้องการถาม:

  • แอปพลิเคชันของฉันจะทำงานในคอนเทนเนอร์ได้หรือไม่ เกือบจะใช่ แต่คุณอาจต้องเรียนรู้เล็กน้อยเกี่ยวกับนักเทียบท่าเพื่อให้มันใช้งานได้
  • แอปพลิเคชันของฉันจะไม่ทำงานช้าหรือไม่? เล็กน้อย หากโปรแกรมของคุณเป็นโปรแกรมที่ใช้การคำนวณอย่างหนักเป็นเวลาหนึ่งสัปดาห์ตอนนี้อาจใช้เวลาหนึ่งสัปดาห์ 3 วินาที
  • จะเกิดอะไรขึ้นถ้าซอฟต์แวร์ของฉันหรืออย่างอื่นแตกในคอนเทนเนอร์ นั่นเป็นสิ่งที่ดีสำหรับตู้คอนเทนเนอร์ สิ่งที่กำลังทำงานอยู่ภายในสามารถทำลายคอนเทนเนอร์ปัจจุบันและไม่สามารถทำร้ายส่วนที่เหลือของระบบได้

0

ในบางกรณีคุณไม่สามารถกรองตามรหัสกระบวนการได้ ตัวอย่างเช่นในกรณีของฉันฉันต้องสูดอากาศเข้าจากกระบวนการหนึ่ง แต่ฉันพบในเครื่องกำหนดเป้าหมายที่อยู่ IP เพิ่มตัวกรองip.dst==someipและ voila มันจะใช้ไม่ได้ในทุกกรณี แต่สำหรับบางกรณีก็มีประโยชน์


0

รับหมายเลขพอร์ตโดยใช้netstat:

netstat -b

จากนั้นใช้ตัวกรอง Wireshark:

tcp.port == portnumber

ฉันไม่แน่ใจว่านี่เป็นวิธีที่เข้าใจผิดได้ หากคุณมีเซิร์ฟเวอร์ TCP ที่รับฟังบนพอร์ต แต่ไม่ได้บล็อกการจัดการ TCP ของเคอร์เนลเคอร์เนลหรือแอปพลิเคชันของคุณอาจตอบสนองบนพอร์ตได้
aeb0

0

การใช้งาน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>;

-16

คุณสามารถตรวจสอบหมายเลขพอร์ตด้วยตัวอย่างคำสั่งเหล่านี้บน Wireshark: -

tcp.port == 80

tcp.port == 14220

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