Tcpdump - คำสั่ง Linux - คำสั่ง Unix

ชื่อ

tcpdump - การถ่ายโอนข้อมูลการจราจรบนเครือข่าย

สรุป

tcpdump [ -adeflnNOpqRStuvxX ] [ -c count ]

[ -C file_size ] [ -F ไฟล์ ]

[ -i interface ] [ -m โมดูล ] [ -r ไฟล์ ]

[ -s snaplen ] [ -T type ] [ -U user ] [ -w file ]

[ -E algo: secret ] [ expression ]

รายละเอียด

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

Tcpdump จะถ้าไม่ทำงานโดยใช้ flag -c ให้ดำเนินการจับ packet ต่อไปจนกว่าจะมีการขัดจังหวะโดยสัญญาณ SIGINT (สร้างขึ้นโดยการพิมพ์อักขระ interrupt ของคุณโดยทั่วไปจะควบคุม C) หรือสัญญาณ SIGTERM (โดยทั่วไปจะสร้างขึ้นพร้อมกับ kill (1) คำสั่ง); ถ้ารันด้วยธง -c จะจับแพ็คเก็ตจนกว่าจะมีการขัดจังหวะโดยสัญญาณ SIGINT หรือ SIGTERM หรือจำนวนแพ็คเก็ตที่ระบุได้รับการประมวลผลแล้ว

เมื่อ tcpdump เสร็จสิ้นการจับแพ็คเก็ตจะรายงานจำนวน:

แพ็คเก็ต `` รับโดยตัวกรอง '' (ความหมายของเรื่องนี้ขึ้นอยู่กับระบบปฏิบัติการที่คุณใช้ tcpdump และอาจเป็นไปตามที่กำหนดไว้ในระบบปฏิบัติการ - ถ้ามีการระบุตัวกรองในบรรทัดคำสั่งบนระบบปฏิบัติการบางระบบจะนับ แพ็คเก็ตไม่ว่าพวกเขาจะถูกจับคู่โดยนิพจน์ตัวกรองและบนระบบปฏิบัติการอื่น ๆ จะนับเฉพาะแพ็คเก็ตที่ถูกจับคู่โดยนิพจน์ตัวกรองและถูกประมวลผลโดย tcpdump );

แพ็คเก็ต `` ลดลงโดยเคอร์เนล '' (นี่คือจำนวนแพ็คเก็ตที่ถูกลดลงเนื่องจากไม่มีพื้นที่บัฟเฟอร์โดยกลไกการจับ packet ใน OS ที่ tcpdump กำลังทำงานอยู่ถ้า OS รายงานข้อมูลนั้นไปยังแอพพลิเคชัน ถ้าไม่ใช่จะรายงานเป็น 0)

บนแพลตฟอร์มที่รองรับสัญญาณ SIGINFO เช่น BSDs ส่วนใหญ่จะรายงานจำนวนดังกล่าวเมื่อได้รับสัญญาณ SIGINFO (สร้างขึ้นโดยการพิมพ์อักขระ "สถานะ" โดยปกติแล้วจะควบคุม -T) และจะเก็บข้อมูลแพ็คเก็ตต่อไป .

การอ่านข้อมูลจากอินเทอร์เฟซเครือข่ายอาจต้องการให้คุณมีสิทธิ์พิเศษ:

ภายใต้ SunOS 3.x หรือ 4.x พร้อม NIT หรือ BPF:

คุณต้องอ่านสิทธิ์การเข้าถึง / dev / nit หรือ / dev / bpf *

ภายใต้ Solaris กับ DLPI:

คุณต้องมีสิทธิ์อ่าน / เขียนไปยังอุปกรณ์ปลอมแบบเครือข่ายเช่น / dev / le อย่างน้อยบางรุ่นของ Solaris แต่นี้ไม่เพียงพอที่จะให้ tcpdump เพื่อจับภาพในโหมดสำส่อน ในเวอร์ชัน Solaris เหล่านี้คุณต้องเป็น root หรือ tcpdump ต้องติดตั้ง setuid ไว้ที่ root เพื่อที่จะจับภาพในโหมด promiscuous โปรดทราบว่าในอินเทอร์เฟซจำนวนมาก (อาจทั้งหมด) ถ้าคุณไม่ได้อยู่ในโหมดพรอมซึ่งคุณจะไม่เห็นแพ็คเก็ตที่ส่งออกใด ๆ ดังนั้นการจับภาพที่ไม่ได้ทำในโหมด promiscuous อาจไม่เป็นประโยชน์มากนัก

ภายใต้ HP-UX กับ DLPI:

คุณต้องเป็น root หรือ tcpdump ต้องติดตั้ง setuid ไว้ที่ root

ภายใต้ IRIX พร้อมสอดแนม:

คุณต้องเป็น root หรือ tcpdump ต้องติดตั้ง setuid ไว้ที่ root

ภายใต้ Linux:

คุณต้องเป็น root หรือ tcpdump ต้องติดตั้ง setuid ไว้ที่ root

ภายใต้ Ultrix และ Digital UNIX / Tru64 UNIX:

ผู้ใช้รายใดอาจจับภาพการรับส่งข้อมูลเครือข่ายด้วย tcpdump อย่างไรก็ตามผู้ใช้คนใดคนหนึ่ง (ไม่แม้แต่ผู้ใช้ super-user) สามารถจับภาพในโหมด promiscuous บนอินเทอร์เฟซเว้นแต่ผู้ใช้ super-enabled ได้เปิดใช้งานการทำงานแบบ promiscuous ในอินเทอร์เฟซนี้โดยใช้ pfconfig (8) และไม่มีผู้ใช้ (ไม่ใช่ผู้ใช้ super-user ) สามารถจับภาพการรับส่งข้อมูลแบบ unicast ที่ได้รับโดยหรือส่งผ่านเครื่องบนอินเทอร์เฟซเว้นแต่ผู้ใช้ super ได้เปิดใช้งานการทำสำเนาทุกรูปแบบบนอินเทอร์เฟซโดยใช้ pfconfig ดังนั้นการจับ packet ที่ เป็นประโยชน์ ในอินเทอร์เฟซอาจต้องใช้โหมดหรือการคัดลอกแบบ promiscuous - โหมดการทำงานทั้งหมดหรือทั้งสองรูปแบบของการดำเนินงานจะเปิดใช้งานบนอินเทอร์เฟซดังกล่าว

ภายใต้ BSD:

คุณต้องมีสิทธิ์อ่านเพื่อ / dev / bpf *

การอ่านแฟ้มแพ็คเก็ตที่บันทึกไว้ไม่จำเป็นต้องมีสิทธิ์พิเศษ

ตัวเลือก

-a

พยายามเปลี่ยนที่อยู่เครือข่ายและการเผยแพร่ไปยังชื่อ

-c

ออกหลังจากรับแพ็คเก็ต นับ

-C

ก่อนที่จะเขียนแพ็คเก็ตดิบลงในไฟล์ savefile ให้ตรวจสอบว่าไฟล์มีขนาดใหญ่กว่า file_size หรือไม่ถ้าปิดไฟล์ savefile ปัจจุบันแล้วเปิดไฟล์ใหม่ Savefiles หลังจาก savefile แรกจะมีชื่อที่ระบุด้วยธง -w โดยมีตัวเลขอยู่หลังเริ่มต้นที่ 2 และขึ้นไปข้างบน หน่วยของ file_size คือล้านไบต์ (1,000,000 ไบต์ไม่ใช่ 1,048,576 ไบต์)

-d

ถ่ายโอนรหัสจับคู่ที่รวบรวมไว้ในรูปแบบที่มนุษย์สามารถอ่านได้เพื่อเอาต์พุตมาตรฐานและหยุดทำงาน

-DD

ถ่ายโอนรหัสจับคู่แพคเก็ตเป็นส่วนของโปรแกรม C

-ddd

ถ่ายโอนรหัสการจับคู่รหัสเป็นตัวเลขฐานสิบ (ก่อนหน้าด้วยจำนวน)

-e

พิมพ์ส่วนหัวระดับลิงก์บนบรรทัดการถ่ายโอนข้อมูลแต่ละรายการ

-E

ใช้ algo: เป็นความลับ สำหรับการถอดรหัส IPsec ESP packets อัลกอริทึมอาจเป็น des- cbc , 3des-cbc , blowfish- cbc , rc3-cbc , cast128-cbc หรือ ไม่มี ค่าดีฟอลต์คือ des-cbc ความสามารถในการถอดรหัสลับแพ็กเก็ตจะปรากฏเฉพาะเมื่อ tcpdump ถูกคอมไพล์ด้วยการเข้ารหัสที่เปิดใช้งาน ลับ ข้อความ ascii สำหรับคีย์ลับ ESP เราไม่สามารถใช้ค่าไบนารีตามอำเภอใจได้ในขณะนี้ ตัวเลือกจะถือว่า RFC2406 ESP ไม่ใช่ RFC1827 ESP ตัวเลือกนี้ใช้สำหรับวัตถุประสงค์ในการดีบักเท่านั้นและไม่สามารถใช้ตัวเลือกนี้กับคีย์ 'ลับ' อย่างแท้จริงได้ ด้วยการนำเสนอคีย์ลับของ IPsec ลงในบรรทัดคำสั่งคุณจะทำให้บุคคลอื่นสามารถมองเห็นได้ผ่าน ps (1) และโอกาสอื่น ๆ

-f

พิมพ์ที่อยู่อินเทอร์เน็ต "ต่างชาติ" แทนตัวเลข (ตัวเลือกนี้มีจุดมุ่งหมายเพื่อให้ได้รับความเสียหายร้ายแรงจากสมองในเซิร์ฟเวอร์ yp ของ Sun --- โดยปกติแล้วแฮงค์จะแปลหมายเลขอินเทอร์เน็ตที่ไม่ใช่อินเทอร์เน็ตในท้องถิ่น)

-F

ใช้ ไฟล์ เป็นข้อมูลสำหรับนิพจน์ตัวกรอง นิพจน์เพิ่มเติมที่ระบุในบรรทัดคำสั่งจะถูกละเว้น

-ผม

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

ในระบบ Linux ที่มี kernel 2.2 ขึ้นไปอาร์กิวเมนต์ อินเทอร์เฟซสำหรับ `` `'' '' '' 'สามารถใช้เพื่อจับภาพแพ็คเก็ตจากอินเทอร์เฟซทั้งหมด โปรดทราบว่าการจับภาพบนอุปกรณ์ `` ใด ๆ '' จะไม่สามารถทำได้ในโหมดสำส่อน

-l

ทำบรรทัดบัฟเฟอร์ stdout มีประโยชน์หากคุณต้องการดูข้อมูลขณะจับภาพ เช่น,
`` tcpdump -l | tee dat '' หรือ `` tcpdump -l> dat & tail -f dat ''

-m

โหลดข้อกำหนดของโมดูล SMI MIB จาก โมดูล ไฟล์ ตัวเลือกนี้สามารถใช้หลายครั้งเพื่อโหลดโมดูล MIB หลายรายการลงใน tcpdump

-n

อย่าเปลี่ยนที่อยู่โฮสต์เป็นชื่อ ซึ่งสามารถใช้เพื่อหลีกเลี่ยงการค้นหา DNS

-nn

อย่าแปลงโปรโตคอลและหมายเลขพอร์ตเป็นต้นให้เป็นชื่อ

-N

อย่าพิมพ์คุณสมบัติชื่อโดเมนของชื่อโฮสต์ เช่นถ้าคุณใส่ค่าสถานะนี้ tcpdump จะพิมพ์ `` nic '' แทน `` nic.ddn.mil ''

-O

อย่าใช้เครื่องมือเพิ่มประสิทธิภาพรหัสจับคู่ packet นี้จะเป็นประโยชน์เฉพาะในกรณีที่คุณสงสัยว่าข้อผิดพลาดในการเพิ่มประสิทธิภาพ

-p

อย่า วางอินเทอร์เฟซไว้ในโหมดสำส่อน โปรดทราบว่าอินเทอร์เฟซอาจอยู่ในโหมดสำส่อนด้วยเหตุผลอื่น เพราะฉะนั้น `-p 'ไม่สามารถใช้เป็นตัวย่อสำหรับ` อีเทอร์โฮสต์ {local-hw-addr} หรือ ether broadcast'

