สอนใช้ tcpdump จับ Packet สำหรับ Network Troubleshooting บน Linux 2026

tcpdump คืออะไร? ทำไมต้องรู้?

tcpdump คือเครื่องมือ Command-line สำหรับจับ (capture) และวิเคราะห์ Network Packet บน Linux/Unix เป็นหนึ่งในเครื่องมือที่สำคัญที่สุดสำหรับ Network Administrator, System Administrator และ Security Engineer ในปี 2026 แม้จะมีเครื่องมือ GUI อย่าง Wireshark แต่ tcpdump ยังคงเป็นตัวเลือกอันดับ 1 สำหรับการ Troubleshoot บน Server ที่ไม่มี GUI

ทำไมต้อง tcpdump?

  • ติดตั้งง่าย: มีในทุก Linux Distribution แทบทุกตัว
  • ใช้งานบน Server ที่ไม่มี GUI: ไม่ต้องการ Desktop Environment
  • เบามาก: ใช้ Resource น้อย ไม่กระทบ Server Performance
  • ทรงพลัง: Filter ได้ละเอียด จับ Packet ได้ทุกประเภท
  • Export เป็น PCAP: เก็บไว้วิเคราะห์ด้วย Wireshark ภายหลังได้

ติดตั้ง tcpdump

# Ubuntu/Debian
sudo apt update && sudo apt install tcpdump -y

# CentOS/RHEL/Rocky
sudo dnf install tcpdump -y

# Alpine
apk add tcpdump

# ตรวจสอบเวอร์ชัน
tcpdump --version

# ดู Network Interfaces ที่มี
tcpdump -D

การใช้งาน tcpdump พื้นฐาน

จับ Packet ทั้งหมด

# จับ Packet ทั้งหมดบน Interface eth0
sudo tcpdump -i eth0

# จับ Packet บน Interface ใดก็ได้ (ทุก Interface)
sudo tcpdump -i any

# จำกัดจำนวน Packet (จับ 100 Packet แล้วหยุด)
sudo tcpdump -i eth0 -c 100

# จับ Packet พร้อมแสดง Timestamp แบบละเอียด
sudo tcpdump -i eth0 -tttt

Capture Filters — กรอง Packet ที่ต้องการ

Filter ตาม Host

# จับเฉพาะ Traffic จาก/ไปหา IP ที่ระบุ
sudo tcpdump -i eth0 host 192.168.1.100

# จับเฉพาะ Traffic ที่มาจาก (Source)
sudo tcpdump -i eth0 src host 192.168.1.100

# จับเฉพาะ Traffic ที่ไปหา (Destination)
sudo tcpdump -i eth0 dst host 192.168.1.100

# จับ Traffic ระหว่าง 2 Hosts
sudo tcpdump -i eth0 host 192.168.1.100 and host 192.168.1.200

Filter ตาม Port

# จับเฉพาะ Port 80 (HTTP)
sudo tcpdump -i eth0 port 80

# จับเฉพาะ Port 443 (HTTPS)
sudo tcpdump -i eth0 port 443

# จับหลาย Port
sudo tcpdump -i eth0 port 80 or port 443

# จับ Port Range
sudo tcpdump -i eth0 portrange 8000-8100

# จับ Source Port
sudo tcpdump -i eth0 src port 22

# จับ Destination Port
sudo tcpdump -i eth0 dst port 3306

Filter ตาม Protocol

# จับเฉพาะ TCP
sudo tcpdump -i eth0 tcp

# จับเฉพาะ UDP
sudo tcpdump -i eth0 udp

# จับเฉพาะ ICMP (ping)
sudo tcpdump -i eth0 icmp

# จับเฉพาะ ARP
sudo tcpdump -i eth0 arp

# รวม Filter (TCP Port 80 จาก Host ที่ระบุ)
sudo tcpdump -i eth0 tcp and port 80 and host 192.168.1.100

Display Options — แสดงผลแบบต่าง ๆ

# -n: ไม่ Resolve ชื่อ (แสดง IP แทน Hostname) — เร็วกว่ามาก
sudo tcpdump -i eth0 -n

# -nn: ไม่ Resolve ทั้ง Hostname และ Port Name
sudo tcpdump -i eth0 -nn

# -v: Verbose (แสดงรายละเอียดเพิ่ม เช่น TTL, ID, Length)
sudo tcpdump -i eth0 -v

# -vv: Very Verbose
sudo tcpdump -i eth0 -vv

# -X: แสดง Packet Content เป็น Hex + ASCII
sudo tcpdump -i eth0 -X

# -A: แสดง Packet Content เป็น ASCII (อ่านง่ายสำหรับ HTTP)
sudo tcpdump -i eth0 -A

# -e: แสดง Ethernet Header (MAC Address)
sudo tcpdump -i eth0 -e

# -S: แสดง Absolute Sequence Number (ไม่ใช่ Relative)
sudo tcpdump -i eth0 -S

