มีเครื่องมือบรรทัดคำสั่งที่ง่ายสำหรับการแพ็คเก็ตดมกลิ่นคำสั่งเดียวใน linux?


11

ฉันชอบถ้ามีเครื่องมือบรรทัดคำสั่งเดียวสำหรับการดักจับแพ็คเก็ตคำสั่งเดียวใน Linux สิ่งที่ต้องการsniff dumpfile commandเพื่อให้คุณสามารถเรียกใช้คำสั่งที่คุณต้องการแพ็คเก็ตสูดอากาศใน terminal และได้รับการถ่ายโอนข้อมูลของแพ็กเก็ตที่อื่น

ฉันต้องการดัมพ์ / บันทึก / ดูเฉพาะทราฟฟิกเครือข่ายของคำสั่งเดียวที่ฉันป้อนไม่ใช่ทราฟฟิก TCP ทั้งหมดในอินเตอร์เฟสเครือข่ายเดียวของฉัน ดังนั้นถ้าฉันได้รับการบันทึกลงในคอมพิวเตอร์ของฉันและได้ IRC ทำงานในพื้นหลังและผมทำsniff somefile wget http://www.google.comผมต้องการที่จะเห็นทุกการเข้าชมเครือข่ายที่คำสั่ง wget ได้ดาวน์โหลดhttp://www.google.com ฉันไม่ต้องการ 'somefile' เพื่อให้การรับส่งข้อมูลเครือข่ายของ IRC สับสน

มีคำสั่ง linux / unix มากมายที่ยอมรับคำสั่งที่แตกต่างและทำสิ่งที่แตกต่าง จากsudo(เรียกใช้เป็น superuser) niceเปลี่ยนระดับที่ดีtrickle(จำกัด แบนด์วิดท์ของคำสั่ง)


1
คุณต้องการทำอะไร? คุณต้องการตรวจสอบว่าคำสั่งบางอย่างทำงานหรือไม่? คุณต้องการดมกลิ่นการรับส่งข้อมูลเครือข่ายหรือไม่? เพราะการใช้วลี 'packet ดมกลิ่นคำสั่ง' ทำให้ฉันไม่รู้สึกเลย ...
: 14509

wzzrd ดูคำถามขยาย
Rory

คำตอบ:


10

ไม่มีสิ่งใดที่ฉันรู้ แต่ในทางทฤษฎีแล้วมันก็ไม่ยากที่จะทำสิ่งที่คล้ายกัน Strace สามารถใช้เพื่อสกัดกั้น syscalls เครือข่าย

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

นี่จะให้ข้อมูลเกี่ยวกับข้อมูลที่ส่งระหว่างเคอร์เนลและกระบวนการ ผลลัพธ์ของ strace นั้นไม่ใช่สิ่งที่คุณต้องการอย่างแท้จริง อย่างไรก็ตาม strace ใช้ ptrace syscall เพื่อสกัดกั้นการเรียกระบบ อาจเป็นไปได้ที่จะเขียนโปรแกรมเพื่อส่งออกข้อมูลที่เป็นประโยชน์มากขึ้นเล็กน้อย

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


มันจะดีถ้ามันเอาท์พุทที่ Wireshark อ่านได้
Brad Gilbert

โปรดทราบว่า strace ที่อธิบายไว้ข้างต้นนั้นถูกต้องสำหรับ Solaris (และอาจเป็นไปได้ที่ Unices เชิงพาณิชย์อื่น ๆ ) บน Linux strace คือตัวเรียกการติดตามระบบซึ่งคล้ายกันในการทำงานและเอาต์พุตไปยังการมัดบน Solaris หรือ tusc บน HP-UX
James F

1
ฉันอธิบาย strace บน Linux
David Pashley

8

Tracedump

Tracedump เป็นแอปพลิเคชั่นดมกลิ่น IP แพ็คเก็ตเดี่ยวซึ่งจับแพ็คเก็ต TCP และ UDP ทั้งหมดของกระบวนการ Linux เดียว

ดาวน์โหลดและคำอธิบายได้ที่นี่: http://mutrics.iitis.pl/tracedump


1
นี่ควรเป็นคำตอบที่ถูกต้องตอนนี้
h0tw1r3

4

