Phân tích yota Internet bằng tcpdump. Tcpdump là một hướng dẫn hữu ích với các ví dụ. Các mục được viết vào tập tin

Khá thường xuyên trong quản trị hệ thống, các tình huống phát sinh đòi hỏi phải xem “bức tranh” chi tiết về những gì đang xảy ra với việc truyền dữ liệu qua mạng. Tiện ích phân tích gói cho phép bạn giám sát lưu lượng và xác định các vấn đề trong những trường hợp như vậy. Một trong số đó (và phổ biến nhất) là tcpdump, một trình phân tích gói tiêu chuẩn cho hệ thống Linux.

Ngoài tcpdump, còn có các công cụ khác để phân tích lưu lượng mạng, ví dụ như Wireshark và Tshark, là những phiên bản cải tiến của tcpdump nhưng tiện ích tcpdump vẫn giữ nguyên tiêu chuẩn và vẫn hiệu quả. Với sự trợ giúp của nó, bạn có thể chặn, lọc theo các tiêu chí nhất định và cũng có thể hiển thị các gói. Cần lưu ý rằng để có toàn quyền truy cập vào các gói, bạn phải chạy tcpdump với tư cách là siêu người dùng, vì bản thân các gói là đối tượng hệ thống cấp thấp. Ngoài ra, có một số điều kiện nhất định, tùy thuộc vào thiết bị mạng, cho phép (hoặc không cho phép) chặn tất cả hoặc chỉ một số gói nhất định hoặc chỉ cung cấp một số thông tin nhất định về chúng. Thiết bị mạng (card mạng, bộ định tuyến, v.v.) phải hỗ trợ/cho phép truy cập vào các gói, tức là có (hoặc cung cấp) cơ chế truyền thông tin về các gói lên cấp độ phần mềm cao hơn và trong trường hợp này là tcpdump, cũng như các máy phân tích gói khác. ra sao cho hiệu quả nhất. Nhân tiện, các giao diện phần cứng, nếu chúng hoạt động ở chế độ “chế độ lăng nhăng”, tức là ở chế độ được gọi là chế độ “lăng nhăng”, sẽ cho phép nhân hệ thống “nhìn thấy” tất cả các gói, tức là ngay cả những gói được gửi đến các máy tính khác và thiết bị.

tcpdump hoạt động như thế nào

Như đã lưu ý, tcpdump là một tiện ích tiêu chuẩn để phân tích lưu lượng mạng trong các bản phân phối Linux. Tác giả của tiện ích này là Van Jacobson. Trong suốt thời gian sử dụng, tcpdump đã chứng tỏ mình là một công cụ rất hiệu quả và đáng tin cậy. Do đó, hiện tại, nhiều thiết bị tương tự sử dụng định dạng tcpdump - libcap làm định dạng tệp chính để đọc/ghi kết quả theo dõi lưu lượng truy cập.

Khi chạy, tcpdump tự động tìm kiếm các giao diện mạng và sử dụng giao diện mạng đầu tiên được tìm thấy để phân tích. Vì vậy, bạn cần chú ý đến đầu ra để đảm bảo rằng giao diện đang được phân tích cú pháp chính xác. Nếu không, bạn có thể dễ dàng thiết lập thủ công giao diện mong muốn để sử dụng. Tiện ích này có thể hoạt động ở chế độ rất hữu ích khi dịch vụ DNS không hoạt động hoặc quá chậm, tức là khi có nguy cơ các gói bị mất trước khi tcpdump có thể phân tích chúng.

tùy chọn tcpdump

Để chỉ định giao diện mạng mong muốn, hãy sử dụng tùy chọn -i. Nếu bạn cần biết địa chỉ của thiết bị (máy tính, thiết bị), thì bạn cần chỉ định tùy chọn -n. Điều này cũng rất hữu ích cho các vấn đề về DNS. Tùy chọn -r cho phép bạn đọc thông tin gói từ một tệp. Khi cần thêm thông tin chi tiết về các gói, tùy chọn -v sẽ giúp ích. Ngoài ra còn có tùy chọn -w để thu thập thông tin trong một tệp. Cần lưu ý rằng khi sử dụng tùy chọn -w, chỉ thông tin tiêu đề gói được ghi vào tệp. Tùy chọn -s có giá trị 1056 (mặc dù giá trị này phụ thuộc vào kích thước của gói MTU) cho phép (cùng với -w) ghi thông tin bổ sung vào tệp. Khối lượng dữ liệu có thể rất lớn và phức tạp về cấu trúc (mặc dù thực tế đó là văn bản) và do đó, trong tương lai, nên sử dụng các tiện ích hiệu suất cao thích hợp, chẳng hạn như để xử lý chúng.

Định dạng lệnh tcpdump như sau:

tcpdump[-options] [bộ lọc]

Trong tài liệu chính thức (lệnh man tcpdump), bạn có thể tìm thấy một số ví dụ về cách sử dụng tiện ích này cho các trường hợp khác nhau bằng cách sử dụng các bộ lọc khá đa dạng và phức tạp.

Điều quan trọng cần lưu ý là tcpdump (và thực tế là tất cả các máy phân tích gói) trong quá trình hoạt động của chúng có thể tạo ra lượng thông tin khổng lồ và tải mạng rất lớn, thậm chí đến mức bị lỗi. Do đó, khi phân tích lưu lượng truy cập, bạn nên sử dụng cách tiếp cận hợp lý - tùy theo tình huống và điều kiện của nhiệm vụ (hoặc vấn đề), hãy sử dụng các bộ lọc, đặc biệt vì đây là một phần rất hiệu quả của chức năng tcpdump.

Các switch được sử dụng phổ biến nhất khi chạy tcpdump được hiển thị trong bảng

chìa khóa

Sự miêu tả

Chuyển đổi địa chỉ mạng và quảng bá thành tên miền.

Hiển thị dữ liệu lớp liên kết (địa chỉ MAC, giao thức, độ dài gói). Ngoài địa chỉ IP, địa chỉ MAC của máy tính sẽ được hiển thị.

Sử dụng bộ lọc nằm trong tệp. Nếu bạn sử dụng tùy chọn này, bộ lọc dòng lệnh sẽ bị bỏ qua.

Cho biết giao diện mạng nào sẽ được sử dụng để bắt các gói. Mặc định là eth0, để chọn tất cả các giao diện - bất kỳ. Nếu không có mạng cục bộ, bạn có thể sử dụng giao diện phản hồi lo.

Ví dụ, sử dụng đầu ra phát trực tuyến tiêu chuẩn của tcpdump (thiết bị xuất chuẩn) để ghi vào một tệp:

shell#tcpdump -l | tee out.log //sẽ hiển thị thao tác tcpdump và lưu kết quả vào file out.log

Không thêm phần mở rộng tên miền vào tên máy chủ. Ví dụ tcpdump sẽ hiển thị 'net' thay vì 'net.library.org'

Hiển thị địa chỉ IP thay vì tên máy chủ.

Hiển thị số cổng thay vì giao thức mà nó sử dụng.

Không đưa giao diện vào chế độ lăng nhăng.

Hiển thị thông tin tối thiểu. Thông thường, đây là tên của giao thức, nơi gói tin đến và đi, cổng và lượng dữ liệu được truyền.

Tùy chọn này cho phép tcpdump đọc lưu lượng truy cập từ một tệp nếu trước đó nó đã được lưu bằng tùy chọn -w.

Cho phép bạn tránh xử lý số thứ tự tuyệt đối (số thứ tự ban đầu - ISN) thành số tương đối.

Số byte gói mà tcpdump sẽ xử lý. Nếu bạn đặt số lượng lớn byte hiển thị, thông tin có thể không vừa với màn hình và có thể khó nghiên cứu. Tùy thuộc vào mục tiêu bạn đang theo đuổi, bạn nên chọn giá trị của tham số này. Theo mặc định, tcpdump ghi lại 68 byte đầu tiên (tối thiểu SunOS là 96 byte), nhưng nếu bạn muốn xem nội dung của toàn bộ gói, hãy sử dụng giá trị 1514 byte (kích thước khung hình tối đa được phép trên mạng Ethernet).