-q

เอาท์พุทด่วน (เงียบ?) พิมพ์ข้อมูลโพรโทคอลน้อยลงเพื่อให้เส้นผลผลิตสั้นลง

-R

สมมติว่าแพ็คเก็ต ESP / AH จะอิงตามข้อกำหนดเก่า (RFC1825 ถึง RFC1829) หากระบุไว้ tcpdump จะไม่พิมพ์เขตป้องกันการเล่นใหม่ เนื่องจากไม่มีฟิลด์โปรโตคอลในข้อกำหนด ESP / AH tcpdump จึงไม่สามารถอนุมานได้ว่าเป็นเวอร์ชันของโปรโตคอล ESP / AH

-r

อ่านแพ็กเก็ตจาก ไฟล์ (ซึ่งถูกสร้างขึ้นโดยใช้ตัวเลือก -w) อินพุตมาตรฐานใช้ถ้า ไฟล์ เป็น `` - ''

-S

พิมพ์แบบสัมบูรณ์มากกว่าญาติหมายเลขลำดับ TCP

-s

Snarf snaplen ไบต์ของข้อมูลจากแต่ละแพ็กเก็ตแทนที่จะเป็นค่าดีฟอลต์ของ 68 (ด้วย NIT ของ SunOS ค่าต่ำสุดคือ 96) 68 ไบต์เพียงพอสำหรับ IP, ICMP, TCP และ UDP แต่อาจตัดทอนข้อมูลโปรโตคอลจากเซิร์ฟเวอร์ชื่อและแพคเก็ต NFS (ดูด้านล่าง) แพ็คเก็ตที่ถูกตัดทอนเนื่องจากมี snapshot แบบ จำกัด จะแสดงในเอาท์พุทด้วย `` [| proto ] '"โดยที่ โปรโต เป็นชื่อระดับโพรโทคอลที่การตัดทอนเกิดขึ้น โปรดทราบว่าการนำภาพรวมขนาดใหญ่ขึ้นจะช่วยเพิ่มระยะเวลาในการประมวลผลแพ็คเก็ตและลดจำนวนบัฟเฟอร์ของแพ็คเก็ตได้อย่างมีประสิทธิภาพ ซึ่งอาจทำให้แพ็คเก็ตสูญหายได้ คุณควร จำกัด snaplen ให้เป็นจำนวนน้อยที่สุดที่จะจับข้อมูลโปรโตคอลที่คุณสนใจการตั้งค่า snaplen เป็น 0 หมายถึงใช้ความยาวที่ต้องการเพื่อจับแพ็คเก็ตทั้งหมด

-T

บังคับให้แพ็คเก็ตที่เลือกโดย " นิพจน์ " จะตีความ ชนิดที่ ระบุ ปัจจุบันชนิดที่รู้จัก ได้แก่ cnfp (โปรโตคอล Cisco NetFlow), rpc (Remote Procedure Call), rtp (Real-Time Applications protocol), rtcp (โปรแกรมควบคุมโปรโตคอลเรียลไทม์), SNMP (Simple Network Management Protocol), vat (Visual Audio Tool ) และ wb (กระจาย White Board)

t-

อย่า พิมพ์ timestamp ในบรรทัดการถ่ายโอนข้อมูลแต่ละรายการ

-tt

พิมพ์การประทับเวลาที่ไม่ได้จัดรูปแบบในบรรทัดการถ่ายโอนข้อมูลแต่ละรายการ

-ยู

ลดสิทธิ์ root และเปลี่ยน ID ผู้ใช้เป็น ID ผู้ใช้ และกลุ่มไปยังกลุ่ม ผู้ใช้ หลัก

บันทึก! Red Hat Linux จะลดสิทธิพิเศษให้กับผู้ใช้ `` pcap '' หากไม่มีการระบุอะไรเลย

-ttt

พิมพ์เดลต้า (ในหน่วยวินาที) ระหว่างบรรทัดปัจจุบันและก่อนหน้าบนบรรทัดการถ่ายโอนข้อมูลแต่ละรายการ

-tttt

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

-ยู

พิมพ์ NFS ที่ไม่ได้เข้ารหัส

-v

(เพิ่มขึ้นเล็กน้อย) เอาต์พุต verbose ตัวอย่างเช่นเวลาที่จะอยู่ระบุความยาวรวมและตัวเลือกในแพคเก็ต IP จะถูกพิมพ์ออก นอกจากนี้ยังช่วยให้สามารถตรวจสอบความสมบูรณ์ของแพคเก็ตเพิ่มเติมได้เช่นการตรวจสอบการตรวจสอบ IP และ ICMP ส่วนหัว

-vv

ผลลัพธ์ที่มากขึ้นเรื่อย ๆ ตัวอย่างเช่นช่องเพิ่มเติมจะถูกพิมพ์ออกมาจากแพ็กเก็ตตอบ NFS และแพคเก็ต SMB จะถูกถอดรหัสอย่างเต็มที่

-vvv

ผลลัพธ์ที่มากขึ้นเรื่อย ๆ ตัวอย่างเช่น telnet SB ... SE ตัวเลือกจะพิมพ์เต็ม ด้วยตัวเลือก Telnet -X จะพิมพ์เป็นรูป hex เช่นกัน

-w

เขียนแพ็คเก็ตดิบเพื่อจัด เก็บ มากกว่าการแยกวิเคราะห์และพิมพ์ออก หลังจากนั้นสามารถพิมพ์ด้วยตัวเลือก -r เอาต์พุตมาตรฐานใช้ถ้า ไฟล์ เป็น `` - ''

-x

พิมพ์แต่ละแพ็กเก็ต (ลบส่วนหัวของระดับการเชื่อมโยง) ในรูป hex ขนาดเล็กของทั้งแพ็กเก็ตหรือไบต์ snaplen จะถูกพิมพ์ โปรดทราบว่านี่คือแพ็คเก็ต link-layer ทั้งหมดดังนั้นสำหรับเลเยอร์ลิงก์ที่ pad (เช่น Ethernet) ไบต์ padding จะถูกพิมพ์ด้วยเมื่อแพ็กเก็ตชั้นสูงกว่า padding ที่ต้องการ

-X

เมื่อพิมพ์ hex ให้พิมพ์ ascii ด้วย ดังนั้นถ้ามีการตั้งค่า -x ไว้แพ็คเก็ตจะพิมพ์เป็น hex / ascii นี้มีประโยชน์มากสำหรับการวิเคราะห์โปรโตคอลใหม่ แม้ว่าจะไม่ได้ตั้งค่า -x ไว้ก็ตามบางส่วนของแพ็คเก็ตบางส่วนอาจถูกพิมพ์ด้วย hex / ascii

การแสดงออก

เลือกแพ็กเก็ตที่จะถูกทิ้ง ถ้าไม่มี นิพจน์ จะได้รับแพ็คเก็ตทั้งหมดในสุทธิจะถูกทิ้ง มิฉะนั้นแพ็กเก็ตเฉพาะที่ นิพจน์ เป็น `จริง 'จะถูกทิ้ง

การ แสดงออก ประกอบด้วยหนึ่งหรือหลาย primitives Primitives มักประกอบด้วย id (ชื่อหรือหมายเลข) ที่นำหน้าด้วย qualifiers หนึ่งหรือมากกว่า มีสามประเภทที่แตกต่างกันของรอบคัดเลือก:

ชนิด

บ่นว่าชนิดของสิ่งที่ชื่อ id หรือหมายเลขหมายถึง ประเภทที่เป็นไปได้ ได้แก่ โฮสต์ , เน็ต และ พอร์ต เช่น `host foo ',' net 128.3 ',' port 20 ' ถ้าไม่มีการคัดเลือกประเภท โฮสต์ จะถือว่า

dir

qualifiers ระบุทิศทางการโอนเฉพาะและ / หรือจาก id เส้นทางที่เป็นไปได้คือ src , dst , src หรือ dst และ src และ dst เช่น `src foo ',' dst net 128.3 ',' src หรือ dst port ftp-data ' ถ้าไม่มี qualifier dir จะถือว่า src หรือ dst สำหรับเลเยอร์การเชื่อมโยง `null '(เช่นโปรโตคอลจุดจุดเช่นใบ) สามารถใช้นินที่ ขาเข้า และ ขาออก เพื่อระบุทิศทางที่ต้องการได้

โปรโต

qualifiers จำกัด การจับคู่กับโปรโตคอลเฉพาะ โปรโตคอลที่เป็นไปได้ ได้แก่ อีเธอร์ , fddi , tr , ip , ip6 , arp , rarp , decnet , tcp และ udp เช่น `ether src foo ',` arp net 128.3', `tcp port 21 ' หากไม่มีโพรโทคอลจะถือว่าโปรโตคอลทั้งหมดสอดคล้องกับชนิด เช่น `(ip หรือ arp หรือ rarp) src foo '(ยกเว้นหลังไม่ใช่ไวยากรณ์ทางกฎหมาย)` net bar' หมายถึง `(ip หรือ arp หรือ rarp) net bar 'และ' port 53 'หมายความว่า` src foo' `(tcp หรือ udp) พอร์ต 53 '