ลอง Wireshark - คำสั่งจะเป็น tshark

  • tshark ช่วยให้คุณสามารถเลือกฟิลเตอร์บนทราฟฟิกที่จับจากอินเตอร์เฟส
  • ใช้สาธารณูปโภคอื่น ๆ เช่นเดเบียนlsofเพื่อระบุชนิดของการสื่อสารที่ทำโดยแอพลิเคชันที่คุณสนใจ

หรือว่าคุณแค่ต้องการ LSOF จริง ๆ ?


ฉันไม่คิดว่าจะมีเครื่องมือที่จะทำการกรองแบบไดนามิกสำหรับการสื่อสารทั้งหมดที่เกี่ยวข้องกับกระบวนการ อย่างไรก็ตามคุณสามารถลองติดตามการสื่อสารกระบวนการด้วยเครื่องมือเช่นlsofและเมื่อคุณมีตัวกรองที่ดีที่สามารถแยกการสื่อสารของกระบวนการนั้นออกจากทราฟฟิกอื่น ๆ ที่ทำงานอยู่บนระบบของคุณคุณจะได้รับการบันทึกที่ถูกต้อง

ตัวอย่างเช่นโดยwgetทั่วไปแล้วที่อยู่ IP ปลายทางจะแตกต่างจากการรับส่งข้อมูลที่เกี่ยวข้องกับกระบวนการอื่น ๆ แม้ว่าคุณจะใช้บางอย่างเช่นskypeช่วงพอร์ตปลายทางมักจะได้รับการแก้ไขสำหรับอินสแตนซ์


นี่เป็นเหมือนหลักการความไม่แน่นอน โดยปกติแล้วคุณสามารถรู้ได้ว่าอะไรคือสิ่งที่กำลังเกิดขึ้นผ่านชุดของเส้นทางการสื่อสาร (ด้วยการกรองการดมกลิ่นในกลุ่มการไหลที่ระบุ) หรือการเชื่อมโยงการสื่อสารที่แตกต่างกัน (ด้วย lsof)

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


lsof นั้นยอดเยี่ยม แต่ฉันอยากจะดูว่ามันทำอะไร / ส่ง / รับ
Rory

4

เรียนรู้การใช้นิพจน์ตัวกรอง

ขณะนี้จะไม่ทำสิ่งติดตามแฟนซีที่คุณขอ

มันจะช่วยให้คุณสามารถลบ "ความสับสนเช่น IRC" เกือบทั้งหมดออกจากการดักจับ

นอกจากนี้ยังมีประโยชน์อย่างมากที่จะรู้ไวยากรณ์ตัวกรองสำหรับการอ้างอิงอย่างรวดเร็วในอนาคต


2

โดยเฉพาะสำหรับเว็บเบราว์เซอร์ / เว็บเพจบางอย่างเช่นปลั๊กอิน Firebug สำหรับ Firefox อาจให้ข้อมูลบางอย่างที่คุณต้องการ: http://getfirebug.com/net.html

สำหรับแอปพลิเคชันทั่วไปเพิ่มเติมคุณอาจต้องใช้ netstat เพื่อระบุพอร์ตที่ใช้โดยแอปพลิเคชันจากนั้น Wireshark / tshark / dtrace พร้อมตัวกรองเพื่อจับภาพปริมาณการใช้งานนั้น ไม่ใช่คำตอบเดียวที่คุณต้องการ ...


1

แนวคิดหนึ่งลองใช้ VMWare

- ตั้ง
ค่าvm - กำหนดค่า vm ที่จะใช้ส่วนต่อประสานเฉพาะ
-sniff บนส่วนต่อประสานนั้นจากโฮสต์ (เหมือนคนที่อยู่ตรงกลางโจมตี)

หากคุณแยกแอปพลิเคชันเครือข่ายใดที่ทำงานบน vm นั้นคุณอาจมีคำตอบ

ฉันคิดว่าทางออกที่ดีกว่าคือการทำสิ่งที่ VMWare ทำในแง่ของวิธีที่ระบุว่าจะเลือกอินเตอร์เฟสเพื่อพูดคุยอย่างไร ฉันคิดว่าเวทมนตร์มาจากโมดูลเคอร์เนลที่ใช้ในกรณีนี้อาจเป็นโมดูลเคอร์เนล vmnet

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

นอกจากนี้
บางทีโปรแกรมมีอยู่แล้วฉันไม่รู้ แต่ถ้ามีใครเขียนคุณสามารถเรียกมันว่ามันเป็นเส้นหลัง (ตัวอย่าง) และการใช้งานอาจเป็นเช่นนั้น