Không hiển thị dấu thời gian trên mỗi dòng.

Giải thích các gói của một loại nhất định. Các loại được hỗ trợ là aodv, cnfp, rpc, rtp, rtcp, snmp, tftp, vat, wb.

Hiển thị dấu thời gian chưa được định dạng trên mỗi dòng.

Hiển thị thời gian cùng với ngày.

Hiển thị thông tin chi tiết (TTL; ID; tổng chiều dài của tiêu đề, cũng như các tham số của nó; kiểm tra tổng kiểm tra các tiêu đề IP và ICMP)

Đầu ra của thông tin đầy đủ hơn chủ yếu liên quan đến NFS và SMB.

Hiển thị thông tin chi tiết nhất.

Lưu trữ dữ liệu tcpdump ở định dạng nhị phân. Ưu điểm của việc sử dụng phương pháp này so với chuyển hướng thông thường sang tệp là tốc độ ghi cao và khả năng đọc dữ liệu tương tự của các chương trình khác, chẳng hạn như snort, nhưng con người không thể đọc được tệp này. Có thể xuất dữ liệu nhị phân ra bàn điều khiển, để làm được điều này, bạn cần sử dụng -w -

Tạo bản in của gói ở dạng thập lục phân, hữu ích cho việc phân tích chi tiết hơn về gói. Lượng dữ liệu hiển thị phụ thuộc vào tham số -s

-x, nhưng bao gồm tiêu đề lớp liên kết

Xuất gói ở định dạng ASCII và hex. Hữu ích khi phân tích một sự cố hack vì nó cho phép bạn xem thông tin văn bản nào được truyền trong quá trình kết nối.

Tương tự như tùy chọn trước đó -X, nhưng bao gồm tiêu đề lớp liên kết.

tcpdump sẽ thoát sau khi nhận được số lượng gói được chỉ định.

Các gói đã thu thập sẽ được thêm ngay vào một tệp, nếu không sẽ được tích lũy trong bộ nhớ cho đến khi hết

bộ lọc tcpdump

Bộ lọc được chia thành các phân loại sau

chủ nhà- địa chỉ nút mạng

Hải cảng– cổng mà bạn cần bắt gói

xách đồ phạm vi cổng

mạng lưới- mạng lưới

Mạng Tcpdump 192.168.0.0/24

nắm bắt tất cả lưu lượng truy cập trong đó nguồn hoặc đích là địa chỉ IP từ mạng 192.168.0.0/24

Cổng tcpdump 80

Tất cả lưu lượng truy cập trên cổng 80 sẽ bị bắt.

Hướng giao thông liên quan đến đối tượng giám sát

src- người gửi

dst- người nhận

ví dụ lệnh

Máy chủ Src 172.31.25.200

Nắm bắt lưu lượng truy cập có địa chỉ IP người gửi là 172.31.25.200

Giao thức

ether– công nghệ mạng Ethernet cơ bản, theo quy tắc, chỉ ra rằng bộ lọc sử dụng địa chỉ MAC phần cứng

ip– Giao thức IPv4

ip6– Giao thức IPv6

arp– Giao thức ARP

tcp– Giao thức TCP

udp– Giao thức UDP

Nếu giao thức không được chỉ định thì lưu lượng truy cập cho tất cả các giao thức sẽ được ghi lại

Ví dụ như lệnh

Cổng UDP 5060

chụp lưu lượng truy cập qua cổng UDP 5060

Bộ lọc tổng hợp

Để lọc lưu lượng linh hoạt hơn, bạn có thể sử dụng các thao tác logic

"Và và (&&)

“HOẶC” – hoặc (||)

“KHÔNG” – không phải (!) – đảo ngược giá trị

Mức độ ưu tiên của các hoạt động này như sau:

hoạt động đảo ngược có mức độ ưu tiên cao nhất

sau đó logic “VÀ”

Hoạt động OR có mức độ ưu tiên thấp nhất.

Mức độ ưu tiên của các hoạt động có thể được thay đổi bằng dấu ngoặc đơn.

(net 172.16.0.0/24 hoặc máy chủ 172.31.0.5) và cổng tcp 80

thu thập lưu lượng giao thức TCP bằng cổng 80 thuộc mạng 172.16.0.0/24 hoặc máy chủ 172.31.0.5, cho bất kỳ máy chủ nào riêng lẻ hoặc cùng nhau

(net 172.16.0.0/24 || máy chủ 172.31.0.5) && không phải cổng tcp 80

nắm bắt mọi lưu lượng truy cập ngoại trừ lưu lượng giao thức TCP và sử dụng cổng 80 thuộc mạng 172.16.0.0/24 hoặc máy chủ 172.31.0.5, cho bất kỳ máy chủ nào riêng lẻ hoặc cùng nhau

ví dụ về tcpdump linux

Ghi đầu ra vào một tập tin

$ sudo tcpdump -w sshtrace.tcpdump cổng tcp 22

Tệp sshtrace.tcpdump sẽ được tạo theo mặc định trong thư mục chính của người dùng hiện tại. Để xuất thông tin từ tệp myrouter.tcpdump, hãy sử dụng tùy chọn -r:

$ tcpdump -r sshtrace.tcpdump

Xóa tất cả lưu lượng truy cập khỏi giao diện eth1

$ tcpdump –i eth1

Xóa lưu lượng truy cập khỏi một loạt cổng trên giao diện eth1

$ tcpdump -i eth1 portrange 100-200

tất cả lưu lượng truy cập đến 172.16.0.1 không phải là ICMP.

Tcpdump là một công cụ phân tích mạng cực kỳ tiện lợi, rất hữu ích cho cả quản trị viên mạng và các chuyên gia bảo mật. Đương nhiên, để có được thông tin tối đa khi làm việc với tcpdump, bạn chỉ cần hiểu biết về ngăn xếp giao thức TCP/IP. Để thuận tiện, bạn có thể sử dụng các chương trình thông minh và tiện lợi hơn, chẳng hạn, nhưng các tình huống thường phát sinh khi không thể cài đặt các dịch vụ bổ sung trên máy đang được thử nghiệm, và khi đó tcpdump đơn giản là không thể thay thế, bởi vì quản trị viên, vì mục đích phân tích. packets, không muốn cài đặt X- trên máy chủ Unix.Windows, đặc biệt vì trong hầu hết các hệ thống Unix, tiện ích tcpdump được cài đặt theo mặc định.

Việc hiểu giao thức TCP/IP mang lại phạm vi rộng cho việc sử dụng máy phân tích và khắc phục sự cố và sự cố mạng bằng cách phân tích gói. Vì việc sử dụng tối ưu tiện ích này đòi hỏi phải hiểu rõ về các giao thức mạng và hoạt động của chúng, điều này tạo ra một tình huống buồn cười trong đó kỹ sư trong mọi trường hợp cần phải biết và hiểu các cơ chế truyền dữ liệu trên mạng. bao gồm tcpdump hữu ích về mọi mặt: cả xử lý sự cố và tự học.

Dưới đây là một số tùy chọn sẽ giúp bạn sử dụng tiện ích này đầy đủ và chi tiết hơn, đặc biệt vì tất cả các hộp và chìa khóa này khá dễ bị quên và những ví dụ này rất hữu ích để làm mới bộ nhớ của bạn.

Khóa đầu tiên được sử dụng là -n, khóa này cấm các nỗ lực chuyển đổi địa chỉ thành tên miền, từ đó cung cấp cho chúng tôi địa chỉ IP sạch có cổng.

Thứ hai là -X chỉ định cho mỗi gói xuất ra cả nội dung hex và ASCII của gói.
Và tùy chọn cuối cùng là -S thay thế đầu ra của việc đánh số TCP tương đối bằng đầu ra tuyệt đối. Vấn đề là với cách đánh số tương đối, một số vấn đề có thể bị che giấu khỏi sự chú ý của bạn.