[`fddi 'เป็นนามแฝงของ` ether'; parser ถือว่าพวกเขาเหมือนกันเป็นความหมาย `` ระดับการเชื่อมโยงข้อมูลที่ใช้ในอินเตอร์เฟซเครือข่ายที่ระบุ '' ส่วนหัว FDDI มีแหล่งที่มาของอีเทอร์เน็ตเช่นเดียวกับที่อยู่ปลายทางและมักมีชนิดแพ็คเก็ตอีเทอร์เน็ตเช่นคุณสามารถกรองฟิลด์ FDDI เหล่านี้ได้ เช่นเดียวกับเขต Ethernet ที่คล้ายคลึงกัน ส่วนหัวของ FDDI ยังมีฟิลด์อื่น แต่คุณไม่สามารถตั้งชื่อให้ชัดเจนในนิพจน์ตัวกรอง

ในทำนองเดียวกัน `tr 'เป็นนามแฝงของ` อีเทอร์'; คำสั่งของวรรคก่อน ๆ เกี่ยวกับส่วนหัวของ FDDI จะมีผลกับส่วนหัวของ Token Ring]

นอกจากคำอธิบายข้างต้นแล้วมีคำหลัก "ดั้งเดิม" บางคำที่ไม่เป็นไปตามรูปแบบ ได้แก่ เกตเวย์การ ออกอากาศ การแสดงออกที่ น้อยลง การแสดงออกที่ มากขึ้น และเป็นเลขคณิต ทั้งหมดนี้ถูกอธิบายไว้ด้านล่าง

นิพจน์ตัวกรองที่ซับซ้อนมากขึ้นจะถูกสร้างขึ้นโดยการใช้คำ และ หรือหรือ ไม่ รวมหลักการพื้นฐาน เช่น `โฮสต์ foo ไม่ใช่พอร์ต ftp ไม่ใช่พอร์ต ftp-data ' หากต้องการบันทึกการพิมพ์รายการละคัดสรรที่เหมือนกันสามารถข้ามได้ เช่น `tcp dst port ftp หรือ ftp-data or domain 'ตรงกับ` tcp dst port ftp หรือ tcp dst port ftp-data หรือ tcp dst port domain'

อนุพันธ์ที่อนุญาตคือ

โฮสต์โฮสต์ dst

จริงถ้าฟิลด์ปลายทาง IPv4 / v6 ของแพคเก็ตเป็น โฮสต์ ซึ่งอาจเป็นที่อยู่หรือชื่อก็ได้

โฮสต์โฮสต์ src

จริงถ้าฟิลด์แหล่งที่มาของ IPv4 / v6 ของแพคเก็ตเป็น โฮสต์

โฮสต์ โฮสต์

จริงถ้าทั้งแหล่ง IPv4 / v6 หรือปลายทางของแพคเก็ตเป็น โฮสต์ การแสดงออกของโฮสต์ใด ๆ ข้างต้นสามารถ prepended กับคำหลัก ip arp , rarp หรือ ip6 ใน:

โฮสต์โฮสต์ ip

ซึ่งเทียบเท่ากับ:

อีเธอร์โปรโต \ ip และโฮสต์ โฮสต์

ถ้า โฮสต์ เป็นชื่อที่มีที่อยู่ IP หลายที่อยู่แต่ละแห่งจะได้รับการตรวจสอบสำหรับการจับคู่

ether dst ehost

จริงถ้าที่อยู่ปลายทางของอีเธอร์เน็ตคือ ehost Ehost อาจเป็นชื่อจาก / etc / ethers หรือหมายเลข (ดู ethers (3N) สำหรับรูปแบบตัวเลข)

อีเทอร์ src ehost

จริงถ้าที่อยู่อีเทอร์เน็ตเป็น ehost

อีเทอร์โฮสต์อีเทอร์

จริงถ้าแหล่งอีเธอร์เน็ตหรือที่อยู่ปลายทางเป็น ehost

เกตเวย์ โฮสต์

จริงถ้าแพคเก็ตใช้ โฮสต์ เป็นเกตเวย์ กล่าวคือแหล่งที่มาของอีเทอร์เน็ตหรือปลายทางคือ โฮสต์ แต่ไม่ได้เป็นแหล่ง IP หรือปลายทาง IP เป็น โฮสต์ โฮสต์ ต้องเป็นชื่อและต้องมีทั้งกลไกการแก้ปัญหาชื่อ - ที่ - ที่อยู่ IP ของเครื่อง (ไฟล์ชื่อโฮสต์, DNS, NIS ฯลฯ ) และตามความละเอียดที่อยู่ของโฮสต์ - ชื่อ - กับ - อีเธอร์เน็ต กลไก (/ etc / ethers ฯลฯ ) (นิพจน์ที่เทียบเท่าคือ

อีเทอร์โฮสต์ ehost และไม่โฮสต์ โฮสต์

ซึ่งสามารถใช้ได้กับชื่อหรือหมายเลขสำหรับ โฮสต์ / ehost ) ไวยากรณ์นี้ใช้ไม่ได้ในการกำหนดค่าที่เปิดใช้งาน IPv6 ในขณะนี้

สุทธิสุทธิ dst

จริงถ้า IPv4 / v6 ปลายทางที่อยู่ของแพ็กเก็ตมีหมายเลขเครือข่ายของ สุทธิ เน็ต อาจเป็นชื่อจาก / etc / networks หรือหมายเลขเครือข่าย (ดู เครือข่าย (4) เพื่อดูรายละเอียด)

สุทธิสุทธิ src

จริงถ้าแหล่งที่อยู่ IPv4 / v6 ของแพ็กเก็ตมีหมายเลขเครือข่ายของ เน็ต

สุทธิ

จริงถ้าทั้งที่อยู่ IPv4 / v6 หรือที่อยู่ปลายทางของแพ็กเก็ตมีหมายเลขเครือข่ายของ เน็ต

สุทธิ netmask หน้ากาก สุทธิ

จริงถ้าที่อยู่ IP ตรงกับ เน็ตมาสก์ที่ เฉพาะเจาะจง อาจมีคุณสมบัติเป็น src หรือ dst โปรดทราบว่าไวยากรณ์นี้ไม่ถูกต้องสำหรับเน็ตเวิร์ก IPv6

net net / len

เป็นจริงถ้าที่อยู่ IPv4 / v6 ตรงกับ net netmask len bits กว้าง อาจมีคุณสมบัติเป็น src หรือ dst

พอร์ตพอร์ต dst

จริงถ้าแพ็คเก็ตเป็น ip / tcp, ip / udp, ip6 / tcp หรือ ip6 / udp และมีค่าพอร์ตปลายทางของ พอร์ต พอร์ต สามารถเป็นตัวเลขหรือชื่อที่ใช้ใน / etc / services (ดู tcp (4P) และ udp (4P)) มีการตรวจสอบหมายเลขพอร์ตและโปรโตคอล หากมีการใช้หมายเลขหรือชื่อคลุมเครือจะมีการตรวจสอบเฉพาะหมายเลขพอร์ตเท่านั้น (เช่น พอร์ต dst 513 จะพิมพ์ข้อมูลจราจรทั้ง tcp / login และ udp / traffic และ โดเมน port จะพิมพ์ทั้ง tcp / domain และ udp / domain traffic)

พอร์ตพอร์ต src

จริงถ้าแพคเก็ตมีพอร์ตค่า พอร์ต ของ พอร์ต

พอร์ต พอร์ต

จริงถ้าพอร์ตต้นทางหรือปลายทางของแพ็คเก็ตเป็น พอร์ต นิพจน์พอร์ตใด ๆ ข้างต้นสามารถ prepended กับคำหลัก tcp หรือ udp เช่นใน:

พอร์ต พอร์ต tcp src

ซึ่งตรงกับเฉพาะแพ็คเก็ต tcp ที่มีพอร์ตต้นทางเป็น พอร์ต

ความยาว น้อยกว่า

จริงถ้าแพ็กเก็ตมีความยาวน้อยกว่าหรือเท่ากับ ความยาว นี้เทียบเท่ากับ:

len <= ยาว

ความ ยาว มากขึ้น

จริงถ้าแพ็คเก็ตมีความยาวมากกว่าหรือเท่ากับ ความยาว นี้เทียบเท่ากับ:

len> = length

โปรโตคอล ip proto

จริงถ้าแพกเก็ตเป็นแพ็คเก็ต IP (ดู IP (4P)) ของโปรโตคอลชนิด โปรโตคอล โปรโตคอล สามารถเป็นหมายเลขหรือชื่อ icmp , icmp6 , igmp , imigr , pim , ah , esp , vrrp , udp หรือ tcp โปรดทราบว่าตัวระบุ tcp , udp และ icmp เป็นคำหลักและต้องหนีไปทางเครื่องหมายทับขวา (\) ซึ่งเป็น \\ ใน C-shell โปรดทราบว่านี้ดั้งเดิมไม่ไล่ล่าโซ่โปรโตคอลส่วนหัว

โปรโตคอล ip6 proto

จริงถ้าแพคเก็ตเป็นแพคเก็ต IPv6 ของโปรโตคอลโปรโตคอลชนิด โปรดทราบว่านี้ดั้งเดิมไม่ไล่ล่าโซ่โปรโตคอลส่วนหัว

protochain โปรโตคอล ip6

จริงถ้าแพ็กเก็ตเป็นแพ็คเก็ต IPv6 และมีส่วนหัวโปรโตคอลที่มีโปรโตคอลชนิดในส่วนหัวของโพรโทคอล ตัวอย่างเช่น,

ip6 protochain 6

ตรงกับแพคเก็ต IPv6 ใด ๆ ที่มีส่วนหัวของโปรโตคอล TCP ในส่วนหัวของโพรโทคอล แพคเก็ตอาจประกอบด้วยส่วนหัวของการตรวจสอบส่วนหัวของเส้นทางหรือส่วนหัวของตัวเลือก hop-by-hop ระหว่างส่วนหัวของ IPv6 กับส่วนหัวของ TCP รหัส BPF ที่ปล่อยออกมาจากความดั้งเดิมนี้มีความซับซ้อนและไม่สามารถปรับให้เหมาะสมโดยใช้รหัสเพิ่มประสิทธิภาพ BPF ใน tcpdump ดังนั้นจึงอาจเป็นไปได้ค่อนข้างช้า

protochain โปรโตคอล IP

เทียบเท่า โปรโตคอลโปร โตค IP6 แต่สำหรับ IPv4

อีเธอร์ออกอากาศ

จริงถ้าแพคเก็ตเป็นแพ็กเก็ตออกอากาศอีเธอร์เน็ต คำหลัก อีเธอร์ เป็นตัวเลือก

ip ออกอากาศ

จริงถ้าแพคเก็ตเป็นแพ็คเก็ตออกอากาศ IP จะตรวจสอบทั้งแบบ zero-zero และอนุพันธ์ในการออกอากาศทั้งหมดและค้นหาซับเน็ตมาสก์ภายในเครื่อง

ether multicast

จริงถ้าแพคเก็ตเป็นแพ็คเก็ต multicast Ethernet คำหลัก อีเธอร์ เป็นตัวเลือก นี่คือชวเลขสำหรับ ` อีเทอร์ [0] และ 1! = 0 '

ip multicast

True ถ้า packet เป็น IP multicast packet

multicast IP6

จริงถ้าแพ็คเก็ตเป็น IPv6 multicast packet

โปรโตคอลโปรโตคอล อีเทอร์

จริงถ้าแพ็คเก็ตเป็น โพรโทคอล แบบอีเทอร์ โปรโตคอล สามารถเป็นหมายเลขหรือหนึ่งในชื่อ ip , ip6 , arp , rarp , atalk , aarp , decnet , sca , lat , mopdl , moprc , iso , stp , ipx หรือ netbeui โปรดทราบว่าตัวระบุเหล่านี้เป็นคำหลักและต้อง Escape ด้วยเครื่องหมายแบ็คสแลช (\)

[ในกรณีของ FDDI (เช่น ` fddi protocol arp ') และ Token Ring (เช่น` tr protocol arp ') สำหรับส่วนใหญ่ของโปรโตคอลเหล่านั้นการระบุโปรโตคอลมาจากส่วนหัวของ Logical Link Control (LLC) ของ 802.2 ซึ่ง มักเป็นชั้นที่ด้านบนของ FDDI หรือ Token Ring ส่วนหัว

เมื่อกรองข้อมูลส่วนใหญ่ของโปรโตคอลใน FDDI หรือ Token Ring tcpdump จะตรวจสอบเฉพาะฟิลด์ ID โปรโตคอลของส่วนหัว LLC ในรูปแบบ SNAP ที่เรียกว่ามีตัวระบุหน่วยองค์กร (OUI) ของ 0x000000 สำหรับ Ethernet แบบห่อหุ้ม ไม่ตรวจสอบว่าแพคเก็ตอยู่ในรูปแบบ SNAP ด้วย OUI ที่ 0x000000 หรือไม่

ข้อยกเว้นคือ ISO ซึ่งจะตรวจสอบเขตข้อมูล DSAP (จุดบริการการเข้าถึงปลายทาง) และ SSAP (จุดบริการ Access Point) ของส่วนหัว LLC, stp และ netbeui ซึ่งจะตรวจสอบ DSAP ของส่วนหัว LLC และ ตาม ด้วย ตรวจสอบแพ็คเก็ตรูปแบบ SNAP ด้วย OUI 0x080007 และ Appletalk etype

