ฉันต้องการใช้กฎตัวกรองเพื่อจับ ack หรือแพ็กเก็ต syn เท่านั้น ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องการใช้กฎตัวกรองเพื่อจับ ack หรือแพ็กเก็ต syn เท่านั้น ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ไวยากรณ์กรอง pcapใช้สำหรับ tcpdump ควรจะทำงานตรงเช่นเดียวกับใน Wireshark กรองการจับภาพ
ด้วย tcpdump ฉันจะใช้ตัวกรองแบบนี้
tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
ตรวจสอบหน้า man tcpdumpและใส่ใจกับ tcpflags
อย่าลืมตรวจสอบส่วนต่างๆใน Wireshark Wiki เกี่ยวกับตัวกรองการจับภาพและการแสดงผล น่าเสียดายที่ตัวกรองทั้งสองประเภทใช้ไวยากรณ์ที่แตกต่างกันโดยสิ้นเชิงและชื่อที่ต่างกันสำหรับสิ่งเดียวกัน
หากคุณต้องการตัวกรองการแสดงผลแทนตัวกรองการจับคุณอาจจะต้องสร้างการแสดงออกรวม tcp.flags.ack และ tcp.flags.syn ฉันคุ้นเคยกับตัวกรองการจับภาพมากขึ้นดังนั้นคุณจะต้องทำงานด้วยตัวคุณเอง
ในขณะที่คำตอบของ @ Zoredache นั้นดีและสมบูรณ์โปรดทราบว่าไวยากรณ์จะให้ผลลัพธ์แพ็กเก็ตใด ๆ ที่มี TCP SYN หรือชุดแฟล็ก TCP ACK รวมถึงแพ็กเก็ตที่ไม่ได้เป็นเพียงแค่แพ็คเก็ต "TCP SYN" หรือ "TCP ACK" เท่านั้นยังมีชุดธงอื่น ๆ นี่อาจเป็นสิ่งที่คุณตั้งใจ (หรือผู้อ่านในอนาคต) ยกตัวอย่างเช่นไวยากรณ์ที่ยังจะจับแพ็กเก็ต TCP SYN-ACK, TCP FIN-ACK ฯลฯ หากคุณต้องการเพียง TCP SYN หรือ TCP ACK แพ็คเก็ต (เช่นเพียงหนึ่งของธงที่ได้ระบุ) ไวยากรณ์จับตัวกรองที่เหมาะสมคือ:
'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'
เท่า:
'tcp[13] == 2 or tcp[13] == 16'
ไชโย!
ฉันสร้างสคริปต์เพื่อดู "ซินเนอร์" อันดับต้น ๆ เพื่อที่ฉันจะพิจารณาเพียงเริ่มต้นแพ็คเก็ต syn (แพ็คเก็ตแรกของการจับมือแพ็กเก็ตสาม) นั่นคือ syn = 1, ack = 0
while :; do
date;
tcpdump -i eth1 -n -c 100 \
'tcp[tcpflags] & (tcp-syn) != 0' and
'tcp[tcpflags] & (tcp-ack) == 0' 2> /dev/null \
| awk '{ print $3}' \
| sort | uniq -c | sort | tail -5;
echo;
sleep 1
done
tcpdump 'tcp[13] = 3'
http://danielmiessler.com/study/tcpdump/
สูง
นอกจากนี้คุณยังสามารถกรองตามส่วนที่ระบุของแพ็คเก็ตเช่นเดียวกับการรวมหลายเงื่อนไขเป็นกลุ่ม ตัวอย่างก่อนหน้านี้มีประโยชน์เมื่อค้นหาเฉพาะSYN
s หรือ s เท่านั้นRST
และตัวหลังสำหรับการแยกการรับส่งข้อมูลขั้นสูงยิ่งขึ้น
UAP RSF
[คำแนะนำ: แอนนาแกรมสำหรับแฟล็ก TCP: Unskilled Attackers Pester Real Security Folk]
บันทึกของคุณ: ...
แสดงให้ฉันเห็นทุกURG
แพ็กเก็ตด่วน ( )
tcpdump 'tcp[13] & 32 != 0'
แสดงACK
แพ็กเก็ตACKNOWLEDGE ( ) ทั้งหมดให้ฉันดู...
tcpdump 'tcp[13] & 16 != 0'
แสดงPSH
แพ็กเกจPUSH ( ) ทั้งหมดให้ฉันดู...
tcpdump 'tcp[13] & 8 != 0'
แสดงให้ฉันเห็นทุกRST
แพ็กเก็ตRESET ( ) ...
tcpdump 'tcp[13] & 4 != 0'
แสดงให้ฉันเห็นทุกชุดข้อมูลซิงโครไนซ์ ( SYN
)
tcpdump 'tcp[13] & 2 != 0'
แสดงให้ฉันเห็นทั้งหมดFIN
แพ็คเก็ตFINISH ( ) ...
tcpdump 'tcp[13] & 1 != 0'
แสดงให้ฉันเห็นทั้งหมดSYNACK
แพ็คเก็ตซิงโครไนซ์ / ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] = 18'
[ หมายเหตุ:เฉพาะPSH
, RST
, SYN
และFIN
ธงจะปรากฏในการส่งออกข้อมูลธง tcpdump ของ URG
s และACK
s จะปรากฏขึ้น แต่จะปรากฏที่อื่นในผลลัพธ์มากกว่าในฟิลด์ธง]
ฉันต้องการได้รับแพ็คเก็ต SYN เท่านั้นฉันใช้คำสั่งต่อไปนี้:
tcpdump -i eth7 'tcp[13] & 2 != 0'
มันควรจะทำงานให้คุณในทันที
ควรแสดงโดยไม่มีตัวกรองหรืออาร์กิวเมนต์ใด ๆ
tcpdump -s SIZE
ได้ ส่วนหัวของ TCP อาจมีความยาวผันแปรได้ดังนั้นการจับ-s 128
อาจจะได้รับส่วนหัวที่เป็นไปได้ทั้งหมดและอาจมีข้อมูลเล็กน้อย