Bạn cần hiểu rằng ưu điểm chính của tcpdump so với các tiện ích khác là nó cho phép phân tích các gói một cách chi tiết và thủ công. Bạn cũng cần nhớ rằng theo mặc định, tcpdump chỉ sử dụng 68 byte đầu tiên của gói, bao gồm cả. nếu bạn cần xem thêm thì bạn nên sử dụng khóa chuyển số -s, trong đó số là số byte cần được ghi lại. Nếu số 0 được chỉ định, gói sẽ bị bắt hoàn toàn, vì vậy tốt hơn nên sử dụng giá trị 1514, giá trị này sẽ bắt hoàn toàn gói tiêu chuẩn cho mạng Ethernet.

Danh sách các phím được sử dụng phổ biến nhất:
-c: kiểm tra kích thước của tệp chụp trước mỗi lần ghi tiếp theo của gói đã chụp; nếu kích thước lớn hơn thì tệp sẽ được lưu và bản ghi sẽ chuyển sang tệp mới
-e: In tiêu đề ethernet (lớp liên kết) trong mỗi dòng kết xuất
-i Any: Nghe trên tất cả các giao diện, trong trường hợp bạn cần tất cả lưu lượng truy cập.
-n: vô hiệu hóa việc phân giải địa chỉ thành tên miền hoặc tên tượng trưng
-nn: vô hiệu hóa việc phân giải địa chỉ và cổng thành tên miền hoặc tên tượng trưng
-q: Đầu ra thông tin ngắn gọn bằng cách giảm đầu ra của thông tin giao thức.
-X: In cả nội dung hex và ASCII của gói
-v, -vv, -vvv: Chỉ định đầu ra của thông tin bổ sung về các gói đã bắt, cho phép phân tích rộng hơn.
Một số ví dụ để sử dụng:

# Đầu ra gói tiêu chuẩn
tcpdump -nS
# Đầu ra tiêu chuẩn mở rộng
tcpdump -nnvvS
# Phân tích sâu một gói
tcpdump -nnvvXS
# Thông tin giao thông chi tiết nhất
tcpdump -nnvvXSs 1514

Biểu thức cho phép bạn thực hiện quét có mục tiêu hơn và chỉ định loại lưu lượng truy cập. Khả năng sử dụng các biểu thức làm cho tcpdump trở thành một công cụ rất hiệu quả trong tay người quản trị hệ thống. Có ba loại biểu thức chính: type, dir và proto.
Các tùy chọn cho biểu thức kiểu là máy chủ, mạng và cổng.
Để thể hiện hướng được chỉ định bởi thư mục, các tùy chọn hiện có là src, dst, src hoặc dst, và src và dst.
Một số biểu thức tiêu chuẩn:

máy chủ // phân tích lưu lượng truy cập dựa trên địa chỉ IP (cũng hoạt động với tên tượng trưng nếu -n không được chỉ định)
máy chủ tcpdump 1.2.3.4

src, dst // chỉ phân tích lưu lượng truy cập cho một đích hoặc bộ phát cụ thể
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6

net // nắm bắt lưu lượng truy cập thuộc một mạng cụ thể
mạng tcpdump 1.2.3.0/24

proto // hoạt động với tcp, udp và icmp. Cần phải nhớ rằng proto không được đề cập
tcpdump icmp

cổng // phân tích lưu lượng truy cập từ một cổng cụ thể (đến hoặc đi)
cổng tcpdump 3389

src, dst port // lọc dựa trên cổng vào hoặc cổng ra
cổng tcpdump src 1025
cổng dst tcpdump 3389

Nhưng công cụ mạnh mẽ nhất là toán hạng, cho phép bạn đặt điều kiện cho các biểu thức và tùy chọn để tách biệt thông tin chi tiết hơn về lưu lượng được phân tích.


và hoặc &&
HOẶC
hoặc hoặc ||
NGOẠI TRỪ
không hoặc!

Lưu lượng TCP từ tài nguyên 10.15.123.33 với cổng đích 3379:

# tcpdump -nnvvS tcp và src 10.15.123.33 và dst port 3379

Lưu lượng di chuyển từ mạng 192.168 đến đích trên mạng 10 hoặc 172.16:

# tcpdump -nvX src net 192.168.0.0/16 và dst net 10.0.0.0/8 hoặc 172.16.0.0/16

Lưu lượng không phải ICMP đến đích 192.168.0.2 và từ mạng 172.16:

# tcpdump -nvvXSs 1514 dst 192.168.0.2 và src net 172.16.0.0/16 chứ không phải icmp

Lưu lượng truy cập từ máy chủ Eros hoặc Ares, nhưng không đi đến cổng SSH tiêu chuẩn (cần phân giải tên cho biểu thức này):

# tcpdump -vv src eros hay là chứ không phải dst port 22

Như có thể thấy từ các ví dụ đã cho, chúng ta có thể xây dựng bất kỳ biểu thức nào cho bất kỳ mục đích nào. Ngoài ra, bằng cách sử dụng cú pháp phức tạp, chúng tôi có thể loại trừ mọi loại lưu lượng truy cập khỏi quá trình phân tích.

Chúng ta cũng nên nhớ rằng chúng ta có thể xây dựng các truy vấn bao gồm các nhóm và nhóm tùy chọn được chỉ định trong một truy vấn. Nhưng để tiện ích tcpdump chú ý đến chúng, chúng cần được đặt trong ngoặc, lấy biểu thức trong dấu ngoặc đơn:
Lưu lượng truy cập từ máy chủ 10.0.2.4 đến cổng đích 3379 hoặc 22:
# tcpdump ‘src 10.0.2.4 và (cổng dst 3379 hoặc 22)’

Cũng có thể lọc dựa trên cờ TCP, ví dụ để tách các gói SYN hoặc RST:

Phân tích tất cả các gói URG:
# tcpdump ‘tcp & 32 != 0′

Phân tích tất cả các gói ACK:
# tcpdump ‘tcp & 16 != 0′

Phân tích tất cả các gói PSH:
# tcpdump ‘tcp & 8 != 0′

Phân tích tất cả các gói RST:
# tcpdump ‘tcp & 4 != 0′

Phân tích tất cả các gói SYN:
# tcpdump ‘tcp & 2 != 0′

TẠI SAO TCPDUMP?

Tcpdump là công cụ phân tích mạng hàng đầu dành cho các chuyên gia bảo mật thông tin. Đối với những người muốn hiểu biết đầy đủ về TCP/IP, bắt buộc phải có hiểu biết đầy đủ về ứng dụng quan trọng này. Nhiều người thích sử dụng các công cụ cấp cao hơn như Wireshark nhưng tôi nghĩ đây là một sai lầm.

Khi bạn sử dụng một công cụ hiển thị lưu lượng truy cập mạng theo cách tự nhiên (đơn giản) hơn, độ phức tạp của việc phân tích sẽ phụ thuộc trực tiếp vào con người chứ không phải vào ứng dụng. Cách tiếp cận này phát triển sự hiểu biết về bộ TCP/IP, đó là lý do tại sao tôi khuyên bạn nên sử dụng tcpdump thay vì các công cụ khác bất cứ khi nào có thể.

15:31:34.079416 IP (tos 0x0, ttl 64, id 20244, offset 0, flags , proto: TCP (6), chiều dài: 60) source.35970 > dest.80: S, cksum 0x0ac1 (chính xác), 2647022145: 2647022145(0) thắng 5840 0x0000: 4500 003c 4f14 4006 7417 0afb 0257 E.. 0x0010: 4815 222a 8c82 0050 9dc6 5a41 0000 0000 H."*...P..ZA.... 0x0020: a002 16d0 0ac1 0000 0204 05b4 0402 080a............0x0030: 14b4 1555 0000 0000 0103 0302