ในกรณีของอีเทอร์เน็ต tcpdump จะตรวจสอบฟิลด์ชนิด Ethernet สำหรับส่วนใหญ่ของโปรโตคอลเหล่านั้น ข้อยกเว้นคือ ISO , SAP และ Netbeui ซึ่งจะตรวจสอบเฟรม 802.3 และตรวจสอบส่วนหัว LLC เหมือนกับ FDDI และ Token Ring ซึ่งจะตรวจสอบทั้ง Appletalk etype ในเฟรม Ethernet และสำหรับ SNAP รูปแบบแพ็คเก็ตเช่นเดียวกับ FDDI และ Token Ring, aarp ซึ่งจะตรวจสอบสำหรับ Appletalk ARP etype ในกรอบ Ethernet หรือ 802.2 SNAP frame ด้วย OUI 0x000000 และ ipx ซึ่งจะตรวจสอบ IPX etype ใน เฟรม Ethernet, IPX DSAP ในส่วนหัว LLC, 802.3 ที่ไม่มีการ encapsulation ส่วนหัว LLC ของ IPX และ IPX etype ในเฟรม SNAP]

decnet src host

จริงถ้าที่อยู่ต้นทาง DECNET เป็น โฮสต์ ซึ่งอาจเป็นที่อยู่ของฟอร์ม `` 10.123 '' หรือชื่อโฮสต์ DECNET [การสนับสนุนชื่อโฮสต์ DECNET จะใช้ได้เฉพาะบนระบบ Ultrix ที่กำหนดค่าให้เรียกใช้ DECNET]

decnet โฮสต์ dst

จริงถ้าที่อยู่ปลายทาง DECNET เป็น โฮสต์

decnet host

จริงถ้าแหล่งที่มา DECNET หรือที่อยู่ปลายทางเป็น โฮสต์

ip , ip6 , arp , rarp , atalk , aarp , decnet , iso , stp , ipx , netbeui

คำย่อสำหรับ:

โพรโทคอลอีเทอร์

ที่ p เป็นหนึ่งในโปรโตคอลข้างต้น

lat , moprc , mopdl

คำย่อสำหรับ:

โพรโทคอลอีเทอร์

ที่ p เป็นหนึ่งในโปรโตคอลข้างต้น โปรดทราบว่าปัจจุบัน tcpdump ไม่ทราบวิธีแยกวิเคราะห์โปรโตคอลเหล่านี้

vlan [vlan_id]

จริงถ้าแพคเก็ตเป็นแพคเก็ต VLAN IEEE 802.1Q ถ้าระบุ [vlan_id] เฉพาะจริงแพ็กเก็ตมี vlan_id ที่ ระบุเท่านั้น โปรดทราบว่าคำหลัก vlan คำแรกที่พบใน นิพจน์ จะเปลี่ยนการถอดรหัสสำหรับส่วนที่เหลือของ นิพจน์ บนสมมติฐานว่าแพคเก็ตเป็นแพคเก็ต VLAN

tcp , udp , icmp

คำย่อสำหรับ:

ip proto p หรือ ip6 proto p

ที่ p เป็นหนึ่งในโปรโตคอลข้างต้น

โปรโต โปรโตคอล iso

จริงถ้าแพคเก็ตเป็นแพคเก็ต OSI ของโพรโทคอลโปรโตคอลชนิด โปรโตคอล สามารถเป็นหมายเลขหรือหนึ่งในชื่อ clnp , esis หรือ isis

clnp , esis , isis

คำย่อสำหรับ:

iso proto p

ที่ p เป็นหนึ่งในโปรโตคอลข้างต้น โปรดทราบว่า tcpdump ทำงานไม่สมบูรณ์ในการแยกวิเคราะห์โปรโตคอลเหล่านี้

expr relop expr

True ถ้าความสัมพันธ์เก็บที่ relop เป็นหนึ่งใน>, <,> =, <=, = ,! = และ expr คือการคำนวณเลขคณิตประกอบด้วยค่าคงที่จำนวนเต็ม (แสดงในรูปแบบมาตรฐาน C) ตัวดำเนินการแบบไบนารีปกติ [ , -, *, /, &, |], โอเปอเรเตอร์ที่มีความยาวและ accessors ข้อมูลแพคเก็ตพิเศษ ในการเข้าถึงข้อมูลภายในแพ็คเก็ตใช้ไวยากรณ์ต่อไปนี้:

proto [ expr : size ]

Proto เป็นหนึ่งใน อีเทอร์, fddi, tr, ppp, slip, link, ip, arp, rarp, tcp, udp, icmp หรือ ip6 และระบุถึงชั้นโปรโตคอลสำหรับการดำเนินงานดัชนี ( ether, fddi, tr, ppp, slip และ link ทั้งหมดอ้างถึงชั้น link) โปรดทราบว่าโปรโตคอล tcp, udp และโปรโตคอลชั้นบนอื่น ๆ จะใช้ได้กับ IPv4 ไม่ใช่ IPv6 (จะได้รับการแก้ไขในอนาคต) ไบต์ออฟเซตเทียบกับชั้นโปรโตคอลที่ระบุจะได้รับโดย expr ขนาด เป็นตัวเลือกและระบุจำนวนไบต์ในฟิลด์ที่สนใจ อาจเป็นหนึ่งสองหรือสี่และค่าเริ่มต้นเป็นหนึ่ง ตัวดำเนินการความยาวที่ระบุโดย len คำอธิบายความยาวของแพ็กเก็ต

ตัวอย่างเช่น ` อีเทอร์ [0] และ 1! = 0 'จะจับการรับส่งข้อมูลแบบหลายผู้รับทั้งหมด นิพจน์ ` ip [0] & 0xf! = 5 'จะจับแพ็คเก็ต IP ทั้งหมดพร้อมตัวเลือก นิพจน์ ' ip [6: 2] & 0x1fff = 0 ' จะจับเฉพาะ datagrams ที่ไม่จัดระเบียบและศูนย์ frag ของดาต้า เซ็ตที่ กระจัดกระจาย การตรวจสอบนี้ถูกใช้โดยนัยสำหรับการดำเนินการดัชนี tcp และ udp เช่น tcp [0] เสมอหมายถึงไบต์แรกของ ส่วนหัว TCP และไม่เคยหมายถึงไบต์แรกของส่วนแทรกแซง

ค่าออฟเซ็ตและฟิลด์บางค่าอาจแสดงเป็นชื่อแทนที่เป็นค่าตัวเลข โปรโตคอลฟิลด์ฟิลด์ต่อไปนี้มีการชดเชย: icmptype (ชนิด ICMP ฟิลด์), icmpcode (ICMP code field) และ tcpflags (TCP flags field)

ค่าฟิลด์ชนิด ICMP ต่อไปนี้มีให้ใช้งาน: icmp-echoreply , icmp-unreach , icmp-sourcequench , icmp -redirect , icmp -echo , icmp -routeradvert , icmp -routersolicit , icmp-timxceed , icmp-paramprob , icmp-tstamp , icmp -tstampreply , icmp -ireq , icmp -ireqreply , icmp-maskreq , icmp-maskreply

มีค่าฟิลด์ค่าสถานะ TCP ต่อไปนี้: tcp-fin , tcp-syn , tcp-rst , tcp-push , tcp-push , tcp-ack , tcp-urg

primitives อาจรวมกันโดยใช้:

กลุ่มของกลุ่มดั้งเดิมและโอเปอเรเตอร์ (วงเล็บเป็นพิเศษสำหรับเชลล์และต้องหนี)