# รวมกัน (แนะนำสำหรับ Troubleshooting)
sudo tcpdump -i eth0 -nn -v -X

เขียนลงไฟล์ PCAP (-w) และอ่านกลับ (-r)

# บันทึก Packet ลงไฟล์ PCAP
sudo tcpdump -i eth0 -w /tmp/capture.pcap

# บันทึกพร้อม Filter
sudo tcpdump -i eth0 -w /tmp/http_traffic.pcap tcp port 80

# จำกัดขนาดไฟล์ (Rotate ทุก 100MB, เก็บ 5 ไฟล์)
sudo tcpdump -i eth0 -w /tmp/capture.pcap -C 100 -W 5

# บันทึกพร้อม Timestamp ในชื่อไฟล์
sudo tcpdump -i eth0 -w /tmp/capture_%Y%m%d_%H%M%S.pcap -G 3600

# อ่าน PCAP File กลับมาวิเคราะห์
sudo tcpdump -r /tmp/capture.pcap

# อ่าน PCAP File พร้อม Filter
sudo tcpdump -r /tmp/capture.pcap tcp port 443 -nn

# อ่าน PCAP พร้อมแสดง Content
sudo tcpdump -r /tmp/capture.pcap -A -nn

Common tcpdump Recipes — สูตรที่ใช้บ่อย

จับ HTTP Traffic

# จับ HTTP Request/Response (อ่าน Content)
sudo tcpdump -i eth0 -A -nn tcp port 80 | grep -E "GET|POST|HTTP/"

# จับ HTTP Headers เท่านั้น
sudo tcpdump -i eth0 -A -nn 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

# จับเฉพาะ HTTP GET
sudo tcpdump -i eth0 -A -nn 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

จับ DNS Queries

# จับ DNS Traffic ทั้งหมด
sudo tcpdump -i eth0 -nn port 53

# จับ DNS Queries แบบละเอียด
sudo tcpdump -i eth0 -vv -nn port 53

# จับเฉพาะ DNS Query (ไม่รวม Response)
sudo tcpdump -i eth0 -nn 'udp port 53 and udp[10] & 0x80 = 0'

จับ DHCP Traffic

# จับ DHCP (Port 67 = Server, 68 = Client)
sudo tcpdump -i eth0 -nn port 67 or port 68 -v

# จับ DHCP Discover/Offer/Request/Ack
sudo tcpdump -i eth0 -vv -nn 'udp and (port 67 or port 68)'

จับ ARP Traffic

# จับ ARP ทั้งหมด
sudo tcpdump -i eth0 -nn arp

# จับ ARP เฉพาะ IP ที่สนใจ
sudo tcpdump -i eth0 -nn arp and host 192.168.1.1

ตรวจจับ SYN Flood

# จับเฉพาะ SYN Packet (TCP Flag)
sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) = 0'

# นับ SYN Packets ต่อวินาที
sudo tcpdump -i eth0 -nn 'tcp[tcpflags] == tcp-syn' -c 1000 | awk '{print $1}' | cut -d. -f1 | sort | uniq -c | sort -rn

# จับ RST Packets (อาจบ่งชี้ปัญหา)
sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-rst) != 0'

tcpdump บน Docker Containers

# วิธี 1: เข้าไปใน Container แล้วรัน tcpdump
docker exec -it container_name bash
apt update && apt install tcpdump -y
tcpdump -i eth0 -nn

# วิธี 2: ใช้ nsenter เข้าไปใน Network Namespace ของ Container
# หา PID ของ Container
docker inspect --format '{{.State.Pid}}' container_name
# เข้าไปใน Network Namespace
sudo nsenter -t  -n tcpdump -i eth0 -nn

# วิธี 3: ใช้ Docker Network (จับที่ Bridge)
# หา Bridge Interface
docker network inspect bridge | grep "com.docker.network.bridge.name"
# จับ Traffic บน Bridge
sudo tcpdump -i docker0 -nn

# วิธี 4: ใช้ tcpdump Container (nicolaka/netshoot)
docker run --rm --net=container:target_container nicolaka/netshoot tcpdump -i eth0 -nn -c 100

tcpdump บน Kubernetes Pods

# วิธี 1: kubectl exec เข้าไปใน Pod
kubectl exec -it pod-name -- tcpdump -i eth0 -nn -c 100

# ถ้า Pod ไม่มี tcpdump → ใช้ Debug Container (K8s 1.25+)
kubectl debug -it pod-name --image=nicolaka/netshoot --target=container-name -- tcpdump -i eth0 -nn

# วิธี 2: ใช้ ksniff (kubectl plugin)
# ติดตั้ง ksniff
kubectl krew install sniff
# จับ Packet จาก Pod → เปิดใน Wireshark อัตโนมัติ
kubectl sniff pod-name -n namespace

# วิธี 3: จับบน Node ที่ Pod รันอยู่
# หา Node ที่ Pod อยู่
kubectl get pod pod-name -o wide
# SSH เข้า Node แล้วหา veth interface
ip link | grep 
sudo tcpdump -i  -nn