CƠ BẢN

Dưới đây là một số tùy chọn mà bạn có thể sử dụng khi định cấu hình tcpdump. Chúng có thể dễ dàng bị lãng quên và/hoặc nhầm lẫn với các loại bộ lọc khác, chẳng hạn như Wireshark, vì vậy trang này có thể dùng làm tài liệu tham khảo cho bạn. Dưới đây là những điểm chính mà tôi muốn ghi nhớ, tùy thuộc vào nội dung tôi đang xem.

TÙY CHỌN

  • -i Any: Nghe trên tất cả các giao diện để xem bạn có thấy lưu lượng truy cập nào không.
  • -i eth0: nghe trên giao diện eth0.
  • -D: Hiển thị danh sách các giao diện có sẵn
  • -n: Hiển thị địa chỉ IP thay vì tên máy chủ.
  • -nn: Hiển thị địa chỉ IP và số cổng thay vì tên máy chủ và tên giao thức.
  • -q: Hiển thị lượng thông tin tối thiểu về gói.
  • -t: Không hiển thị dấu thời gian trên mỗi dòng.
  • -tttt: Đặt đầu ra của dấu thời gian ở định dạng mặc định cho mỗi dòng.
  • -X: Hiển thị nội dung gói ở cả dạng hex và ASCII.
  • -XX: Tương tự như -X, nhưng cũng hiển thị tiêu đề ethernet.
  • -v, -vv, -vvv: Tăng lượng thông tin gói tin trả về.
  • -c: chỉ lấy x số gói tin rồi dừng.
  • -s: Xác định độ dài ảnh chụp (kích thước) của ảnh chụp theo byte. Sử dụng -s0 để lấy mọi thứ, trừ khi bạn cố tình lấy ít hơn.
  • -S: In số thứ tự tuyệt đối.
  • -e: Nhận tiêu đề ethernet.
  • -q: Hiển thị thông tin gói tối thiểu.
  • -E: Giải mã lưu lượng IPSEC bằng cách cung cấp khóa mã hóa.
[Độ dài mặc định của tcpdump 4.0 đã thay đổi từ 68 thành 96 byte. Mặc dù điều này sẽ cho phép bạn xem thêm thông tin về gói nhưng đó không phải là tất cả thông tin. Sử dụng -s1514 hoặc -s0 để có được phạm vi bảo hiểm đầy đủ]

BIỂU THỨC

Trong tcpdump, các biểu thức cho phép bạn giảm bớt các loại lưu lượng truy cập khác nhau và tìm thấy chính xác những gì bạn đang tìm kiếm. Nắm vững các biểu thức và có thể kết hợp chúng một cách sáng tạo là điều khiến tcpdump thực sự mạnh mẽ.

Có ba loại biểu thức chính: type, dir và proto.

Các loại tùy chọn: máy chủ, mạng và cổng.

Các thư mục cho phép bạn thực hiện src, dst và sự kết hợp của chúng.

Giao thức cho phép bạn xác định: tcp, udp, icmp, ah và nhiều giao thức khác.

VÍ DỤ

Vì vậy, bây giờ chúng ta đã biết mình có những lựa chọn nào, hãy xem xét một số ví dụ thực tế mà chúng ta có thể thấy trong công việc hàng ngày của mình.

THÔNG ĐIỆP CHÍNH

Chỉ cần xem điều gì xảy ra bằng cách nhìn vào tất cả các giao diện.

# tcpdump -i bất kỳ

GIAO DIỆN CỤ THỂ

Hiểu biết cơ bản về những gì đang xảy ra trên một giao diện cụ thể.

# tcpdump -i eth0

TRÌNH BÀY ĐẦU RA RAW

Đầu ra dài dòng mà không phân giải tên máy chủ hoặc số cổng, số thứ tự tuyệt đối hoặc dấu thời gian mà con người có thể đọc được.

# tcpdump -ttttnnvvS

TÌM Traffic THEO IP

Một trong những yêu cầu phổ biến nhất, yêu cầu này sẽ hiển thị cho bạn lưu lượng truy cập từ 1.2.3.4, cho dù đó là nguồn hay đích.

# máy chủ tcpdump 1.2.3.4

XEM THÊM THÔNG TIN VỀ GÓI ĐẦU RA HEX

Đầu ra thập lục phân rất hữu ích khi bạn muốn xem nội dung của các gói được đề cập và thường được sử dụng tốt nhất khi bạn tách biệt nhiều ứng cử viên để kiểm tra kỹ hơn.

# tcpdump -nnvXSs 0 -c1 icmp tcpdump: nghe trên eth0, EN10MB kiểu liên kết (Ethernet), 23:11:10.370321 IP (tos 0x20, ttl 48, id 34859, offset 0, flags, độ dài: 84) 69.254.213.43 > 72.21.34.42: icmp 64: echo request seq 0 0x0000: 4520 0054 882b 0000 3001 7cf5 45fe d52b E..T.+..0.|.E..+ 0x0010: 4815 222a 0800 3530 272a 0 000 25ff d744 H .. "..50"..%..D 0x0020: ae5e 0500 0809 0a0b 0c0d 0e0f 1011 1213 .^............ 0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .. ...........!"# 0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&"()*+,-./0123 0x0050: 3435 3637 4567 1 gói đã bắt được 1 gói được nhận bởi bộ lọc 0 gói bị rớt bởi kernel

LỌC THEO NGUỒN VÀ ĐỊA CHỈ

Việc phân tách lưu lượng truy cập dựa trên nguồn hoặc đích rất đơn giản bằng cách sử dụng src và dst.

# tcpdump src 2.3.4.5 tcpdump dst 3.4.5.6

TÌM KIẾM GÓI TRÊN MẠNG

Để tìm các gói đi đến hoặc đi từ một mạng cụ thể, hãy sử dụng tùy chọn mạng. Bạn có thể kết hợp điều này với các tùy chọn src hoặc dst.

# tcpdump mạng 1.2.3.0/24

HIỂN THỊ GIAO THÔNG LIÊN QUAN ĐẾN MỘT CẢNG ĐẶC BIỆT

Bạn có thể tìm thấy một cổng lưu lượng cụ thể bằng cách sử dụng tùy chọn cổng theo sau là số cổng.

# cổng tcpdump 3389 cổng tcpdump src 1025

HIỂN THỊ GIAO THÔNG CỦA MỘT GIAO THỨC

Nếu bạn đang tìm kiếm một loại lưu lượng truy cập cụ thể, bạn có thể sử dụng tcp, udp, icmp và nhiều loại khác.

# tcpdump icmp

CHỈ HIỂN THỊ LƯU LƯỢNG IP6

Bạn cũng có thể tìm thấy tất cả lưu lượng IP6 bằng tùy chọn giao thức.

TÌM GIAO THÔNG SỬ DỤNG BAN PORT

Bạn cũng có thể sử dụng phạm vi cổng để tìm lưu lượng truy cập.

# tcpdump portrange 21-23

TÌM LƯU LƯỢNG DỰA TRÊN KÍCH THƯỚC GÓI

Nếu bạn đang tìm kiếm các gói có kích thước cụ thể, bạn có thể sử dụng các tùy chọn này. Bạn có thể sử dụng các ký hiệu nhỏ, lớn hoặc tương ứng mà bạn mong đợi từ toán học.

# tcpdump nhỏ hơn 32 tcpdump lớn hơn 64 tcpdump<= 128

CÁC MỤC TẬP TIN VIẾT

Việc lưu kết quả của các lô vào một tệp để phân tích trong tương lai thường rất hữu ích. Các tệp này được gọi là tệp PCAP (PEE-cap) và có thể được xử lý bởi hàng trăm ứng dụng khác nhau, bao gồm máy phân tích mạng, hệ thống phát hiện xâm nhập và tất nhiên là cả tcpdump. Ở đây chúng tôi viết một tệp có tên capture_file bằng cách sử dụng khóa chuyển đổi -w.