อินเตอร์เฟสโปรแกรม nettrace

จากนั้นสูดดมอินเทอร์เฟซที่ใช้และเพิ่มเส้นทาง (อาจเป็นโดยอัตโนมัติ) ไปยังอินเทอร์เฟซจริงของคุณ


ใช่ว่าจะเป็นไปได้ อย่างไรก็ตามมันจะดีถ้ามีเครื่องมือที่ง่ายและรวดเร็วในการทำเช่นนั้น
Rory

อาจถึงเวลาสำหรับเครื่องมือง่ายๆนี้หรือไม่? ฉันสงสัยว่ามันจะเป็นเรื่องยากหรือเปล่าบางที vmnet mod อาจเป็นจุดเริ่มต้นที่ดี (แม้ว่าฉันจะไม่รู้ว่าจะมีปัญหาเรื่องลิขสิทธิ์หรือไม่) บางที (แฮ็ค) แค่ใช้ vmnet mod ฉันรู้ว่าฉันสนใจคำถามเช่นนี้บ่อยครั้ง
rev

1

สมมติว่าคุณเป็นคนเดียวในกล่องที่พยายามเชื่อมต่อกับ Google ในเวลานั้นฉันคิดว่าสิ่งนี้ควรทำเคล็ดลับ:

tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80

หากคุณไม่ใช่คนเดียวที่พยายามเชื่อมต่อกับ google ในช่องถ้าคุณสามารถระบุ IP / พอร์ตที่คุณกำลังเชื่อมต่อจากคุณคุณสามารถระบุ src port / src ip

การระบุพอร์ต src อาจเป็นปัญหาหากคุณไม่สามารถระบุได้บนไคลเอนต์ที่คุณใช้ ฉันไม่แน่ใจว่าคุณสามารถด้วย wget

ฉันสงสัยอย่างยิ่งว่าคุณสามารถระบุทั้งพอร์ต src และ dst ด้วย netcatดังนั้นหากเป็น google จริง ๆ ที่คุณสนใจคุณสามารถทำ GET (ด้วยตนเอง) ผ่าน netcat

แน่นอนหน้าคนจะให้เฉพาะคุณ


1

หน้า man tcpdump และเว็บไซต์หลายแห่งแสดงตัวอย่างเชิงลึกของตัวกรองและมีที่เก็บออนไลน์ไม่กี่แห่งสำหรับการแสดงออกของตัวกรอง tcpdump มันควรจะทำเกือบทุกอย่างที่คุณสามารถฝันได้โดยสมมติว่าคุณรู้อะไรเกี่ยวกับทราฟฟิกเครือข่าย (ต้นทางปลายทางพอร์ตโปรโตคอล ฯลฯ ) เกินกว่าที่โปรแกรมจะสร้างขึ้นมา

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


เอ่อซึ่งเปลี่ยนไปเป็นคำสั่ง tcpdump จะ จำกัด เฉพาะแอพพลิเคชั่นเดียวที่สร้างทราฟฟิก?
มิลานBabuškov

1

บางทีสคริปต์นี้จะทำสิ่งที่คุณต้องการด้วยการแก้ไขคำสั่ง tshark ที่เหมาะสม:

#!/bin/bash

# Start tshark in the background before we run the commsnd to be sniffed.
# Add more options to tshark, as appropriate to your command....
setsid tshark  -w dump -i eth0 tcp port 8080 >/dev/null 2>&1  &

sleep 2

wget www.google.com

# tshark keeps running if you don't kill it. 
# This kills all other tsharks that may be running.
pkill -9 tshark

อ่านไฟล์การถ่ายโอนในภายหลัง:

tshark -r dump

คุณกำลังจับพอร์ต 8080 แต่สร้างทราฟฟิกบนพอร์ต 80 สิ่งนี้จะไม่ทำสิ่งที่คุณตั้งใจจะทำ
James F

เจมส์: พร็อกซีของฉันเชื่อมต่อกับ 8080 นั่นคือวิธีที่ฉันเรียกใช้สคริปต์ ฉันควรจะเปลี่ยนมัน 80 เพื่อจุดประสงค์ของโพสต์นี้
ไม่ใช่ตอนนี้

0

Dtrace ควรอนุญาตสิ่งนี้ถึงแม้ว่าฉันจะไม่รู้ว่ามันทำให้ Linux เป็นแบบนี้หรือไม่

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