การปฏิเสธ (` ! 'หรือ` not ')

การต่อสายอักขระ (` && 'หรือ` และ ')

การสลับ (` || 'หรือ` or ')

การปฏิเสธมีลำดับความสำคัญสูงสุด สลับและ concatenation มีความสำคัญเท่ากันและเชื่อมโยงจากซ้ายไปขวา โปรดทราบว่าตอนนี้จำเป็นต้องมีการระบุข้อมูลที่ชัดเจน และ โทเค็นไม่ใช่การตีข่าว

หากระบุตัวระบุโดยไม่มีคำหลักจะถือว่าคำหลักล่าสุดเป็นคำหลัก ตัวอย่างเช่น,

ไม่เป็นเจ้าบ้านและเอซ

ย่อมาจาก

ไม่ใช่เจ้าบ้านและเจ้าบ้านเอซ

ซึ่งไม่ควรสับสนกับ

ไม่ใช่ (host vs หรือ ace)

เอ็กซ์เพรสอาร์กิวเมนต์สามารถส่งผ่านไปยัง tcpdump เป็นอาร์กิวเมนต์เดียวหรือเป็นอาร์กิวเมนต์ได้หลายข้อแล้วแต่ว่าจะสะดวกกว่า โดยทั่วไปถ้าการแสดงออกมี metacharacters ของเชลล์การส่งผ่านอาร์เรย์เดียวจะง่ายกว่า อาร์กิวเมนต์หลายตัวจะถูกเว้นวรรคก่อนที่จะถูกแยกวิเคราะห์

ตัวอย่าง

หากต้องการพิมพ์แพ็คเก็ตทั้งหมดที่เดินทางมาถึงหรือออกจาก พระอาทิตย์ขึ้น :

โฮสต์ tcpdump เจ้าอาวาส

เพื่อพิมพ์การจราจรระหว่าง helios และทั้ง ร้อน หรือ เอซ :

tcpdump โฮสต์ helios และ \ (ร้อนหรือเอซ \)

เมื่อต้องการพิมพ์แพคเก็ต IP ทั้งหมดระหว่าง เอซ และโฮสต์ใด ๆ ยกเว้น helios :

tcpdump host ip ace และไม่ helios

เมื่อต้องการพิมพ์การรับส่งข้อมูลระหว่างโฮสต์ภายในเครื่องและโฮสต์ทั้งหมดที่ Berkeley:

tcpdump สุทธิ ucb อีเทอร์

พิมพ์การเข้าชม FTP ทั้งหมดผ่านอินเทอร์เน็ตเกตเวย์ snup : (โปรดทราบว่านิพจน์ถูกยกมาเพื่อป้องกันไม่ให้เปลือกจาก (mis-) แปลความในวงเล็บ):

tcpdump 'เกตเวย์ snup และ (พอร์ต ftp หรือ ftp-data)'

ในการพิมพ์การเข้าชมที่ไม่ได้มาจากหรือถูกกำหนดสำหรับโฮสต์ท้องถิ่น (หากคุณเข้าสู่เน็ตอื่น ๆ สิ่งนี้ไม่ควรนำมาวางบนเครือข่ายภายในประเทศของคุณ)

ip tcpdump และไม่สุทธิ เน็ตเวิร์ก

เมื่อต้องการพิมพ์แพคเก็ตเริ่มต้นและสิ้นสุด (แพคเก็ต SYN และ FIN) ของการสนทนา TCP แต่ละครั้งที่เกี่ยวข้องกับโฮสต์ที่ไม่ใช่ท้องถิ่น

tcpdump 'tcp [tcpflags] & (tcp-syn | tcp-fin)! = 0 และไม่ src และ dst netnetnet '

เมื่อต้องการพิมพ์แพคเก็ต IP ที่มีความยาวมากกว่า 576 ไบต์ที่ส่งผ่านเกตเวย์ snup :

tcpdump 'เกตเวย์ snup และ ip [2: 2]> 576'

หากต้องการพิมพ์แพ็กเก็ต IP broadcast หรือ multicast ที่ ไม่ได้ ส่งผ่านอีเธอร์เน็ต broadcast หรือ multicast:

tcpdump 'ether [0] & 1 = 0 และ ip [16]> = 224'

หากต้องการพิมพ์ ICMP packets ทั้งหมดที่ไม่ใช่ echo requests / replies (กล่าวคือไม่ใช่ ping packets):

tcpdump 'icmp [icmptype]! = icmp-echo และ icmp [icmptype]! = icmp-echoreply'

OUTPUT FORMAT

ผลลัพธ์ของ tcpdump ขึ้นอยู่กับโปรโตคอล ต่อไปนี้ให้คำอธิบายโดยย่อและตัวอย่างของรูปแบบส่วนใหญ่

ส่วนหัวระดับลิงก์

หากได้รับตัวเลือก '-e' จะมีการพิมพ์ส่วนหัวระดับลิงก์ ใน ethernets จะมีการพิมพ์ที่อยู่ต้นทางและปลายทางโปรโตคอลและความยาวแพ็คเก็ต

บนเครือข่าย FDDI ตัวเลือก '-e' จะทำให้ tcpdump พิมพ์ฟิลด์ `frame control 'ที่อยู่ต้นทางและปลายทางและความยาวของแพ็กเก็ต (ฟิลด์ `frame control 'จะควบคุมการตีความส่วนที่เหลือของแพคเก็ตแพ็กเก็ตปกติ (เช่น IP datagrams) เป็นแพ็คเก็ต` async' โดยมีลำดับความสำคัญอยู่ระหว่าง 0 ถึง 7 ตัวอย่างเช่น ` async4 'เช่น แพคเก็ตจะสันนิษฐานว่ามีแพคเก็ตการควบคุมการเชื่อมโยงแบบลอจิคัล 802.2 (LLC) ส่วนหัว LLC จะถูกพิมพ์ออกมาถ้า ไม่ใช่ เดตาแกรม ISO หรือแพคเก็ต SNAP ที่เรียกว่า

บนเครือข่าย Token Ring ตัวเลือก '-e' จะทำให้ tcpdump พิมพ์ฟิลด์ `access control 'และ` frame control' ที่อยู่ต้นทางและปลายทางและความยาวของแพคเก็ต เช่นเดียวกับในเครือข่าย FDDI แพ็คเก็ตจะถือว่ามีแพคเก็ต LLC ไม่ว่าจะมีการระบุอ็อพชัน '-e' หรือไม่ข้อมูลเกี่ยวกับการกำหนดเส้นทางต้นทางจะถูกพิมพ์สำหรับแพ็กเก็ตที่รับส่งข้อมูล

(หมายเหตุ: คำอธิบายต่อไปนี้จะใช้ความคุ้นเคยกับอัลกอริธึมการบีบอัด SLIP ที่อธิบายไว้ใน RFC-1144)

ในลิงก์ SLIP จะมีการพิมพ์ตัวบ่งชี้ทิศทาง ("ฉัน" สำหรับขาเข้า "O" สำหรับขาออก) ประเภทของแพ็กเก็ตและข้อมูลการบีบอัด ชนิดของแพคเก็ตจะถูกพิมพ์ออกมาก่อน ทั้งสามประเภทคือ ip , utcp และ ctcp ไม่มีข้อมูลการเชื่อมโยงเพิ่มเติมสำหรับแพ็คเก็ต ip สำหรับ TCP packets ตัวระบุการเชื่อมต่อจะถูกพิมพ์ตามชนิด ถ้าแพคเก็ตถูกบีบอัดหัวพิมพ์ที่เข้ารหัสจะถูกพิมพ์ออกมา กรณีพิเศษจะพิมพ์ออกมาเป็น * S + n และ * SA + n โดยที่ n คือจำนวนที่มีการเปลี่ยนแปลงหมายเลขลำดับ (หรือลำดับเลขและ ack) ถ้าไม่ใช่กรณีพิเศษให้พิมพ์ศูนย์หรือมากกว่านั้น การเปลี่ยนแปลงจะแสดงด้วย U (ตัวชี้ด่วน), W (หน้าต่าง), A (ack), S (หมายเลขลำดับ) และ I (ID แพคเกต) ตามด้วย delta (+ n หรือ -n) หรือค่าใหม่ (n =) สุดท้ายจำนวนข้อมูลในแพ็กเก็ตและความยาวส่วนหัวที่บีบอัดจะถูกพิมพ์ออกมา

ตัวอย่างเช่นบรรทัดต่อไปนี้แสดงแพคเก็ต TCP ที่บีบอัดขาออกโดยมีตัวระบุการเชื่อมต่อโดยนัย ack มีการเปลี่ยนแปลงโดย 6 จำนวนลำดับโดย 49 และ ID แพ็คเก็ตโดย 6; มี 3 ไบต์ของข้อมูลและ 6 ไบต์ของส่วนหัวที่บีบอัด:

O ctcp * A + 6 S + 49 I + 6 3 (6)

แพ็กเก็ต ARP / RARP

ผลลัพธ์ Arp / rarp แสดงประเภทของคำขอและอาร์กิวเมนต์ รูปแบบนี้มีจุดมุ่งหมายเพื่ออธิบายตนเอง นี่คือตัวอย่างสั้น ๆ ที่นำมาจากจุดเริ่มต้นของ `rlogin 'จากโฮสต์ rtsg ไปยังโฮสต์ csam :

arp ที่มี csam บอก rtsg arp ตอบ csam คือที่ CSAM

บรรทัดแรกบอกว่า rtsg ส่งแพ็คเก็ต arp เพื่อขอที่อยู่อีเธอร์เน็ตของ csam อินเทอร์เน็ตโฮสต์ Csam ตอบกลับด้วยที่อยู่อีเทอร์เน็ต (ในตัวอย่างนี้ที่อยู่อีเทอร์เน็ตอยู่ในตัวพิมพ์ใหญ่และที่อยู่อินเทอร์เน็ตเป็นตัวพิมพ์เล็ก)

นี้จะมีลักษณะซ้ำซ้อนน้อยถ้าเราได้ทำ tcpdump - n :

arp ที่มี 128.3.254.6 บอก 128.3.254.68 ตอบ arp 128.3.254.6 อยู่ที่ 02: 07: 01: 00: 01: c4

ถ้าเราทำ tcpdump -e ความจริงที่ว่าแพ็กเก็ตแรกจะออกอากาศและที่สองคือจุดต่อจุดจะมองเห็นได้:

RTSG Broadcast 0806 64: arp ที่มี csam บอก rtsg CSAM RTSG 0806 64: ตอบ arp csam อยู่ที่ CSAM

สำหรับแพคเก็ตแรกนี้กล่าวว่าที่อยู่อีเทอร์เน็ตเป็น RTSG ปลายทางคือที่อยู่ broadcast ethernet ฟิลด์ type มี hex 0806 (type ETHER_ARP) และความยาวทั้งหมดคือ 64 ไบต์

TCP Packets

(หมายเหตุ: คำอธิบายต่อไปนี้จะสันนิษฐานคุ้นเคยกับโปรโตคอล TCP ที่อธิบายไว้ใน RFC-793 หากคุณไม่คุ้นเคยกับโปรโตคอลไม่ว่าคำอธิบายนี้หรือ tcpdump จะเป็นประโยชน์กับคุณ)

รูปแบบทั่วไปของบรรทัดโปรโตคอล tcp คือ:

src> dst: flag data-seqno ack หน้าต่างตัวเลือกเร่งด่วน

Src และ dst คือที่อยู่ IP และพอร์ตปลายทางของแหล่งที่มาและปลายทาง ธง คือชุดค่าผสมของ S (SYN), F (FIN), P (PUSH) หรือ R (RST) หรือ ". (ไม่มีสถานะ) ข้อมูล - seqno อธิบายส่วนของลำดับพื้นที่ที่ครอบคลุมข้อมูลในแพ็คเก็ตนี้ (ดูตัวอย่างด้านล่าง) Ack คือหมายเลขลำดับของข้อมูลถัดไปที่คาดว่าจะมีทิศทางอื่นในการเชื่อมต่อนี้ หน้าต่าง คือจำนวนไบต์ของพื้นที่รับบัฟเฟอร์ที่มีอยู่ในทิศทางอื่นในการเชื่อมต่อนี้ Urg ระบุว่ามีข้อมูล `เร่งด่วน 'ในแพ็กเก็ต ตัวเลือก คือ ตัวเลือก tcp ที่อยู่ในวงเล็บมุม (เช่น )

Src, dst และ ธง อยู่เสมอ ฟิลด์อื่น ๆ ขึ้นอยู่กับเนื้อหาของส่วนหัวของโปรโตคอล tcp ของแพคเก็ตและจะแสดงผลตามความเหมาะสมเท่านั้น

นี่คือส่วนที่เปิดของ rlogin จากโฮสต์ rtsg ไปยังโฮสต์ csam

rtsg.1023> csam.login: S 768512: 768512 (0) ชนะ 4096 csam.login> rtsg.1023: S 947648: 947648 (0) ack 768513 ชนะ 4096 rtsg.1023> csam. เข้าสู่ระบบ: . ack 1 win 4096 rtsg.1023> csam.login: P 1: 2 (1) ack 1 win 4096 csam.login> rtsg.1023:. ack 2 ชนะ 4096 rtsg.1023> csam.login: P 2:21 (19) ack 1 ชนะ 4096 csam.login> rtsg.1023: P 1: 2 (1) ack 21 win 4077 csam.login> rtsg.1023: P 2: 3 (1) ack 21 win 4077 urg 1 csam.login> rtsg.1023: P 3: 4 (1) ack 21 win 4077 urg 1

บรรทัดแรกกล่าวว่าพอร์ต tcp 1023 บน rtsg ส่งแพ็กเก็ต เข้าสู่ระบบ พอร์ตบน csam เครื่องหมาย S ระบุว่ามีการตั้งค่าธง SYN หมายเลขลำดับแพ็คเก็ตเป็น 768512 และไม่มีข้อมูล (สัญกรณ์คือ `first: last (nbytes) 'ซึ่งหมายถึง` หมายเลขลำดับ แรก ขึ้นไป แต่ไม่รวมถึง last bytes ซึ่งเป็น nbytes bytes ของ user data') ไม่มี ack ที่รองรับ piggy-back ได้หน้าต่างที่มีอยู่คือ 4096 bytes และ มีตัวเลือกแบบสูงสุดที่มีการร้องขอ mss 1024 ไบต์

Csam ตอบกลับด้วยแพ็คเก็ตที่คล้ายกันยกเว้นว่ามี ack ที่ได้รับ Piggy สำหรับ SYN ของ rtsg Rtsg แล้ว SYN SYMA ของ acks csam `. ' หมายความว่าไม่มีการตั้งธงไว้ แพคเก็ตไม่มีข้อมูลดังนั้นไม่มีหมายเลขลำดับข้อมูล โปรดสังเกตว่าหมายเลขลำดับ ack เป็นจำนวนเต็มเล็ก (1) tcpdump ครั้งแรกเห็น tcp `การสนทนา 'จะพิมพ์หมายเลขลำดับจากแพ็คเก็ต ในแพ็คเก็ตที่ตามมาของการสนทนาจะมีการพิมพ์ความแตกต่างระหว่างหมายเลขลำดับของแพคเก็ตปัจจุบันและหมายเลขลำดับแรกเริ่มนี้ ซึ่งหมายความว่าตัวเลขลำดับแรกหลังจากถูกตีความว่าเป็นตำแหน่งไบต์สัมพัทธ์ในสตรีมข้อมูลของการสนทนา (โดยไบต์ข้อมูลตัวแรกซึ่งเป็นทิศทางของ `1 ') `-S 'จะลบล้างคุณลักษณะนี้ทำให้หมายเลขลำดับแรกจะถูกส่งออก

ในบรรทัดที่ 6 rtsg จะส่งข้อมูล csam 19 ไบต์ (ไบต์ 2 ถึง 20 ในด้าน rtsg -> csam ของการสนทนา) ธง PUSH ถูกตั้งค่าไว้ในแพ็กเก็ต ในบรรทัดที่ 7 csam กล่าวว่าได้รับข้อมูลที่ส่งโดย rtsg ถึง แต่ไม่รวมไบต์ 21. ข้อมูลส่วนใหญ่นี้เห็นได้ชัดว่านั่งอยู่ในบัฟเฟอร์ของซ็อกเก็ตเนื่องจากหน้าต่างรับของ csam มีขนาดเล็กกว่า 19 ไบต์ Csam ยังส่งข้อมูลหนึ่งไบต์ไปยัง rtsg ในแพ็คเก็ตนี้ ในบรรทัดที่ 8 และ 9 csam จะส่งข้อมูลเร่งด่วนสองไบต์ไปยัง rtsg

ถ้าสแน็ปช็อตมีขนาดเล็กพอที่ tcpdump ไม่ได้จับส่วนหัว TCP เต็มรูปแบบจะแปลความหมายของส่วนหัวได้มากที่สุดเท่าที่จะทำได้และรายงาน `` [ tcp ] '' เพื่อระบุส่วนที่เหลือไม่สามารถตีความได้ ถ้าส่วนหัวมีตัวเลือกปลอม (หนึ่งที่มีความยาวที่เล็กเกินไปหรือเกินกว่าส่วนท้ายของส่วนหัว) tcpdump รายงานว่าเป็น "ตัว เลือกแย่ ๆ " และไม่ตีความตัวเลือกใด ๆ เพิ่มเติม (เนื่องจากเป็นไปไม่ได้ที่จะบอก ที่พวกเขาเริ่มต้น) ถ้าความยาวส่วนหัวระบุว่ามีตัวเลือกอยู่ แต่ความยาวของ datagram IP ไม่เพียงพอสำหรับตัวเลือกที่จะมีอยู่จริง tcpdump รายงานว่าเป็น `` [ hdr hr ไม่ถูกต้อง ] ''

จับ TCP แพ็คเก็ตที่มีการรวมธงโดยเฉพาะ (SYN-ACK, URG-ACK ฯลฯ )

มี 8 บิตในส่วนบิตควบคุมของส่วนหัว TCP:

CWR | ECE | URG | ACK | PSH | RST | SYN | ครีบ

สมมติว่าเราต้องการดูแพ็กเก็ตที่ใช้ในการสร้างการเชื่อมต่อ TCP จำได้ว่า TCP ใช้โปรโตคอลการจับมือกัน 3 ทางเมื่อเริ่มต้นการเชื่อมต่อใหม่ ลำดับการเชื่อมต่อเกี่ยวกับบิตการควบคุม TCP คือ

1) ผู้โทรส่ง SYN

2) ผู้รับตอบสนองต่อ SYN, ACK

3) ผู้โทรจะส่ง ACK

ตอนนี้เราสนใจในการจับภาพแพ็กเก็ตที่มีเฉพาะชุด SYN bit (ขั้นตอนที่ 1) โปรดทราบว่าเราไม่ต้องการให้แพ็กเก็ตจากขั้นตอนที่ 2 (SYN-ACK) เพียง SYN เริ่มต้นธรรมดา สิ่งที่เราต้องการคือนิพจน์ตัวกรองที่ถูกต้องสำหรับ tcpdump

เรียกโครงสร้างของส่วนหัว TCP โดยไม่มีตัวเลือก:

0 15 31 ----------------------------------------------- ------------------ | พอร์ตต้นทาง ปลายทางปลายทาง | -------------------------------------------------- --------------- | หมายเลขลำดับ -------------------------------------------------- --------------- | หมายเลขการรับทราบ -------------------------------------------------- --------------- | HL | rsvd | C | E | U | A | P | R | S | F | ขนาดหน้าต่าง -------------------------------------------------- --------------- | TCP checksum | ตัวชี้ด่วน | -------------------------------------------------- ---------------

ส่วนหัว TCP จะเก็บข้อมูล 20 octets เว้นแต่มีตัวเลือกอยู่ บรรทัดแรกของกราฟมี octets 0 - 3 บรรทัดที่สองแสดง octets 4 - 7 เป็นต้น

เริ่มนับด้วย 0 บิตควบคุม TCP ที่เกี่ยวข้องมีอยู่ใน octet 13:

0 7 | 15 | 23 | 31 ---------------- | --------------- | --------------- | ---------------- | HL | rsvd | C | E | U | A | P | R | S | F | ขนาดหน้าต่าง ---------------- | --------------- | --------------- | - --------------- | | Octet 13 | | |

ลองดูที่ octet no. 13:

| | | --------------- | | C | E | U | A | P | R | S | F | | --------------- | | 7 5 3 0 |

นี่เป็นบิตควบคุมของ TCP ที่เราสนใจเราได้นับบิตใน octet นี้ตั้งแต่ 0 ถึง 7 จากขวาไปซ้ายดังนั้นบิต PSH คือหมายเลขบิต 3 ในขณะที่บิต URG เป็นหมายเลข 5

จำได้ว่าเราต้องการจับแพ็กเก็ตที่มีชุด SYN เท่านั้น ลองดูว่าเกิดอะไรขึ้นกับ octet 13 ถ้ามีการส่งข้อมูลไปยัง datagram TCP โดยมีบิต SYN ที่ตั้งไว้ในส่วนหัวของไฟล์:

| C | E | U | A | P | R | S | F | | --------------- | | 0 0 0 0 0 0 1 0 | | --------------- | | 7 6 5 4 3 2 1 0 |

เมื่อดูที่ส่วนของบิตควบคุมเราจะเห็นว่ามีการตั้งค่าบิตจำนวน 1 (SYN) ไว้เท่านั้น

สมมติว่าเลขอะตอมจำนวน 13 เป็นจำนวนเต็มแบบไม่ระบุชื่อ 8 บิตในลำดับไบต์ของเครือข่ายค่าไบนารีของ octet นี้คือ

00000010

และการแทนทศนิยมคือ

7 6 5 4 3 2 1 0 0 * 2 + 0 * 2 + 0 * 2 + 0 * 2 + 0 * 2 + 0 * 2 + 1 * 2 + 0 * 2 = 2

เราเกือบจะเสร็จสิ้นแล้วเพราะตอนนี้เรารู้ว่าถ้าตั้งค่า SYN ไว้เท่านั้นค่าของ Octet 13 ในส่วนหัวของ TCP เมื่อแปลเป็นจำนวนเต็มแบบไม่ระบุชื่อ 8 บิตในลำดับไบต์ของเครือข่ายจะต้องเท่ากับ 2

ความสัมพันธ์นี้สามารถแสดงเป็น

tcp [13] == 2

เราสามารถใช้นิพจน์นี้เป็นตัวกรองสำหรับ tcpdump เพื่อดูแพ็กเก็ตที่มีชุด SYN เท่านั้น:

tcpdump -i xl0 tcp [13] == 2

นิพจน์ดังกล่าวระบุว่า "ปล่อยให้ datagram TCP ที่ 13 มีค่าทศนิยม 2" ซึ่งตรงกับที่เราต้องการ

ตอนนี้สมมุติว่าเราต้องจับแพ็คเก็ต SYN แต่เราไม่สนใจว่าจะมีการตั้งค่า ACK หรือบิตควบคุม TCP ไว้ในเวลาเดียวกัน ลองดูว่าเกิดอะไรขึ้นกับ octet 13 เมื่อดาต้า TCP ที่มีชุด SYN-ACK มาถึง:

| C | E | U | A | P | R | S | F | | --------------- | | 0 0 0 1 0 0 1 0 | | --------------- | | 7 6 5 4 3 2 1 0 |

ตอนนี้บิต 1 และ 4 มีการตั้งค่าไว้ใน octet 13 ค่าไบนารีของ octet 13 คือ


00010010

ซึ่งแปลเป็นทศนิยม

7 6 5 4 3 2 1 0 0 * 2 + 0 * 2 + 0 * 2 + 1 * 2 + 0 * 2 + 0 * 2 + 1 * 2 + 0 * 2 = 18

ตอนนี้เราไม่สามารถใช้ 'tcp [13] == 18' ในนิพจน์ตัวกรอง tcpdump เนื่องจากจะเลือกเฉพาะแพ็คเก็ตที่มีชุด SYN-ACK แต่ไม่ใช่เฉพาะชุด SYN เท่านั้น โปรดจำไว้ว่าเราไม่สนใจว่าจะมีการตั้งค่า ACK หรือบิตควบคุมอื่น ๆ ตราบเท่าที่มีการตั้งค่า SYN ไว้หรือไม่

เพื่อให้บรรลุเป้าหมายของเราเราจำเป็นต้องมีเหตุผลและค่าไบนารีของ octet 13 ที่มีค่าอื่นเพื่อรักษาบิต SYN เรารู้ว่าเราต้องการ SYN ที่จะตั้งค่าในกรณีใด ๆ ดังนั้นเราจะมีเหตุผลและค่าใน Octet 13 มีค่าไบนารีของ SYN:

00010010 SYN-ACK 00000010 SYN และ 00000010 (เราต้องการ SYN) และ 00000010 (เราต้องการ SYN) -------- -------- = 00000010 = 00000010

เราจะเห็นว่าการดำเนินการ AND นี้ให้ผลเหมือนกันไม่ว่า ACK หรือบิตควบคุม TCP อื่นจะถูกตั้งค่าไว้ การแทนเลขทศนิยมของค่า AND รวมทั้งผลลัพธ์ของการดำเนินการนี้คือ 2 (ไบนารี 00000010) ดังนั้นเรารู้ว่าสำหรับแพ็กเก็ตที่มี SYN กำหนดความสัมพันธ์ต่อไปนี้ต้องเป็นจริง:

((ค่าของ octet 13) AND (2)) == (2)

นี่ชี้ให้เราเห็นถึงนิพจน์ตัวกรอง tcpdump

tcpdump -i xl0 'tcp [13] & 2 == 2'

โปรดทราบว่าคุณควรใช้เครื่องหมายคำพูดเดี่ยวหรือเครื่องหมายทับขวาในนิพจน์เพื่อซ่อนอักขระพิเศษ AND ('&') จากเปลือก

UDP Packets

รูปแบบ UDP แสดงโดยแพ็คเก็ต rwho นี้:

actinide.who> broadcast.who: udp 84

นี้กล่าวว่าพอร์ต ที่ โฮสต์ actinide ส่ง datagram udp ไปยังพอร์ต ที่ ออกอากาศ เป็นเจ้าภาพ ที่ อยู่ ออกอากาศ ทางอินเทอร์เน็ต แพคเก็ตมีข้อมูลผู้ใช้ 84 ไบต์

บริการ UDP บางอย่างได้รับการยอมรับ (จากหมายเลขพอร์ตต้นทางหรือปลายทาง) และพิมพ์ข้อมูลโปรโตคอลระดับสูงขึ้น โดยเฉพาะอย่างยิ่งคำขอบริการชื่อโดเมน (RFC-1034/1035) และการโทร RPC ของ Sun (RFC-1050) ไปยัง NFS

คำขอเซิร์ฟเวอร์ชื่อ UDP

(หมายเหตุ: คำอธิบายต่อไปนี้อนุมานว่าคุ้นเคยกับโปรโตคอลบริการโดเมนที่อธิบายไว้ใน RFC-1035 ถ้าคุณไม่คุ้นเคยกับโพรโทคอลคำอธิบายต่อไปนี้จะปรากฏเป็นข้อความภาษากรีก)

คำขอเซิร์ฟเวอร์ชื่อมีรูปแบบเป็น

src> dst: id op? ธง qtype ชื่อ qclass (len) h2opolo.1538> helios.domain: 3+? ucbvax.berkeley.edu (37)

โฮสต์ h2opolo ถามเซิร์ฟเวอร์โดเมนใน helios สำหรับบันทึกที่อยู่ (qtype = A) ที่เชื่อมโยงกับชื่อ ucbvax.berkeley.edu รหัสข้อความค้นหาคือ '3' `+ 'แสดงว่าได้ตั้งค่าธง ที่ต้องการ แล้ว ความยาวแบบสอบถามคือ 37 ไบต์โดยไม่รวมส่วนหัวของ UDP และ IP protocol การดำเนินการค้นหาเป็นแบบปกติ Query ดังนั้นฟิลด์ op จึงถูกละเว้น ถ้า op ได้รับอะไรอื่นมันจะถูกพิมพ์ระหว่าง `3 'และ` +' ในทำนองเดียวกัน qclass เป็นแบบปกติ C_IN และละเว้น qclass อื่น ๆ จะถูกพิมพ์ทันทีหลังจากที่ `A '

มีการตรวจสอบความผิดปกติเล็กน้อยและอาจทำให้เกิดเขตข้อมูลพิเศษที่อยู่ในวงเล็บเหลี่ยม: ถ้าแบบสอบถามประกอบด้วยคำตอบระเบียนอำนาจหรือส่วนระเบียนเพิ่มเติม ancount , nscount หรือ arcount จะพิมพ์เป็น `[ n a] ', [ n n ] หรือ `[ n au] 'โดยที่ n คือจำนวนที่เหมาะสม ถ้าบิตการตอบสนองใด ๆ ถูกตั้งค่าไว้ (AA, RA หรือ rcode) หรือบิต 'ต้องเป็นศูนย์' จะถูกตั้งเป็นไบต์สองและสามจะมีการพิมพ์ "[b2 & 3 = x ] 'โดยที่ x คือค่า hex ของ ส่วนหัวไบต์สองและสาม

การตอบสนองเซิร์ฟเวอร์ชื่อ UDP

การตอบสนองของเซิร์ฟเวอร์ชื่อมีการจัดรูปแบบเป็น

src> dst: id id rcode flag a / n / au ประเภทข้อมูลระดับ (len) helios.domain> h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273) helios.domain> h2opolo.1537: 2 NXDomain * 0/1/0 (97)

ในตัวอย่างแรก helios ตอบสนองต่อการค้นหา id 3 จาก h2opolo พร้อมด้วยระเบียนคำตอบ 3 ระเบียนระเบียนเซิร์ฟเวอร์ 3 รายการและระเบียนเพิ่มเติม 7 รายการ บันทึกคำตอบแรกคือประเภท A (ที่อยู่) และเป็นที่อยู่อินเทอร์เน็ต 128.32.137.3 ขนาดรวมของการตอบสนองคือ 273 ไบต์โดยไม่รวมส่วนหัว UDP และ IP op (Query) และรหัสตอบกลับ (NoError) ถูกละเว้นเช่นเดียวกับคลาส (C_IN) ของระเบียน A

ในตัวอย่างที่สอง helios ตอบแบบสอบถาม 2 โดยใช้รหัสการตอบกลับของโดเมนที่ไม่มีอยู่ (NXDomain) โดยไม่มีคำตอบเซิร์ฟเวอร์ชื่อหนึ่งและไม่มีระเบียนที่มีอำนาจ `* 'ระบุว่า มี การตั้งค่าบิต คำตอบที่มีสิทธิ์ เนื่องจากไม่มีคำตอบไม่มีพิมพ์ชั้นเรียนหรือข้อมูลใด ๆ

อักขระธงอื่น ๆ ที่อาจปรากฏคือ `- '(มีการทับซ้ำ RA ไม่ได้ ตั้งค่า) และ` |' (ข้อความที่ถูกตัดทอน, TC, set) หากส่วน "คำถาม" ไม่ประกอบด้วยรายการเดียว "[ n q] 'จะถูกพิมพ์

โปรดทราบว่าการร้องขอเซิร์ฟเวอร์ชื่อและการตอบสนองมีแนวโน้มที่จะใหญ่และ snaplen เริ่มต้นของ 68 ไบต์อาจไม่สามารถจับภาพได้มากพอที่จะพิมพ์แพคเก็ต ใช้ธง -s เพื่อเพิ่ม snaplen หากคุณต้องการตรวจสอบการเข้าชมเซิร์ฟเวอร์ชื่อ ` -s 128 'ทำงานได้ดีสำหรับฉัน

การถอดรหัส SMB / CIFS

ตอนนี้ tcpdump มีการถอดรหัส SMB / CIFS / NBT ที่กว้างขวางพอสมควรสำหรับข้อมูลใน UDP / 137, UDP / 138 และ TCP / 139 การถอดรหัสบางส่วนของ IPB และ NetBEUI ข้อมูล SMB ก็ทำได้เช่นกัน

โดยค่าเริ่มต้นการถอดรหัสค่อนข้างน้อยจะทำกับการถอดรหัสรายละเอียดมากขึ้นทำถ้า -V ถูกนำมาใช้ ถูกเตือนด้วยว่า -a single packet SMB อาจใช้เวลาหนึ่งหน้าหรือมากกว่านั้นดังนั้นจึงใช้ -v หากคุณต้องการรายละเอียดทั้งหมดของเลือด

ถ้าคุณกำลังถอดรหัสเซสชัน SMB ที่มีสตริง Unicode คุณอาจต้องการตั้งค่าตัวแปรสภาพแวดล้อม USE_UNICODE เป็น 1 จะมีการติดตั้งแพทช์เพื่อตรวจหาแอดเดรส Unicode โดยอัตโนมัติ

สำหรับข้อมูลเกี่ยวกับรูปแบบแพ็คเก็ต SMB และสิ่งที่ฟิลด์ทั้งหมดหมายถึงดูที่ www.cifs.org หรือ pub / samba / specs / ในไซต์กระจกที่คุณชื่นชอบของ samba.org แพทช์ SMB เขียนขึ้นโดย Andrew Tridgell (tridge@samba.org)

คำขอ NFS และการตอบกลับ

คำขอ Sun NFS (Network File System) และการตอบกลับจะพิมพ์เป็น:

src.xid> dst.nfs: len op args src.nfs> dst.xid: ตอบกลับ stat len ​​op results sushi.6709> wrl.nfs: 112 readlink fh 21,24 / 10.73165 wrl.nfs> sushi.6709: ตอบกลับตกลง 40 readlink "../var" sushi.201b> wrl.nfs: 144 การค้นหา fh 9,74 / 4096.6878 "xcolors" wrl.nfs> sushi.201b: ตอบกลับ ok 128 การค้นหา fh 9,74 / 4134.3150

ในบรรทัดแรก host sushi จะส่งธุรกรรมที่มี id 6709 เป็น wrl (โปรดทราบว่าหมายเลขตามโฮสต์ src เป็นรหัสธุรกรรม ไม่ใช่ พอร์ตต้นทาง) คำขอมีจำนวน 112 ไบต์โดยไม่รวมส่วนหัว UDP และ IP การดำเนินการคือ readlink (อ่านลิงก์สัญลักษณ์) ในไฟล์จัดการ ( fh ) 21,24 / 10.731657119 (ถ้ามีโชคดีเช่นเดียวกับในกรณีนี้หมายเลขอ้างอิงของไฟล์จะถูกตีความว่าเป็นคู่หมายเลขอุปกรณ์รายใหญ่รองลงมาด้วยหมายเลข inode และหมายเลขรุ่น) ข้อความตอบกลับ "ok" ด้วยเนื้อหาของลิงก์

ในบรรทัดที่สาม sushi จะถาม wrl เพื่อค้นหาชื่อ ` xcolors 'ในไฟล์ไดเรกทอรี 9,74 / 4096.6878 โปรดทราบว่าข้อมูลที่พิมพ์ขึ้นอยู่กับประเภทการใช้งาน รูปแบบนี้มีจุดมุ่งหมายเพื่ออธิบายตนเองหากอ่านร่วมกับข้อกำหนดของโปรโตคอล NFS

ถ้ามีการระบุค่า -v (verbose) flag จะมีการพิมพ์ข้อมูลเพิ่มเติม ตัวอย่างเช่น:

sushi.1372a> wrl.nfs: 148 อ่าน fh 21,11 / 12.195 8192 bytes @ 24576 wrl.nfs> sushi.1372a: ตอบ ok 1472 อ่าน REG 100664 ids 417/0 sz 29388

(-v จะพิมพ์ส่วน IP header TTL, ID, length และ fragmentation fields ซึ่งในตัวอย่างนี้ได้ถูกละไว้) ในบรรทัดแรก sushi จะถาม wrl อ่าน 8192 bytes จากไฟล์ 21,11 / 12.195 ที่ byte offset 24576 Wrl ตอบกลับ "ok"; แพ็คเก็ตที่แสดงในบรรทัดที่สองเป็นส่วนแรกของการตอบกลับและด้วยเหตุนี้เพียง 1472 ไบต์ยาว (ไบต์อื่น ๆ จะตามมาในชิ้นส่วนที่ตามมา แต่เศษเหล่านี้ไม่มีส่วนหัวของ NFS หรือ UDP และอาจไม่ได้รับการพิมพ์) ขึ้นอยู่กับนิพจน์ตัวกรองที่ใช้) เนื่องจากมีการพิมพ์ค่าสถานะ -v จะมีการพิมพ์แอตทริบิวต์ของไฟล์ (ซึ่งจะถูกส่งกลับนอกเหนือจากข้อมูลไฟล์): ประเภทไฟล์ ("REG" "สำหรับไฟล์ปกติ) โหมดไฟล์ (ในรูป octal) uid และ gid และขนาดไฟล์

ถ้าธง -v ถูกให้มากกว่าหนึ่งครั้งจะมีการพิมพ์รายละเอียดมากยิ่งขึ้น

โปรดทราบว่าคำขอ NFS มีขนาดใหญ่มากและรายละเอียดส่วนใหญ่จะไม่ถูกพิมพ์จนกว่า snaplen จะเพิ่มขึ้น ลองใช้ ` -s 192 'เพื่อดูการจราจร NFS

แพ็คเก็ตการตอบกลับของ NFS ไม่ได้ระบุการดำเนินการ RPC ไว้อย่างชัดเจน แต่ tcpdump จะติดตามคำร้องขอ `` ล่าสุด '' และจับคู่ข้อความตอบกลับโดยใช้ ID ธุรกรรม หากการตอบกลับไม่สอดคล้องกับคำขอที่ตรงตามข้อกำหนดอาจไม่สามารถแยกวิเคราะห์ได้

คำขอและการตอบกลับของ AFS

การร้องขอและการตอบกลับของ Transarc AFS (Andrew File System) จะพิมพ์เป็น:

src.sport> dst.dport: rx ประเภท หีบห่อ src.sport> dst.dport: rx บริการ packet-type call-name args src.sport> dst.dport: rx บริการตอบรับประเภท packet-pack ตอบชื่อเรียก args elvis 7001> pike.afsfs: rx data fs เรียกเปลี่ยนชื่อเก่า ff 536876964/1/1 ".newsrc.new" new fid 536876964/1/1 ".newsrc" pike.afsfs> elvis.7001: rx data fs reply rename

ในบรรทัดแรกเอลวิสจะส่งแพ็คเก็ต RX ไปหอก นี่เป็นชุดข้อมูล RX ไปยังบริการ fs (fileserver) และเป็นจุดเริ่มต้นของการเรียก RPC การเรียก RPC คือการเปลี่ยนชื่อโดยมีรหัสไฟล์ไดเรกทอรีเก่า 536876964/1/1 และชื่อไฟล์เก่าของ `.newsrc.new 'และรหัสไฟล์ไดเรกทอรีใหม่ของ 536876964/1/1 และชื่อไฟล์ใหม่ของ` newsrc' (ซึ่งประสบความสำเร็จเพราะเป็นแพ็คเก็ตข้อมูลไม่ใช่แพ็กเก็ตยกเลิก)

โดยทั่วไป RPC ทั้งหมดของ AFS จะถูกถอดรหัสอย่างน้อยตามชื่อการโทร RPC RPC ส่วนใหญ่ของ AFS มีอาร์กิวเมนต์ที่ถูกถอดรหัสอย่างน้อยหนึ่งชิ้น (โดยทั่วไปจะมีเฉพาะอาร์กิวเมนต์ "น่าสนใจ" เท่านั้นสำหรับคำจำกัดความที่น่าสนใจบางอย่าง)

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

ถ้ามีการระบุค่า -v (verbose) ไว้สองครั้งแพ็คเก็ตรับทราบและข้อมูลส่วนหัวเพิ่มเติมจะถูกพิมพ์ออกเช่นหมายเลขสายการโทรหมายเลขลำดับหมายเลขหมายเลขซีเรียลและธงแพ็คเก็ต RX

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

ถ้ามีการใส่ค่าสถานะ -v สามครั้งระบบจะพิมพ์ดัชนีความปลอดภัยและรหัสบริการ

รหัสข้อผิดพลาดจะถูกพิมพ์สำหรับยกเลิกแพ็คเก็ตยกเว้น Ubik beacon packets (เนื่องจากแพ็คเก็ตยกเลิกใช้เพื่อระบุการลงคะแนน yes สำหรับ Ubik protocol)

โปรดทราบว่าการร้องขอ AFS มีขนาดใหญ่มากและอาร์กิวเมนต์จำนวนมากจะไม่ถูกพิมพ์จนกว่า snaplen จะเพิ่มขึ้น ลองใช้ ` -s 256 'เพื่อดูการเข้าชม AFS

แพ็คเก็ตตอบ AFS ไม่ระบุการดำเนินการ RPC อย่างชัดแจ้ง แทน tcpdump ติดตามการร้องขอ `` ล่าสุด '' และตรงกับการตอบกลับโดยใช้หมายเลขโทรศัพท์และหมายเลขบริการ หากการตอบกลับไม่สอดคล้องกับคำขอที่ตรงตามข้อกำหนดอาจไม่สามารถแยกวิเคราะห์ได้

KIP Appletalk (DDP ใน UDP)

แพคเก็ต Appletalk DDP ที่ห่อหุ้มไว้ในดาต้าแกรม UDP จะถูกห่อหุ้มและทิ้งเป็นแพ็คเก็ต DDP (เช่นข้อมูลส่วนหัว UDP ทั้งหมดจะถูกละทิ้ง) ไฟล์ /etc/atalk.names ใช้ในการแปลหมายเลขสุทธิและโหนดแอ็ปพลิเคชันให้กับชื่อ บรรทัดในไฟล์นี้มีรูปแบบ

ชื่อหมายเลข 1.254 อีเทอร์ 16.1 icsd-net 1.254.110 ace

สองบรรทัดแรกให้ชื่อของเครือข่าย appletalk บรรทัดที่สามระบุชื่อโฮสต์เฉพาะ (โฮสต์จะแยกออกจากเน็ตตามเลข 3 ในจำนวน - ตัวเลขสุทธิ ต้อง มีสอง octets และหมายเลขโฮสต์ ต้อง มีสาม octets) หมายเลขและชื่อควรแยกออกจากกัน โดยช่องว่าง (ช่องว่างหรือแท็บ) ไฟล์ /etc/atalk.names อาจมีบรรทัดว่างหรือบรรทัดแสดงความคิดเห็น (บรรทัดที่ขึ้นต้นด้วย `# ')

ที่อยู่ Appletalk จะพิมพ์ในรูปแบบ:

net.host.port 144.1.209.2> icsd-net.112.220 office.2> icsd-net.112.220 jssmag.149.235> icsd-net.2

(ถ้า /etc/atalk.names ไม่มีหรือไม่มีรายการสำหรับโฮสต์ / เน็ตหมายเลข appletalk จะแสดงที่อยู่ในรูปแบบตัวเลข) ในตัวอย่างแรก NBP (พอร์ต DDP 2) บนเน็ต 144.1 โหนด 209 กำลังส่งไปยังสิ่งที่กำลังฟังอยู่บนพอร์ต 220 ของโหนด netkin 112. บรรทัดที่สองเหมือนกันยกเว้นชื่อเต็มของโหนดต้นทาง ("สำนักงาน") บรรทัดที่สามคือการส่งจากพอร์ต 235 บนโหนด jssmag สุทธิ 149 เพื่อออกอากาศในพอร์ต NBP ของ ICS-net (โปรดทราบว่าที่อยู่ broadcast (255) จะแสดงด้วยชื่อเน็ตที่ไม่มีหมายเลขโฮสต์) ด้วยเหตุนี้จึงเป็นความคิดที่ดี เพื่อเก็บชื่อโหนดและชื่อเน็ตไว้ใน /etc/atalk.names)

NBP (โปรโตคอลการผูกชื่อ) และแพ็คเก็ต ATP (โปรโตคอลการทำธุรกรรมของ Appletalk) มีการตีความเนื้อหา โปรโตคอลอื่น ๆ เพียงแค่ถ่ายโอนข้อมูลชื่อโพรโทคอล (หรือหมายเลขถ้าไม่มีชื่อลงทะเบียนสำหรับโปรโตคอล) และขนาดแพ็คเก็ต

แพ็คเก็ต NBP มีรูปแบบเหมือนตัวอย่างต่อไปนี้:

icsd-net.112.220> jssmag.2: nbp-lkup 190: "=: LaserWriter @ *" jssmag.209.2> icsd-net.112.220: nbp-reply 190: "RM1140: LaserWriter @ *" 250 techpit.2> icsd -net.112.220: nbp-reply 190: "techpit: LaserWriter @ *" 186

บรรทัดแรกคือคำขอค้นหาชื่อสำหรับ laserwriters ที่ส่งโดย net ipicsserver 112 และเผยแพร่ใน jssmag สุทธิ รหัส nbp สำหรับการค้นหาคือ 190 บรรทัดที่สองแสดงการตอบกลับสำหรับคำขอนี้ (โปรดทราบว่ามีรหัสเดียวกัน) จากโฮสต์ jssmag.209 กล่าวว่ามีทรัพยากร laserwriter ชื่อ "RM1140" ที่จดทะเบียนในพอร์ต 250 ส่วนที่สาม บรรทัดคือคำตอบอื่นในคำขอเดียวกันว่าโฮสต์ techpit มี laserwriter "techpit" ที่ลงทะเบียนในพอร์ต 186

การ จัดรูปแบบ แพคเก็ต ATP แสดงโดยตัวอย่างต่อไปนี้:

jssmag.209.165> helios.132: atp-req 12266 <0-7> 0xae030001 helios.132> jssmag.209.165: atp-resp 12266: 0 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 1 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 2 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 3 (512) 0xae040000 helios.132> jssmag.209.165: atp- resp 12266: 4 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 5 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 6 (512) 0xae040000 helios.132> jssmag. 209.165: atp-resp * 12266: 7 (512) 0xae040000 jssmag.209.165> helios.132: atp-req 12266 <3,5> 0xae030001 helios.132> jssmag.209.165: atp-resp 12266: 3 (512) 0xae040000 helios .132> jssmag.209.165: atp-resp 12266: 5 (512) 0xae040000 jssmag.209.165> helios.132: atp-rel 12266 <0-7> 0xae030001 jssmag.209.133> helios.132: atp-req * 12267 <0 -7> 0xae030002

Jssmag.209 เริ่มต้นรหัสธุรกรรม 12266 ด้วย helios โฮสต์โดยขอรับได้สูงสุด 8 ชุด ("0-7>") เลขฐานสิบหกที่ท้ายบรรทัดคือค่าของฟิลด์ `userdata 'ในคำขอ

Helios ตอบรับกับ 8 แพ็คเก็ต 512 ไบต์ `: หลัก 'ตาม ID การทำธุรกรรมให้หมายเลขลำดับของแพ็กเก็ตในการทำธุรกรรมและจำนวนใน parens คือจำนวนข้อมูลในแพ็กเก็ตโดยไม่รวมส่วนหัว atp `* 'ในแพกเก็ต 7 แสดงว่ามีการตั้งค่าบิต EOM

Jssmag.209 ขอให้ส่งแพ็คเก็ต 3 และ 5 อีกครั้ง Helios ส่งซ้ำแล้วจึงออก jssmag.209 สุดท้าย jssmag.209 จะเริ่มต้นคำขอถัดไป `* 'ในคำขอระบุ ว่าไม่ได้ ตั้งค่า XO (` once once')

IP Fragmentation

ดาต้าแกรมอินเทอร์เน็ตที่แยกส่วนจะพิมพ์เป็น

(frag id : size @ offset +) (frag id : size @ offset )

(แบบฟอร์มแรกระบุว่ามีเศษมากขึ้นส่วนที่สองแสดงว่าเป็นส่วนสุดท้าย)

Id คือรหัสชิ้นส่วน ขนาด เป็น ขนาด ชิ้นส่วน (เป็นไบต์) ยกเว้นส่วนหัวของ IP Offset คือส่วนของ offset นี้ (เป็นไบต์) ใน datagram เดิม

ข้อมูลส่วนจะแสดงผลสำหรับแต่ละส่วน ส่วนแรกประกอบด้วยส่วนหัวของโปรโตคอลระดับสูงขึ้นและข้อมูล frag จะถูกพิมพ์หลังจากข้อมูลโปรโตคอล ส่วนหลังจากที่ก่อนไม่มีส่วนหัวของโปรโตคอลระดับสูงขึ้นและข้อมูล frag จะถูกพิมพ์หลังจากที่อยู่ต้นทางและที่อยู่ ตัวอย่างเช่นที่นี่เป็นส่วนหนึ่งของ ftp จาก arizona.edu เพื่อ lbl- rtsg.arpa ผ่านการเชื่อมต่อ CSNET ที่ไม่ปรากฏในการจัดการ datagrams 576 ไบต์:

arizona.ftp-data> rtsg.1170:. 1024: 1332 (308) ack 1 ชนะ 4096 (frag 595a: 328 @ 0 +) arzona> rtsg: (frag 595a: 204 @ 328) rtsg.1170> arizona.ftp ข้อมูล:. ack 1536 win 2560

มีสองข้อต่อไปนี้ต้องทราบก่อน: ที่อยู่ในบรรทัดที่ 2 ไม่รวมหมายเลขพอร์ต เนื่องจากข้อมูลโปรโตคอล TCP ทั้งหมดอยู่ในส่วนแรกและเราไม่มีความคิดว่าพอร์ตหรือหมายเลขลำดับคืออะไรเมื่อเราพิมพ์ส่วนหลัง ประการที่สองข้อมูลลำดับ tcp ในบรรทัดแรกจะพิมพ์เป็นถ้ามีข้อมูลผู้ใช้ 308 ไบต์เมื่อมี 512 ไบต์ (308 ในส่วนแรกและ 204 ในวินาที) หากคุณกำลังมองหาหลุมในพื้นที่ลำดับหรือพยายามจับคู่ acks กับแพ็คเก็ตนี้อาจทำให้คุณหลงกลได้

มีการ ทำ เครื่องหมายแพ็คเก็ตที่มี IP ไม่ใช่ แฟลกสเฟียร์โดยมีเครื่องหมายต่อท้าย (DF)

timestamps

โดยค่าเริ่มต้นบรรทัดผลลัพธ์ทั้งหมดจะถูกนำหน้าด้วย timestamp เวลาคือเวลานาฬิกาในรูปแบบปัจจุบัน

HH: mm: ss.frac

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

ดูสิ่งนี้ด้วย

การจราจร (1C), nit (4P), bpf (4), pcap (3)

สำคัญ: ใช้คำสั่ง man ( % man ) เพื่อดูว่าคำสั่งถูกใช้อย่างไรในคอมพิวเตอร์เครื่องใดเครื่องหนึ่งของคุณ