tcpdump + Wireshark Workflow

ขั้นตอนที่ 1: จับ Packet บน Server ด้วย tcpdump

# จับ Packet แล้วบันทึกเป็น PCAP
sudo tcpdump -i eth0 -w /tmp/analysis.pcap -nn -c 10000

# จับเฉพาะ Traffic ที่สนใจ (ลดขนาดไฟล์)
sudo tcpdump -i eth0 -w /tmp/analysis.pcap tcp port 443 and host 10.0.0.50 -nn

ขั้นตอนที่ 2: ส่งไฟล์กลับมาที่เครื่อง Desktop

# ใช้ scp
scp user@server:/tmp/analysis.pcap ~/Desktop/

# ใช้ rsync
rsync -avz user@server:/tmp/analysis.pcap ~/Desktop/

ขั้นตอนที่ 3: เปิดด้วย Wireshark

เปิดไฟล์ .pcap ด้วย Wireshark บนเครื่อง Desktop จะได้ GUI ที่สวยงาม สามารถ Filter, Follow TCP Stream, ดู Statistics, Protocol Hierarchy, Flow Graph และอื่น ๆ ได้สะดวกกว่า tcpdump CLI มาก

Security Considerations

ข้อควรระวังเรื่องความปลอดภัย

  • ต้องมีสิทธิ์ root/sudo: tcpdump ต้องการ CAP_NET_RAW capability ปกติต้องรันด้วย sudo
  • อย่าจับ Packet บน Production นานเกินไป: ไฟล์ PCAP อาจใหญ่มาก กิน Disk Space
  • ข้อมูลใน Packet อาจเป็นความลับ: HTTP (ไม่ Encrypt) จะเห็น Username, Password, Cookies อย่าแชร์ PCAP File โดยไม่ Sanitize
  • HTTPS Packet จะ Encrypt: จะเห็นแค่ Metadata (IP, Port, Timing) ไม่เห็นเนื้อหา
  • อย่าลืมลบ PCAP File: หลังวิเคราะห์เสร็จ ลบไฟล์ออกจาก Server
  • การจับ Packet ของคนอื่นอาจผิดกฎหมาย: ในไทย พ.ร.บ. คอมพิวเตอร์ ห้ามดักจับข้อมูลของผู้อื่นโดยไม่ได้รับอนุญาต

tcpdump Cheat Sheet

คำสั่ง หน้าที่
tcpdump -i eth0 จับ Packet บน eth0
tcpdump -i any จับ Packet บนทุก Interface
tcpdump -i eth0 -c 100 จับ 100 Packet แล้วหยุด
tcpdump -i eth0 -nn ไม่ Resolve Name (เร็วกว่า)
tcpdump -i eth0 -v Verbose Output
tcpdump -i eth0 -X แสดง Hex + ASCII
tcpdump -i eth0 -A แสดง ASCII
tcpdump -i eth0 host 1.2.3.4 Filter ตาม Host
tcpdump -i eth0 port 80 Filter ตาม Port
tcpdump -i eth0 tcp Filter ตาม Protocol
tcpdump -i eth0 -w file.pcap เขียนลงไฟล์ PCAP
tcpdump -r file.pcap อ่าน PCAP File
tcpdump -i eth0 src port 22 Filter Source Port
tcpdump -i eth0 dst port 3306 Filter Destination Port
tcpdump -i eth0 'tcp[tcpflags] == tcp-syn' จับ SYN Packet

สรุป

tcpdump เป็นเครื่องมือที่ทรงพลังและจำเป็นสำหรับทุกคนที่ทำงานด้าน Network และ System Administration ไม่ว่าจะ Troubleshoot ปัญหา Network, ตรวจจับ Security Incident, หรือ Debug Application ที่สื่อสารผ่าน Network

คำแนะนำสำหรับผู้เริ่มต้น: เริ่มจากการจับ Packet บนเครื่อง Lab ก่อน ทดลอง Filter ต่าง ๆ จนคุ้นเคย แล้วค่อยใช้บน Production Server เมื่อต้อง Troubleshoot ปัญหาจริง อย่าลืมเซฟ PCAP File ไว้วิเคราะห์ด้วย Wireshark เพื่อความสะดวก

.

.
.
.

จัดส่งรวดเร็วส่งด่วนทั่วประเทศ
รับประกันสินค้าเคลมง่าย มีใบรับประกัน
ผ่อนชำระได้บัตรเครดิต 0% สูงสุด 10 เดือน
สะสมแต้ม รับส่วนลดส่วนลดและคะแนนสะสม

© 2026 SiamLancard — จำหน่ายการ์ดแลน อุปกรณ์ Server และเครื่องพิมพ์ใบเสร็จ

SiamLancard
Logo
Free Forex EA — XM Signal · SiamCafe Blog · SiamLancard · Siam2R · iCafeFX
iCafeForex.com - สอนเทรด Forex | SiamCafe.net
Shopping cart