วิธีการติดตามกิจกรรมเครือข่ายของคำสั่ง?


14

ฉันต้องการติดตามกิจกรรมเครือข่ายของคำสั่งฉันลอง tcpdump และ strace ไม่สำเร็จ

ตัวอย่างเช่นหากฉันกำลังติดตั้งแพคเกจหรือใช้คำสั่งใด ๆ ที่พยายามเข้าถึงบางไซต์ฉันต้องการดูกิจกรรมเครือข่ายนั้น (ไซต์ที่พยายามเข้าถึง)

ฉันเดาว่าเราสามารถทำได้โดยใช้ tcpdump ฉันพยายาม แต่มันกำลังติดตามกิจกรรมเครือข่ายทั้งหมดของระบบของฉัน สมมติว่าถ้าฉันใช้คำสั่งที่เกี่ยวข้องกับเครือข่ายหลายเครือข่ายและฉันต้องการติดตามเฉพาะกิจกรรมเครือข่ายคำสั่งเฉพาะเวลานั้นยากที่จะหาคำตอบที่แน่นอน

มีวิธีทำเช่นนั้นหรือไม่?

UPDATE:

ฉันไม่ต้องการติดตามทุกสิ่งที่เกิดขึ้นบนอินเทอร์เฟซเครือข่ายของฉัน ฉันต้องการติดตามคำสั่ง (สำหรับตัวอย่างกิจกรรมเครือข่าย #yum install -y vim) เช่นเว็บไซต์ที่พยายามเข้าถึง


1
วางแอ็พพลิเคชันในเนมสเปซเครือข่ายจากนั้นใช้ tcpdump / wireshark ดูเช่นที่นี่
dirkt

คำตอบ:


17

netstat เพื่อความเรียบง่าย

การใช้netstatและการ grepping บน PID หรือชื่อกระบวนการ:

# netstat -np --inet | grep "thunderbird"
tcp        0      0 192.168.134.142:45348   192.168.138.30:143      ESTABLISHED 16875/thunderbird
tcp        0      0 192.168.134.142:58470   192.168.138.30:443      ESTABLISHED 16875/thunderbird

และคุณสามารถใช้watchสำหรับการปรับปรุงแบบไดนามิก:

watch 'netstat -np --inet | grep "thunderbird"'

ด้วย:

  • -n: แสดงที่อยู่ตัวเลขแทนการพยายามกำหนดโฮสต์สัญลักษณ์พอร์ตหรือชื่อผู้ใช้
  • -p: แสดง PID และชื่อของโปรแกรมที่แต่ละซ็อกเก็ตอยู่
  • --inet: แสดงซ็อกเก็ตโปรโตคอล raw, udp และ tcp เท่านั้น

strace สำหรับ verbosity

คุณบอกว่าคุณลองใช้straceเครื่องมือ แต่ลองใช้ตัวเลือกนี้trace=networkหรือไม่? โปรดทราบว่าการส่งออกสามารถ verbose ค่อนข้างดังนั้นคุณอาจต้อง grepping คุณสามารถเริ่มต้นโดย grepping ที่ "sin_addr"

 strace -f -e trace=network <your command> 2>&1 | grep sin_addr

หรือสำหรับกระบวนการที่กำลังทำงานอยู่ให้ใช้ PID:

 strace -f -e trace=network -p <PID> 2>&1 | grep sin_addr

+1 netstatซึ่ง IMHO เป็นทางออกที่ง่ายและประณีตที่สุด
dr01

@Gohu ฉันทำเช่นเดียวกันสำหรับ dnf แต่ไม่มีโชค ฉันลองติดตั้งแพ็กเกจบางตัวโดยใช้ dnf จากนั้นฉันเห็นว่ากระบวนการ dnf กำลังทำงานอยู่ (ชื่อกระบวนการ: dnf ตามคำสั่ง top และ ps aux) น่าเศร้าที่ฉันไม่ได้รับผลลัพธ์ใด ๆ จาก netstat -np --inet | grep "dnf"
Buvanesh Kumar

+1 สำหรับ strace ได้รับการแก้ไขปัญหาของฉัน ฉันสามารถรับที่อยู่ IP ได้ ขอบคุณมากสำหรับคำตอบของคุณ :) @Gohu ฉันเดาว่าจะให้ที่อยู่ IP ทั้งหมดที่เข้าถึงผ่านเครือข่าย (เช่นเราเตอร์ IP และ IP อื่น ๆ ) ถ้าคุณรู้ว่ามันเป็นไปได้ที่จะติดตามเฉพาะ IP ปลายทาง?
Buvanesh Kumar