# cổng tcpdump 80 -w capture_file

ĐỌC TẬP TIN PCAP

Bạn có thể đọc tệp PCAP bằng khóa chuyển đổi -r. Lưu ý rằng bạn có thể sử dụng tất cả các lệnh thông thường trong tcpdump khi đọc vào một tệp; bạn chỉ bị giới hạn bởi thực tế là bạn không thể nắm bắt và xử lý bất kỳ thứ gì không tồn tại trong tệp.

# tcpdump -r capture_file

TRÌNH ĐỘ CAO

Bây giờ chúng ta đã thấy những gì chúng ta có thể làm với những điều cơ bản thông qua một số ví dụ, hãy xem xét một số điều nâng cao hơn.

ĐÓ LÀ TẤT CẢ VỀ SỰ KẾT HỢP

Làm cho những thứ khác nhau này trở nên riêng lẻ là một khả năng mạnh mẽ, nhưng điều kỳ diệu thực sự của tcpdump đến từ khả năng kết hợp các tùy chọn theo những cách sáng tạo để tách biệt chính xác những gì bạn đang tìm kiếm. Có ba cách để tạo sự kết hợp và nếu bạn đã học lập trình thì chúng sẽ rất quen thuộc với bạn.


và hoặc &&

HOẶC
hoặc hoặc ||

NGOẠI TRỪ
không hoặc!

Dưới đây là một số ví dụ về các lệnh kết hợp.

TỪ MỘT IP CỤ THỂ VÀ ĐƯỢC GÁN CHO MỘT CỔNG CỤ THỂ

Hãy tìm tất cả lưu lượng truy cập từ 10.5.2.3 đến bất kỳ máy chủ nào trên cổng 3389.

Tcpdump -nnvvS src 10.5.2.3 và cổng dst 3389

TỪ MẠNG NÀY ĐẾN MẠNG KHÁC

Hãy xem xét tất cả lưu lượng truy cập đến từ 192.168.x.x và đi tới mạng 10.x hoặc 172.16.x.x và chúng tôi sẽ hiển thị đầu ra thập lục phân không có tên máy chủ và một cấp chi tiết bổ sung.

Tcpdump -nvX src net 192.168.0.0/16 và dst net 10.0.0.0/8 hoặc172.16.0.0/16

LƯU LƯỢNG KHÔNG ICMP ĐI ĐẾN MỘT IP CỤ THỂ

Điều này sẽ cho chúng ta thấy tất cả lưu lượng truy cập tới 192.168.0.2 không phải là ICMP.

Tcpdump dst 192.168.0.2 và src net chứ không phải icmp

LƯU LƯỢNG TỪ MÁY CHỦ KHÔNG Ở CỔNG CỤ THỂ

Điều này sẽ hiển thị cho chúng ta tất cả lưu lượng truy cập từ máy chủ không phải là lưu lượng SSH (giả sử cổng mặc định được sử dụng).

Tcpdump -vv src mars chứ không phải cổng dst 22

Như bạn có thể thấy, bạn có thể tạo truy vấn để tìm hầu hết mọi thứ bạn cần. Điều quan trọng trước tiên là xác định chính xác những gì bạn đang tìm kiếm, sau đó xây dựng cú pháp để tách biệt loại lưu lượng truy cập cụ thể.

Nhóm phức tạp và các ký tự đặc biệt

Ngoài ra, hãy nhớ rằng khi tạo các truy vấn phức tạp, bạn có thể phải nhóm các tham số của mình bằng dấu ngoặc đơn. Dấu ngoặc đơn được sử dụng để yêu cầu tcpdump bỏ qua một số ký tự đặc biệt nhất định - trong trường hợp này là ký tự trong dấu ngoặc "()". Phương pháp tương tự có thể được sử dụng để nhóm bằng cách sử dụng các biểu thức khác như máy chủ, cổng, mạng, v.v. Nhìn vào lệnh dưới đây.

# Lưu lượng truy cập từ 10.0.2.4 VÀ được dành cho các cổng 3389 hoặc 22 (không chính xác) tcpdump src 10.0.2.4 và (dst port 3389 hoặc 22)

Nếu bạn cố chạy lệnh rất hữu ích này trong một trường hợp khác, bạn sẽ gặp lỗi do dấu ngoặc đơn. Bạn có thể khắc phục điều này bằng cách thoát khỏi dấu ngoặc đơn (đặt \ trước mỗi dấu ngoặc đơn) hoặc bằng cách đặt toàn bộ lệnh trong dấu ngoặc đơn:

# Lưu lượng truy cập từ 10.0.2.4 VÀ dành cho cổng 3389 hoặc 22 (chính xác) # tcpdump "src 10.0.2.4 và (dst port 3389 hoặc 22)"

Cô lập các cờ TCP cụ thể

Bạn cũng có thể nắm bắt lưu lượng truy cập dựa trên (các) cờ TCP cụ thể.

[LƯU Ý: Các bộ lọc bên dưới tìm ra các gói khác nhau này vì thông báo tcp bù 13 trong tiêu đề TCP, con số biểu thị vị trí byte, à! = 0 có nghĩa là cờ này được đặt thành 1, tức là nó đang bật. ]

Hiển thị tất cả các gói KHẨN CẤP (URG)...

# tcpdump "tcp & 32!=0"

Hiển thị tất cả các gói ACKNOWLEDGE (ACK) ...

# tcpdump "tcp & 16!=0"

Hiển thị tất cả các gói PUSH (PSH) ...

# tcpdump "tcp & 8!=0"

Hiển thị tất cả các gói RESET (RST)...

# tcpdump "tcp & 4!=0"

Hiển thị tất cả các gói ĐỒNG BỘ (SYN) ...

# tcpdump "tcp & 2!=0"

Hiển thị tất cả các gói FINISH (FIN)...

# tcpdump "tcp & 1!=0"

Hiển thị tất cả các gói ĐỒNG BỘ/XÁC NHẬN (SYNACK)...

# tcpdump "tcp=18" [Lưu ý: Chỉ các cờ PSH, RST, SYN và FIN xuất hiện trong đầu ra trường tcpdump. URG và ACK được hiển thị, nhưng chúng được hiển thị ở một vị trí khác trong đầu ra so với trong trường cờ. ]

Tuy nhiên, cũng như những công cụ mạnh mẽ nhất, có nhiều cách để thực hiện những việc bạn cần làm. Ví dụ sau đây cho thấy một cách khác để bắt các gói với các bộ cờ TCP cụ thể.

# tcpdump "tcp == tcp-syn"

Xóa cờ RST bằng tham số tcpflags...

# tcpdump "tcp == tcp-rst"

Xóa cờ FIN bằng tham số tcpflags...

# tcpdump "tcp == tcp-fin" [Lưu ý: phương pháp tương tự có thể được sử dụng cho các cờ khác; chúng đã bị bỏ qua vì lợi ích của không gian. ]

Xác định lưu lượng truy cập đáng chú ý

Cuối cùng, có một số công thức nhanh mà bạn cần ghi nhớ để nắm bắt lưu lượng truy cập cụ thể và chuyên biệt, chẳng hạn như các gói xấu/có thể độc hại.

CÁC GÓI CÓ BỘ RST VÀ SYN THƯỜNG XUYÊN (KHÔNG NÊN CÓ)

# tcpdump "tcp = 6"

TÌM KIẾM HTTP PLAINTEXT VÀ NHẬN YÊU CẦU

# tcpdump "tcp = 0x47455420"

TÌM KẾT NỐI SSH ĐẾN BẤT KỲ CỔNG NÀO (QUA BANNER)

# tcpdump "tcp[(tcp>>2):4] = 0x5353482D"

GÓI CÓ TTL DƯỚI 10 (THƯỜNG HIỂN THỊ VẤN ĐỀ HOẶC SỬ DỤNG TRACEROUTE)

# tcpdump "ip< 10"

