วิธีสร้าง tcpdump เพื่อแสดงหมายเลข IP และหมายเลขพอร์ต แต่ไม่ใช่ชื่อโฮสต์และโปรโตคอล


42

ฉันใช้ tcpdump สำหรับการทดสอบบางอย่างฉันต้องการดูหมายเลข IP และหมายเลขพอร์ต แต่ผลลัพธ์ของ tcpdump เป็นเช่นนั้น

IP pl1snu.koren.kr.http > kitch.pl.sophia.inria.fr.dnp: Flags [P.], seq 54:72, ack 1, win 5792, length 18

มันจะแสดงเพียงชื่อโฮสต์และโปรโตคอลสำหรับ http มันง่ายที่จะรู้ว่ามันคือ 80 แต่สำหรับ dnp ฉันต้องค้นหา

เป็นไปได้อย่างไรที่จะทำให้ tcpdump แสดงหมายเลข IP และหมายเลขพอร์ต แต่ไม่ใช่ชื่อโฮสต์และโปรโตคอลถ้าใช่เป็นอย่างไร ขอบคุณ

คำตอบ:


44

เพิ่ม-nไปยังtcpdumpบรรทัดคำสั่งของคุณ

จากtcpdump manpage :

-n Don't convert addresses (i.e., host addresses, port numbers, etc.) to names.

ควรสังเกตด้วยว่าใน Fedora (และอาจเป็นอนุพันธ์อื่น ๆ : RHEL, CentOS, ฯลฯ ) พวกเขาได้ทำการแก้ไขเวอร์ชั่น tcpdump ดั้งเดิมเพื่อรวมตัวเลือกแยกต่างหาก-nnเพื่อลบหมายเลขพอร์ต จากmanpage :

-n     Don't convert host addresses to names.   This  can  be  used  to
              avoid DNS lookups.

-nn    Don't convert protocol and port numbers etc. to names either.

หมายเลขพอร์ตยังคงถูกแปลงเป็นชื่อโปรโตคอลโดยใช้-n
มิสเตอร์

"หมายเลขพอร์ตยังคงถูกแปลงเป็นชื่อโปรโตคอลโดยใช้ -n" ไม่ใช่ด้วยตัวอย่างเช่น tcpdump 4.1.1 ที่มาพร้อมกับ OS X Mountain Lion หรือด้วย tcpdump ที่สร้างจากด้านบนของลำตัว Git tcpdump.org คุณเห็นเวอร์ชันใดของ tcpdump -n ที่ไม่ระงับการแปลงหมายเลขพอร์ตเป็นชื่อโปรโตคอล

5

ฉันใช้-nnพารามิเตอร์

-nn: อย่าแก้ไขชื่อโฮสต์หรือชื่อพอร์ต

เรียกใช้เป็น:

tcpdump -nn 

2

-nใช้ได้กับชื่อโฮสต์เท่านั้น แต่ใช้ไม่ได้กับหมายเลขพอร์ต -nnไม่หลอกลวงสำหรับทั้งสอง สิ่งนี้กำลังรัน tcpdump เวอร์ชัน 4.5.1 บน Fedora 20 gnu / linux คำตอบที่ลดลงของ @ATMc นั้นถูกต้องเท่านั้น ฉันเศร้าไม่สามารถถอนรากถอนโคนหรือเขียนความคิดเห็นด้านล่างเพราะกรรมต่ำ


1

ฉันคิดว่าวิธีที่ดีที่สุดคือ:

sudo tcpdump -ni any

ขั้นตอนในการทดสอบ:

  1. เปิดคอนโซลและประเภท:

    sudo nc -l -p 6666
    
  2. เปิดคอนโซลและประเภทอื่น:

    sudo tcpdump -ni any
    

    หากผลลัพธ์มีความละเอียดมากเกินไปคุณสามารถกรองออกได้ ( | grep -v "patter1n|pattern2")

  3. เปิดคอนโซลที่สามและประเภท:

    telnet localhost 6666
    

ผลลัพธ์ที่คาดหวัง:

10:37:13.770997 IP 127.0.0.1.56920 > 127.0.0.1.443: Flags [S], seq 2822288041, win 43690, options [mss 65495,sackOK,TS val 1028779 ecr 0,nop,wscale 7], length 0

ถ้าคุณใช้sudo tcpdump -i anyคุณจะเห็นสิ่งนี้:

10:38:22.106022 IP localhost.56924 > localhost.https: Flags [S], seq 3147104744, win 43690, options [mss 65495,sackOK,TS val 1045863 ecr 0,nop,wscale 7], length 0

1
นั่นเป็นเช่นเดียวกับคำตอบอื่น ๆ - -i anyไม่จำเป็นถ้าคุณต้องการที่จะระงับการแปลงที่อยู่ / พอร์ตเป็นชื่อมันเป็น-nเรื่องที่สำคัญ

-2
tcpdump -i eth0 -p -nn | grep "IP" | awk '{print$3 ,$4 ,$5}' | sed 's/://'

1
ฉันไม่เข้าใจ
Pierre.Vriens

1
ขณะที่คำถามที่ว่า“IP แสดงและหมายเลขพอร์ต แต่ไม่ชื่อโฮสต์และโปรโตคอล” ผมสงสัยว่ามันหมายถึง“IP แสดงและหมายเลขพอร์ต แต่ไม่ใด ๆของข้อมูลอื่น ๆ” (ฉันอาจจะผิด แต่ดูเหมือนว่าไม่มีใครอื่นที่จะตีความคำถามในแบบที่คุณทำ) ดังนั้นคำตอบของคุณดูเหมือนจะมีสองส่วน: (1) ใช้  -nnเพื่อแสดงบริการเช่น "http" และ "dnp" เป็นพอร์ต ตัวเลขแทนชื่อ (ซึ่งได้รับการนำเสนอในสามคำตอบก่อนหน้านี้) และ (2) ใช้  awkเพื่อทิ้งข้อมูลเกี่ยวกับเนื้อหาแพ็คเก็ต (ซึ่งอาจไม่ต้องการ)
สกอตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.