คุณสามารถลองและกรองstraceเอาท์พุทได้มากขึ้นเพียงรักษาconnectsyscalls และลบdnsคำขอ (พอร์ต 53) ด้วย:| grep connect | grep -v 'sin_port=htons(53)'
Gohu

+1 สำหรับตัวเลือกการติดตามเครือข่ายใน strace
phreed


5

sysdig ช่วยให้คุณสามารถตรวจสอบกิจกรรมทั้งหมดของเคอร์เนลหรือคำสั่งหลายคำสั่งที่ทำงานในระบบของคุณในระหว่างการเดินทางรวมถึงและไม่ จำกัด กิจกรรมเครือข่าย

เนื่องจากเอาต์พุตมีขนาดใหญ่คุณต้องสร้างตัวกรองหน้าเริ่มต้นสำหรับตัวกรองพื้นฐานส่วนใหญ่จึงเข้าใจได้ง่าย

นอกจากนี้ยังมีข้อดีคือไม่ได้ใช้เป็นตัวห่อหุ้มแอปพลิเคชันเช่นเดียวกับในstraceและสามารถมีประสิทธิภาพมาก

จากตัวอย่าง Sysdig

ระบบเครือข่าย

ดูกระบวนการสูงสุดในแง่ของการใช้แบนด์วิดท์เครือข่าย

sysdig -c topprocs_net 

แสดงข้อมูลเครือข่ายที่แลกเปลี่ยนกับโฮสต์ 192.168.0.1

เป็นไบนารี:

sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1   

เป็น ASCII:

sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1 

ดูพอร์ตเซิร์ฟเวอร์บนสุด:

ในแง่ของการเชื่อมต่อที่จัดตั้งขึ้น:

sysdig -c fdcount_by fd.sport "evt.type=accept"   

ในแง่ของจำนวนไบต์ทั้งหมด:

sysdig -c fdbytes_by fd.sport 

ดู IP ของลูกค้าอันดับต้น ๆ

ในแง่ของการเชื่อมต่อที่จัดตั้งขึ้น

sysdig -c fdcount_by fd.cip "evt.type=accept"   

ในแง่ของจำนวนไบต์ทั้งหมด

sysdig -c fdbytes_by fd.cip 

แสดงรายการการเชื่อมต่อขาเข้าทั้งหมดที่ไม่ได้ทำหน้าที่โดย apache

sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"

1

คุณสามารถใช้ wireshark เพื่อดมกลิ่นการรับส่งข้อมูลทั้งหมดของอินเทอร์เฟซเครือข่าย ในกรณีที่คุณต้องการตัวเลือกที่ไม่มี GUI คุณสามารถใช้ tshark

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


1
อย่างที่ฉันพูดไว้ก่อนหน้านี้ถ้าฉันใช้คำสั่งที่เกี่ยวข้องกับเครือข่ายหลายตัวฉันจะทราบได้อย่างไรว่าคำสั่งใดกำลังรับไซต์ใด
Buvanesh Kumar

นี่เป็นคำตอบทั่วไป ที่ฉันรู้แล้วว่าเราสามารถติดตามกิจกรรมเครือข่ายของอินเทอร์เฟซเครือข่าย :) ฉันกำลังมองหาการติดตามสถิตยศาสตร์เครือข่ายคำสั่งเฉพาะ
Buvanesh Kumar

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