CÁC GÓI CÀI ĐẶT EVIL BIT

# tcpdump "ip & 128 != 0"

Phần kết luận

tcpdump là một công cụ có giá trị cho bất kỳ ai muốn tìm hiểu về bảo mật mạng hoặc thông tin.
Cách thức khác thường mà nó tương tác với lưu lượng truy cập, cùng với độ chính xác mà nó mang lại khi kiểm tra các gói, khiến nó trở thành công cụ tốt nhất để tìm hiểu TCP/IP.
Các trình phân tích giao thức như Wireshark rất tuyệt vời, nhưng nếu bạn muốn thực sự làm chủ các gói, trước tiên bạn phải thành thạo tcpdump.
Nhìn chung, hướng dẫn này sẽ giúp bạn trở nên mạnh mẽ hơn, nhưng trang man phải luôn thân thiện với các trường hợp sử dụng một lần và nâng cao nhất. Tôi chân thành hy vọng điều này hữu ích cho bạn và vui lòng liên hệ với tôi nếu bạn có bất kỳ câu hỏi nào.

  • Chúng tôi cung cấp một chương trình và sách giáo khoa đã được chứng minh từ các chuyên gia từ Học viện Mạng Cisco và Viện Chuyên nghiệp Linux, các giảng viên được chứng nhận và cố vấn cá nhân.
  • Chúng tôi sẽ giúp bạn tìm việc làm và xây dựng sự nghiệp. 100% sinh viên tốt nghiệp của chúng tôi đều có việc làm.
  • Quá trình đào tạo diễn ra như thế nào?

    • Chúng tôi thực hiện các bài giảng trực tuyến vào buổi tối trên nền tảng của mình hoặc học trực tiếp tại văn phòng Kyiv.
    • Chúng tôi sẽ hỏi bạn về thời gian thuận tiện để luyện tập và điều chỉnh: chúng tôi hiểu rằng có rất ít thời gian để học.
    • Nếu bạn muốn có một lịch trình riêng, chúng ta sẽ thảo luận và thực hiện nó.
    • Chúng tôi sẽ đặt ra thời hạn rõ ràng cho việc tự tổ chức. Người giám sát cá nhân sẽ liên hệ để giải đáp thắc mắc, tư vấn và động viên bạn tuân thủ thời hạn thi.

    Chúng tôi cũng sẽ giúp bạn:

    Vì vậy, tôi quyết định tạo bảng cheat của riêng mình để nó có thể... Bởi vì không có tcpdump, nhiều quản trị viên không phải là quản trị viên

    Giới thiệu

    Rất thường xuyên, để tìm ra vấn đề trong mạng, họ sử dụng máy phân tích lưu lượng mạng . tcpdump là một trong những đại diện của lớp chương trình này, nó cho phép bạn nghe (hiển thị/lưu) và phân tích hoạt động của mạng ở cấp độ các gói, khung mạng được truyền và các đơn vị truyền lưu lượng mạng khác. Tùy thuộc vào cấu hình mạng, tcpdump có thể nghe không chỉ các gói được gửi đến một địa chỉ MAC nhất định mà còn cả các gói quảng bá. Nghe lén việc chặn gói tin mạng dựa trên chế độ "lăng nhăng" hoạt động của bộ điều hợp mạng.

    Tùy thuộc vào thiết bị mạng được sử dụng để kết nối các máy tính trên mạng Ethernet, có các loại sau: khả năng lắng nghe giao thông:

    • Dựa trực tuyến máy tập trung tất cả lưu lượng truy cập từ trung tâm đều có sẵn cho bất kỳ máy chủ mạng nào.
    • Trong các mạng dựa trên công tắc(chuyển mạch) máy chủ mạng chỉ có quyền truy cập vào lưu lượng truy cập của nó, cũng như tất cả lưu lượng phát sóng của phân đoạn này.
    • Một số thiết bị chuyển mạch được quản lý có chức năng sao chép lưu lượng của một cổng nhất định sang cổng giám sát ("phản chiếu", giám sát cổng).
    • Khi sử dụng các công cụ đặc biệt (tapers) được bao gồm trong ngắt kết nối mạng và truyền lưu lượng kết nối đến một cổng riêng, có thể lắng nghe cổng tương ứng.
    • “Bí quyết” với hub là cổng chuyển mạch có lưu lượng cần lắng nghe được bật thông qua hub, đồng thời kết nối nút giám sát với hub (trong trường hợp này, trong hầu hết các trường hợp, hiệu suất của kết nối mạng thấp hơn). giảm).

    Vì thế, tiện ích tcpdumpđược bao gồm trong hầu hết các bản phân phối Unix và cho phép bạn chặn và hiển thị/lưu lưu lượng truy cập mạng vào một tệp. Tiện ích sử dụng thư viện libpcap. Ngoài ra còn có một cổng cho Windows. Nó là cần thiết để tiện ích hoạt động. Ví dụ: trên Debian nó được cài đặt bằng lệnh:

    Debian:~# apt-get cài đặt tcpdump

    Các tiện ích cần thiết cho hoạt động (vì cài đặt giao diện mạng đã thay đổi - nó được chuyển sang chế độ "lăng nhăng"). Nói chung định dạng lệnh tcpdump có dạng sau:

    Debian:~# tcpdump<опции> <фильтр>

    tùy chọn tiện ích tcpdump

    -i giao diện

    Chỉ định giao diện mà lưu lượng truy cập sẽ được phân tích (không chỉ định giao diện - phân tích “giao diện đầu tiên xuất hiện”).

    Vô hiệu hóa độ phân giải IP thành tên miền. Nếu -nn được chỉ định, việc chuyển đổi số cổng thành tên giao thức sẽ bị cấm.

    Các tùy chọn bộ lọc được sử dụng phổ biến nhất cho lệnh tcpdump là:

    máy chủ dst

    Kiểm tra xem địa chỉ đích của gói IP có khớp với giá trị được chỉ định hay không. Có thể đặt cả IP, mạng con ở định dạng 10.0.0.1/24 và tên máy chủ.

    máy chủ src

    Kiểm tra xem địa chỉ nguồn của gói IP có khớp với giá trị được chỉ định hay không. Có thể đặt cả IP, mạng con ở định dạng 10.0.0.1/24 và tên máy chủ.

    máy chủ lưu trữ

    Kiểm tra xem địa chỉ người gửi hoặc người nhận có khớp với giá trị được chỉ định hay không. Có thể đặt cả IP, mạng con ở định dạng 10.0.0.1/24 và tên máy chủ.

    mạng_tên_mạng

    Kiểm tra xem địa chỉ người gửi/người nhận có nằm trên mạng được chỉ định hay không. Có thể chỉ định mạng ở định dạng CIDR (ví dụ: 10.0.0.1/22) hoặc chỉ định tên của mạng được chỉ định trong .

    ip | arp | rap | tcp | udp | icmp [máy chủ]

    Kiểm tra xem gói có thuộc một trong các giao thức được chỉ định hay không và khi chỉ định địa chỉ máy chủ, hãy kiểm tra xem địa chỉ người gửi/người nhận có khớp với địa chỉ được chỉ định hay không. Có thể đặt cả IP, mạng con ở định dạng 10.0.0.1/24 và tên máy chủ.

    cổng dst số cổng

    Nó kiểm tra xem gói có thuộc giao thức TCP/UDP hay không và cổng đích có bằng cổng được chỉ định hay không. Bạn có thể chỉ định số cổng hoặc tên được chỉ định trong tệp /etc/services.

    cổng src số cổng

    Nó kiểm tra xem gói có thuộc giao thức TCP/UDP hay không và cổng nguồn có bằng cổng được chỉ định hay không. Bạn có thể chỉ định số cổng hoặc tên được chỉ định trong tệp /etc/services.

    cổng số cổng

    Nó được kiểm tra xem gói có thuộc giao thức TCP/UDP hay không và cổng đích hoặc cổng nguồn có bằng cổng được chỉ định hay không. Bạn có thể chỉ định số cổng hoặc tên được chỉ định trong tệp /etc/services.

    phát sóng ip

    Kiểm tra xem gói IP có phải là gói quảng bá hay không.

    ether ( src | dst | máy chủ ) MAC_address

    Kiểm tra xem gói mạng có thuộc về nguồn, đích, nguồn hoặc đích có địa chỉ MAC đã cho hay không.

    phát sóng ether

    Kiểm tra xem gói ARP có phải là gói quảng bá hay không.

    Ví dụ sử dụng lệnh tcpdump

    Phân tích lưu lượng truy cập ở cấp độ mạng (ARP, ICMP) bằng tcpdump

    Giả sử chúng ta có 2 máy chủ. Host 1 với giao diện eth0 và các thông số sau:

    Host1:~# ip addr hiển thị dev eth0 5: eth0: mtu 1500 qdisc pfifo_fast trạng thái UNKNOWN qlen 1000 link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff inet 192.168.56.1/24 brd 192.168.56.255 phạm vi toàn cầu eth0 inet6 fe80: :800:27ff:fe00:0/64 liên kết phạm vi valid_lft mãi mãi ưu tiên_lft mãi mãi

    Và cả Host2 với giao diện eth1

    Host2:~# ip addr hiển thị dev eth1 3: eth1: mtu 1500 qdisc pfifo_fast trạng thái UP qlen 1000 link/ether 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff inet 192.168.56.33/24 phạm vi toàn cầu eth1 inet6 fe80::a00:27ff :fefd:e5aa/64 liên kết phạm vi valid_lft mãi mãi ưa thích_lft mãi mãi

    Giả sử rằng cho đến nay vẫn chưa có sự trao đổi dữ liệu mạng giữa các máy chủ và nếu bạn chạy lệnh ip neigh show trên máy chủ 2, bạn sẽ thấy rằng không có mục nào trong bảng ARP. Hãy làm một thí nghiệm nhỏ. Hãy chạy tiện ích tcpdump trên một trong các giao diện ảo Host1:

    Host1:~# tcpdump -ne -i eth0 tcpdump: đầu ra dài dòng bị chặn, sử dụng -v hoặc -vv để giải mã giao thức đầy đủ nghe trên eth0, EN10MB loại liên kết (Ethernet), kích thước chụp 65535 byte

    Host1:~# ping -c 1 192.168.56.33 PING 192.168.56.33 (192.168.56.33) 56(84) byte dữ liệu. 64 byte từ 192.168.56.33: icmp_req=1 ttl=64 time=1,06 ms --- 192.168.56.33 thống kê ping --- 1 gói được truyền, 1 gói đã nhận, mất gói 0%, thời gian 0ms rtt min/avg/max/mdev = 1,067/1,067/1,067/0,000 mili giây

    Sau đó, một mục về địa chỉ IP của Host2 xuất hiện trong bảng ARP của hệ thống Host1:

    Host1:~# ip neigh show dev eth0 192.168.56.33 lladdr 01:00:27:77:e5:00 HOST2

    Trên bảng điều khiển ảo tcpdump hiển thị thông tin sau cho chúng tôi:

    Host1:~# tcpdump -ne -i eth0 tcpdump: đầu ra dài dòng bị chặn, sử dụng -v hoặc -vv để giải mã giao thức đầy đủ nghe trên eth0, EN10MB loại liên kết (Ethernet), kích thước chụp 65535 byte 12:16:29.465780 0a:00 :27:00:00:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), độ dài 42: Yêu cầu ai có 192.168.56.33 cho biết 192.168.56.1, độ dài 28 12:16:29.466786 01 :00:27:77:e5:00 > 0a:00:27:00:00:00, ethertype ARP (0x0806), độ dài 42: Trả lời 192.168.56.33 là lúc 01:00:27:77:e5:00 , độ dài 28 12:16:29.466815 0a:00:27:00:00:00 > 01:00:27:77:e5:00, ethertype IPv4 (0x0800), độ dài 98: 192.168.56.1 > 192.168.56.33: ICMP yêu cầu tiếng vang, id 5284, seq 1, độ dài 64 12:16:29.467934 01:00:27:77:e5:00 > 0a:00:27:00:00:00, ethertype IPv4 (0x0800), độ dài 98: 192.168 .56.33 > 192.168.56.1: ICMP echo reply, id 5284, seq 1, length 64 ^C 4 gói đã bắt được 4 gói được bộ lọc nhận 0 gói bị loại bỏ bởi kernel

    Mỗi bản ghi gói mạng ở định dạng này chứa thời gian gói bị chặn, địa chỉ MAC nguồn và đích, loại giao thức, độ dài của gói và thông tin về nội dung của gói. Bản ghi đầu tiên mô tả yêu cầu phát ARP từ địa chỉ MAC của giao diện eth0 của hệ thống Host1 (" Ai có địa chỉ 192.168.56.33 thì ghi là 192.168.56.1"). Mục nhập thứ hai- phản hồi từ địa chỉ MAC của Host2 đến địa chỉ MAC của Host1 (" 192.168.56.33 có địa chỉ MAC là 01:00:27:77:e5:00"). Mục thứ ba và thứ tư (Yêu cầu ICMPPhản hồi ICMP) là kết quả của lệnh ping chạy trên Host1. Sau đó tcpdump bị gián đoạn. Trước khi tắt, tcpdump in số liệu thống kê hoạt động: số lượng gói bị chặn, được bộ lọc nhận và bị kernel loại bỏ

    Do đó, hệ thống Host1, để gửi yêu cầu tiếng vang tiêu chuẩn đến máy Host2, trước tiên hãy nhận địa chỉ MAC của máy Host2 bằng giao thức ARP và nhập nó, liên kết với địa chỉ IP, vào bảng ARP của nó.

    Phân tích lưu lượng ở lớp vận chuyển (TCP, UDP) bằng tcpdump

    Giả sử rằng một máy chủ WEB nhất định được cài đặt trên hệ thống Host2. Hãy thử mở một trang từ máy chủ web này trên máy chủ1 bằng trình duyệt bảng điều khiển lynx:

    Máy chủ1:~# lynx 192.168.56.33

    Trên bảng điều khiển khác, trước tiên hãy chạy tcpdump với các tham số lọc:

    Host1:~# tcpdump -n -i eth0 Host 192.168.56.33 và cổng 80 tcpdump: đầu ra dài dòng bị chặn, sử dụng -v hoặc -vv để giải mã giao thức đầy đủ nghe trên eth0, EN10MB loại liên kết (Ethernet), kích thước chụp 65535 byte 15 :44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Cờ [S], seq 1209026235, win 5840, tùy chọn , độ dài 0 15:44:37.838118 IP 192.168.56.33.80 > 192 .168.56.1.41533: Cờ, SEQ 370041518, ACK 1209026236, Win 5792, Tùy chọn, Độ dài 0 15: 44: 37.838157 IP 192.168.41533> 192.168.56.33.80: Cờ [.], ACK 1, Win 46, Tùy chọn, L Tiếng Anh 0 15: 44 :37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Cờ , seq 1:222, ack 1, win 46, tùy chọn, độ dài 221 15:44:37.839921 IP 192.168.56.33.80 > 192.1 68 .56.1.41533 : Cờ [.], ack 222, win 1716, options , length 0 15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 1:446, ack 222, win 1716, options , chiều dài 445 15 :44:37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Cờ [.], ack 446, win 54, tùy chọn, độ dài 0 15:44:37.849738 IP 192.168.56.33.80 > 192.16 8.56. 1. 41533 : Cờ , seq 446, ack 222, win 1716, tùy chọn , độ dài 0 15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Cờ , seq 222, ack 447, win 54, tùy chọn , độ dài 0 15 :44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Cờ [.], ack 223, win 1716, tùy chọn, độ dài 0 ...

    Trong ví dụ này, máy khách (192.168.56.1) từ cổng TCP 41533 thiết lập kết nối đến máy chủ (192.168.56.33) nghe trên cổng 80, đưa ra yêu cầu, nhận dữ liệu cần thiết và kết nối kết thúc.

    Tiêu đề phân đoạn TCP, ngoài số cổng người nhận và người gửi chứa một số tham số:

    • Số thứ tự(tiếp theo). Xác định thứ tự của các byte trong luồng được gửi tới mạng (độ lệch của byte đầu tiên trong phân đoạn so với phần đầu của luồng dữ liệu).
    • Số xác nhận(ACK). Số byte tối đa trong phân đoạn nhận được tăng thêm 1. Các xác nhận được gửi đến người gửi đồng thời đóng vai trò là yêu cầu về một phần dữ liệu mới.
    • Cờ kiểm soát(SYN - S, ACK, FIN -F, RST - R, PSH - P, URG)
    • Cửa sổ(win) - số byte dữ liệu mà người gửi dữ liệu mong đợi, bắt đầu từ byte có số được chỉ định trong trường ack. Để tối ưu hóa việc truyền, người gửi không chờ xác nhận cho từng phân đoạn đã gửi mà có thể gửi một nhóm vào mạng tới phân đoạn đó (nhưng tính bằng byte không lớn hơn kích thước cửa sổ). Nếu chất lượng kênh kém (nhiều yêu cầu truyền lại, mất xác nhận), cửa sổ sẽ giảm, nếu tốt thì cửa sổ sẽ tăng.
    • Tùy chọn. Dùng để giải các bài toán bổ trợ. Ví dụ: MSS (Kích thước phân đoạn tối đa) được truyền đi - kích thước phân khúc tối đa.

    Quá trình thiết lập kết nối TCP hai chiều được phản ánh trong ba mục tcpdump đầu tiên:

    • Máy khách gửi cho máy chủ một đoạn TCP có đặt cờ SYN, số “ngẫu nhiên” ban đầu (1209026235), từ đó các byte trong luồng mà nó gửi sẽ được đánh số, kích thước cửa sổ tối đa là dung lượng mà máy chủ được phép truyền mà không cần xác nhận từ khách hàng (5840): 15: 44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [S], seq 1209026235, win 5840, options , length
    • Máy chủ gửi cho máy khách một phân đoạn TCP có đặt cờ SYN và ACK, số "ngẫu nhiên" bắt đầu (370041518) mà từ đó các byte trong luồng mà nó gửi sẽ được đánh số và kích thước cửa sổ tối đa cho máy khách (5792). Phân đoạn này cũng xác nhận đã nhận được yêu cầu kết nối từ máy khách: 15:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 370041518, ack 1209026236, win 5792, options , length
    • Máy khách gửi cho máy chủ một phân đoạn TCP có đặt cờ ACK, đây là xác nhận nhận phân đoạn từ máy chủ (sau đây, tcpdump hiển thị các giá trị tương đối của seq và Ask): 15:44:37.838157 IP 192.168.56.1 .41533 > 192.168.56.33.80: Cờ [.], ack 1, win 46, tùy chọn, độ dài

    Sau đó kết nối được coi là đã thiết lập.

    Trong cặp bản ghi tiếp theo, máy khách gửi yêu cầu giao thức lớp ứng dụng (221 byte) đến máy chủ trong phần dữ liệu phân đoạn và nhận được xác nhận từ máy chủ về việc nhận:

    15:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags , seq 1:222, ack 1, win 46, tùy chọn , độ dài 221 15:44:37.839921 IP 192.168.56.33.80 > 19 2.168. 56.1 .41533: Cờ [.], ack 222, win 1716, tùy chọn, độ dài 0

    Trong trường hợp này, cờ PSH (P) được sử dụng để thông báo cho bên gửi rằng bên nhận đã sẵn sàng nhận dữ liệu. Tiếp theo, máy chủ gửi dữ liệu đến máy khách (445 byte) và nhận được xác nhận đã nhận từ nó:

    15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 1:446, ack 222, win 1716, tùy chọn , độ dài 445 15:44:37.848156 IP 192.168.56.1.415 33 > 192.168. 56,33 .80: Cờ [.], ack 446, thắng 54, tùy chọn, độ dài 0

    Sau đó, theo sáng kiến ​​của máy chủ, kết nối sẽ bị chấm dứt. Máy chủ gửi gói có cờ FIN được đặt:

    15:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 446, ack 222, win 1716, options , length 0

    Máy khách cũng phản hồi bằng cách gửi gói có cờ FIN được đặt; gói này cũng là xác nhận đã nhận được yêu cầu chấm dứt kết nối từ máy chủ:

    15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags , seq 222, ack 447, win 54, options , length 0

    Máy chủ chỉ có thể xác nhận đã nhận được phân đoạn FIN từ máy khách:

    15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223, win 1716, tùy chọn, độ dài 0

    Phản ứng của tcpdump khi cố gắng kết nối với cổng 23/tcp đã đóng:

    21:56:14.381091 IP 192.168.56.1.54040 > 192.168.56.33.23: Cờ [S], seq 2956835311, win 5840, tùy chọn , độ dài 0 21:56:14.381688 IP 192.168.56.33.23 > 1 92.168.56.1. 54040 : Cờ, seq 0, ack 2956835312, thắng 0, độ dài 0

    Trong ví dụ này, một nỗ lực được thực hiện từ hệ thống 192.168.56.1 để kết nối với dịch vụ TCP không tồn tại trên nút 192.168.56.33. Hệ thống từ xa phản hồi bằng cách gửi một phân đoạn có đặt cờ RST (đặt lại).

    Phản hồi tcpdump để gửi gói dữ liệu UDP tới cổng đóng 53/udp:

    21:55:16.925906 IP 192.168.56.1.41979 > 192.168.56.33.53: 6561+ A? www.tut.by. (28) 21:55:16.926615 IP 192.168.56.33 > 192.168.56.1: ICMP 192.168.56.33 cổng udp 53 không thể truy cập, chiều dài 64

    Ví dụ này cố gắng gửi một gói dữ liệu UDP tới một cổng không tồn tại trên hệ thống từ xa. UDP thường phản hồi bằng cách gửi tin nhắn ICMP đến máy chủ nguồn rằng cổng không thể truy cập được.

    Các ví dụ khác về việc sử dụng lệnh tcpdump:

    # tcpdump -n -i ppp0 ether src 11:20:b3:d8:d8:2c

    Hiển thị số liệu thống kê mạng từ giao diện ppp0 (-i ppp0) mà không chuyển đổi IP sang DNS (-n) cho những khung có địa chỉ MAC nguồn là 11:20:b3:d8:d8:2c.

    # tcpdump -n -e -i vlan0 ether phát sóng

    Đầu ra của lưu lượng phát sóng từ giao diện vlan0.

    # tcpdump -n -i eth0 src 192.168.66.1

    Các gói mạng có tiêu đề chứa địa chỉ IP 192.168.66.1 trong trường nguồn sẽ được lọc.

    # tcpdump -n -i eth0 máy chủ 192.168.66.1

    Các gói trong đó địa chỉ IP này được chỉ định làm nguồn hoặc đích của gói sẽ được lọc.

    # tcpdump -n -i eth0 src net 10.0.0.0 mặt nạ 255.0.0.0

    Các gói có nguồn chỉ ra các nút mạng 10.0.0.0/8 sẽ được lọc.

    # tcpdump -n -i eth0 icmp

    Chỉ xuất ra các gói ICMP từ giao diện eth0.

    Với điều này, tôi nghĩ tôi sẽ kết thúc bài viết hiện tại. Khi các ví dụ mới xuất hiện, tôi sẽ cập nhật bài viết. Tôi hy vọng rằng tài liệu sẽ hữu ích không chỉ với tôi

    Bài viết có sử dụng các ví dụ và một số tài liệu từ bài giảng trực giác.

    Trân trọng, McSim!