Saturday, June 29, 2024

Phân tích gói tin bằng Tcpdump

-

Tcpdump là gì?

Tcpdump là một công cụ dòng lệnh cho phép người dùng bắt và phân tích các gói tin mạng trên một giao diện mạng được chỉ định. Nó cho phép người dùng xem các giao thức mạng và các hoạt động kết nối giữa các máy tính trong mạng. Tcpdump là một công cụ quan trọng cho việc phân tích và gỡ rối mạng.

Để cài đặt tcpdump trên hệ điều hành Ubuntu hoặc Debian, bạn có thể sử dụng câu lệnh sau trong terminal:

sudo apt-get update
sudo apt-get install tcpdump

Đối với các hệ điều hành khác, bạn có thể sử dụng trình quản lý gói tương ứng hoặc tải xuống và cài đặt bằng tay từ trang web chính thức của tcpdump (http://www.tcpdump.org/).

Sử dụng Tcpdump như thế nào?

– Để bắt tất cả các gói tin trên 1 interface nhất định, sử dụng lệnh.

tcpdump -i <interface>

Ví dụ.

$ tcpdump -i ens160 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
23:56:00.688007 IP wp-hoanghd.8022 > 192.168.123.1.5346: Flags [P.], seq 2131007465:2131007653, ack 442201210, win 501, options [nop,nop,TS val 738865499 ecr 192756036], length 188
23:56:00.695390 IP 192.168.123.1.5346 > wp-hoanghd.8022: Flags [.], ack 188, win 2045, options [nop,nop,TS val 192756103 ecr 738865499], length 0
23:56:01.724586 IP wp-hoanghd.8022 > 192.168.123.1.55178: Flags [P.], seq 1104194648:1104194700, ack 3621912612, win 502, options [nop,nop,TS val 738866536 ecr 3742551551], length 52
23:56:01.870797 IP 192.168.123.1.55178 > wp-hoanghd.8022: Flags [F.], seq 53, ack 52, win 501, options [nop,nop,TS val 3742553779 ecr 738866536], length 0
23:56:01.870836 IP wp-hoanghd.8022 > 192.168.123.1.55178: Flags [.], ack 1, win 502, options [nop,nop,TS val 738866682 ecr 3742551551,nop,nop,sack 1 {53:54}], length 0
23:56:01.870861 IP 192.168.123.1.55178 > wp-hoanghd.8022: Flags [P.], seq 1:53, ack 52, win 501, options [nop,nop,TS val 3742553779 ecr 738866536], length 52
23:56:01.870920 IP wp-hoanghd.8022 > 192.168.123.1.55178: Flags [.], ack 54, win 502, options [nop,nop,TS val 738866682 ecr 3742553779], length 0
23:56:01.873058 IP wp-hoanghd.8022 > 192.168.123.1.55178: Flags [F.], seq 52, ack 54, win 502, options [nop,nop,TS val 738866684 ecr 3742553779], length 0
23:56:02.018040 IP 192.168.123.1.55178 > wp-hoanghd.8022: Flags [.], ack 53, win 501, options [nop,nop,TS val 3742553926 ecr 738866684], length 0
23:56:02.242039 IP wp-hoanghd.52470 > 192.168.100.6.snmp:  F=r U="" E= C="" GetRequest(14)

– Bắt các gói tin tcp.

Câu lệnh trên sẽ bắt tất cả các gói tin TCP trên giao diện mạng mặc định. Nếu bạn muốn bắt các gói tin TCP trên một giao diện mạng cụ thể, bạn có thể sử dụng tùy chọn -i:

sudo tcpdump -i <interface> tcp

Trong đó <interface> là tên giao diện mạng muốn bắt các gói tin TCP, ví dụ như eth0, enp0s3,…

Ví dụ với TCP.

$ tcpdump -i ens160 tcp | head -n 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
23:57:12.933917 IP wp-hoanghd.8022 > 192.168.123.1.5346: Flags [P.], seq 2139704653:2139704841, ack 442207958, win 501, options [nop,nop,TS val 738937744 ecr 192827622], length 188
23:57:12.939433 IP 192.168.123.1.5346 > wp-hoanghd.8022: Flags [.], ack 188, win 2045, options [nop,nop,TS val 192827664 ecr 738937744], length 0
23:57:14.637655 IP 192.168.123.1.39224 > wp-hoanghd.8022: Flags [S], seq 709564515, win 64240, options [mss 1460,sackOK,TS val 4088036405 ecr 0,nop,wscale 7], length 0
23:57:14.637720 IP wp-hoanghd.8022 > 192.168.123.1.39224: Flags [S.], seq 2414687167, ack 709564516, win 65160, options [mss 1460,sackOK,TS val 738939448 ecr 4088036405,nop,wscale 7], length 0
23:57:14.897529 IP 192.168.123.1.39224 > wp-hoanghd.8022: Flags [.], ack 1, win 502, options [nop,nop,TS val 4088036665 ecr 738939448], length 0
23:57:14.909676 IP wp-hoanghd.8022 > 192.168.123.1.39224: Flags [P.], seq 1:42, ack 1, win 510, options [nop,nop,TS val 738939720 ecr 4088036665], length 41
23:57:14.915646 IP 192.168.123.1.39224 > wp-hoanghd.8022: Flags [P.], seq 1:18, ack 1, win 502, options [nop,nop,TS val 4088036684 ecr 738939448], length 17
23:57:14.915661 IP wp-hoanghd.8022 > 192.168.123.1.39224: Flags [.], ack 18, win 510, options [nop,nop,TS val 738939726 ecr 4088036684], length 0
23:57:14.993128 IP 149.154.167.220.https > wp-hoanghd.40348: Flags [P.], seq 1814835750:1814836040, ack 1340917758, win 69, options [nop,nop,TS val 2367148870 ecr 2702152575], length 290
23:57:14.993201 IP wp-hoanghd.40348 > 149.154.167.220.https: Flags [.], ack 290, win 501, options [nop,nop,TS val 2702155536 ecr 2367148870], length 0

Hoặc UDP.

$  tcpdump -i ens160 udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
00:00:37.119157 IP wp-hoanghd.43432 > 192.168.123.2.snmp:  F=apr U="admin" [!scoped PDU]d6_84_fa_b6_be_f7_93_16_60_d9_ad_31_60_2c_3d_78_91_72_fc_8c_1b_91_b0_8f_b4_ba_83_d8_32_4e_ab_d0_8c_15_fc_ff_8c_d8_18_de_24_e2_42_28_86_23_c6_e0_f5_27_51_1d_a5_ff_74_fc
00:00:37.121499 IP 192.168.123.2.snmp > wp-hoanghd.43432:  F=ap U="admin" [!scoped PDU]f4_58_ca_4f_6a_0a_b6_ac_99_9b_f2_93_9f_c4_c5_f9_43_55_a9_2a_c5_7e_71_4f_66_a2_93_3c_e2_8e_fe_c9_98_86_69_85_f2_c2_e9_36_33_56_74_7a_58_ee_5b_57_7c_e9_ce_e7_25_e5_d0_48
00:00:37.121648 IP wp-hoanghd.43432 > 192.168.123.2.snmp:  F=apr U="admin" [!scoped PDU]ce_10_d6_60_9f_56_a6_ef_6d_90_0b_06_f0_1e_ea_15_00_00_61_d4_b9_9c_60_49_ff_ef_de_66_86_f1_bd_37_9b_77_e1_32_33_3b_9e_c1_5d_92_b2_79_dc_0a_61_69_1b_29_98_41_01_22_aa_98
00:00:37.123581 IP 192.168.123.2.snmp > wp-hoanghd.43432:  F=ap U="admin" [!scoped PDU]5f_0d_af_4a_d2_0a_ac_d4_1a_0c_7b_c1_0c_f6_d1_0c_f7_c5_57_92_c8_11_8a_ff_ec_bd_8d_12_c5_28_db_3b_3e_4f_57_f9_ef_d2_14_12_24_b8_ef_5f_92_89_7f_99_de_4a_dc_72_17_21_81_55
00:00:37.123849 IP wp-hoanghd.43432 > 192.168.123.2.snmp:  F=apr U="admin" [!scoped PDU]ee_56_50_46_f0_fa_05_6c_e6_80_15_bd_70_21_16_d5_fa_3d_22_01_10_48_34_23_9a_d6_c4_29_be_c1_0d_f3_71_27_dd_e0_7c_c3_8b_66_f2_13_df_08_ff_21_bb_9b_4b_4c_c1_73_88_3e_6b_4d

– Bắt gói tin có source có dest.

Để bắt các gói tin có source và dest, ta sử dụng option -n để hiển thị địa chỉ IP, -i để chỉ định interface mạng và sử dụng filter expression với điều kiện có source và dest. Ví dụ để bắt các gói tin TCP có source là 192.168.1.10 và dest là 8.8.8.8 trên interface eth0, ta sử dụng lệnh:

$ sudo tcpdump -n -i ens160 'udp and src host 192.168.100.111 and dst host 192.168.123.2'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
00:03:36.020938 IP 192.168.100.111.53324 > 192.168.123.2.161:  F=r U="" E= C="" GetRequest(14)
00:03:36.023456 IP 192.168.100.111.53324 > 192.168.123.2.161:  F=apr U="admin" [!scoped PDU]e5_81_4d_ac_f6_00_de_c5_2e_eb_4b_37_12_77_f8_20_35_0f_fa_60_f4_66_f8_9d_80_f0_72_65_ce_c1_40_75_e9_77_57_3d_ab_8b_32_17_48_3c_34_07_80_ef_2c_ba
00:03:36.030385 IP 192.168.100.111.53324 > 192.168.123.2.161:  F=apr U="admin" [!scoped PDU]85_53_a7_8c_77_bb_6a_db_d7_8e_5f_6b_ae_4e_4d_d7_fc_e2_99_54_5f_e5_f5_c0_0a_ca_93_e5_dd_35_4d_0e_90_a6_73_37_30_30_c3_7e_06_cc_6e_56_d9_48_ac_79
00:03:36.079465 IP 192.168.100.111.42596 > 192.168.123.2.161:  F=r U="" E= C="" GetRequest(14)
00:03:36.082103 IP 192.168.100.111.42596 > 192.168.123.2.161:  F=apr U="admin" [!scoped PDU]5e_f3_75_09_ef_55_41_81_d2_f7_93_15_93_36_24_9b_90_95_9a_fb_f5_85_0c_05_01_6f_24_65_ca_70_fc_42_44_21_29_b9_3e_d7_47_2a_3c_3b_86_69_2c_14_9d_50_fe_87_f5_9f_80_9a_71_a6
00:03:36.084338 IP 192.168.100.111.42596 > 192.168.123.2.161:  F=apr U="admin" [!scoped PDU]05_37_b5_21_f8_c6_80_f2_9b_95_d7_2f_99_72_88_21_d4_77_85_5d_0c_7c_10_f3_6d_65_83_08_29_43_31_de_a7_03_9c_3c_c8_05_d0_c6_10_f4_b0_cb_7d_ac_d0_89_a5_0d_7f_63_7e_96_dc_4b
00:03:36.086612 IP 192.168.100.111.42596 > 192.168.123.2.161:  F=apr U="admin" [!scoped PDU]72_1f_24_68_60_71_45_bd_be_d8_f4_62_50_54_b8_c9_85_10_ba_1e_d5_fc_70_d0_84_78_05_fe_f6_84_a6_f4_39_5b_61_c1_a7_4d_c0_33_30_6c_68_a2_34_0b_8a_cd_c0_bb_3b_be_4b_59_4b_42

Trong đó:

  • -n: Hiển thị địa chỉ IP.
  • -i ens160: Chỉ định interface mạng là eth0.
  • 'tcp and src host 192.168.100.111 and dst host 192.168.123.2': Filter expression với điều kiện có giao thức TCP (tcp) và source là 192.168.100.111 và dest là 192.168.123.2.

Để lọc top địa chỉ IP xuất hiện nhiều nhất trong các gói tin.

Để lọc top địa chỉ IP xuất hiện nhiều nhất trong các gói tin, ta có thể sử dụng lệnh sau:

sudo tcpdump -nn -i <interface> -c <number_of_packets> | awk '{print $3}' | sort | uniq -c | sort -nr | head

Trong đó:

  • <interface>: Tên của interface mạng cần bắt gói tin.
  • <number_of_packets>: Số lượng gói tin cần bắt.

Lệnh trên sẽ bắt các gói tin trên interface được chỉ định và hiển thị địa chỉ IP xuất hiện nhiều nhất trong số các gói tin này.

Ví dụ.

$ sudo tcpdump -nn -i ens160 -c 50 | awk '{print $3}' | sort | uniq -c | sort -nr | head
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
50 packets captured
55 packets received by filter
0 packets dropped by kernel
     20 192.168.100.111.40348
     14 149.154.167.220.443
      8 192.168.100.111.8022
      7 192.168.123.1.43922
      1 192.168.123.1.5346

– Chỉ hiển thị giao thức cao nhất.

Ví dụ sao sẽ chạy tcpdump liên tục và chỉ hiển thị 10 giao thức cao nhất, bạn có thể sử dụng một loạt các lệnh để xử lý đầu ra của tcpdump. Dưới đây là một ví dụ về cách làm điều đó:

$ sudo tcpdump -i ens160 -n -c 1000 -q -ttttt | awk -F ' ' '{print $1,$2,$3,$4,$5}' | sort | uniq -c | sort -nr | head -n 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes

1000 packets captured
1017 packets received by filter
0 packets dropped by kernel
      1 00:00:39.258743 IP 192.168.100.111.50616 > 192.168.100.5.161:
      1 00:00:38.370266 IP 192.168.100.111.40348 > 149.154.167.220.443:
      1 00:00:38.330329 IP 149.154.167.220.443 > 192.168.100.111.40348:
      1 00:00:38.330090 IP 149.154.167.220.443 > 192.168.100.111.40348:
      1 00:00:38.330055 IP 149.154.167.220.443 > 192.168.100.111.40348:
      1 00:00:38.101514 IP 192.168.100.111.40348 > 149.154.167.220.443:
      1 00:00:38.101501 IP 192.168.100.111.40348 > 149.154.167.220.443:
      1 00:00:38.101464 IP 192.168.100.111.40348 > 149.154.167.220.443:
      1 00:00:38.101094 IP 192.168.100.111.40348 > 149.154.167.220.443:
      1 00:00:38.101011 IP 149.154.167.220.443 > 192.168.100.111.40348

Trong lệnh này:

  • sudo tcpdump -i ens160 -n -c 1000 -q -ttttt sẽ chạy tcpdump trên giao diện ens160, không giới hạn số lượng gói mạng bắt được (-c 1000) và sử dụng -q để làm cho tcpdump chỉ xuất kết quả bằng văn bản thô (không giải mã giao thức). Tùy chỉnh -ttttt sẽ hiển thị thời gian ở định dạng chi tiết hơn.
  • Sau đó, awk -F ' ' '{print $1,$2,$3,$4,$5}' sẽ chọn cột đầu tiên đến cột thứ năm từ đầu ra của tcpdump, bỏ qua các thông tin không cần thiết.
  • Tiếp theo, kết quả này được sắp xếp (sort) và sau đó sử dụng uniq -c để đếm số lần xuất hiện của mỗi dòng.
  • Cuối cùng, kết quả được sắp xếp lại (sort -nr) theo thứ tự giảm dần và lệnh head -n 10 chỉ hiển thị 10 giao thức cao nhất.

Lệnh này sẽ chạy tcpdump, thu thập gói mạng và hiển thị thông tin về 10 giao thức phổ biến nhất. Để dừng quá trình, bạn có thể nhấn Ctrl+C.

– Để hiển thị các gói mạng TCP hoặc UDP cao nhất cùng với số cổng (port number).

Để hiển thị các gói mạng TCP hoặc UDP cùng với số cổng (port number), bạn có thể sử dụng lệnh tcpdump kết hợp với tùy chọn -n để không giải mã tên máy chủ, -ttttt để hiển thị thời gian chi tiết, và -q để giảm mức độ chi tiết. Dưới đây là một ví dụ:

Trong lệnh này:

$ sudo tcpdump -c 100 -i ens160 -n -ttttt -q 'tcp or udp' | sort | uniq -c | sort -nr
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
100 packets captured
125 packets received by filter
0 packets dropped by kernel
      1  00:00:00.081114 IP 192.168.100.111.8022 > 192.168.123.1.25070: tcp 0
      1  00:00:00.081109 IP 192.168.123.1.25070 > 192.168.100.111.8022: tcp 1440
      1  00:00:00.081066 IP 192.168.100.111.8022 > 192.168.123.1.25070: tcp 0
      1  00:00:00.081061 IP 192.168.123.1.25070 > 192.168.100.111.8022: tcp 24
      1  00:00:00.079523 IP 192.168.123.1.25070 > 192.168.100.111.8022: tcp 0
      1  00:00:00.079377 IP 192.168.100.111.8022 > 192.168.123.1.25070: tcp 12960
      1  00:00:00.079370 IP 192.168.123.1.25070 > 192.168.100.111.8022: tcp 136
      1  00:00:00.078929 IP 192.168.100.111.8022 > 192.168.123.1.25070: tcp 0
      1  00:00:00.078903 IP 192.168.123.1.25070 > 192.168.100.111.8022: tcp 240
      1  00:00:00.077652 IP 192.168.123.1.25070 > 192.168.100.111.8022: tcp 136
  • sudo tcpdump -i ens160 -n -ttttt -q 'tcp or udp' chạy tcpdump trên giao diện ens160, hiển thị thông tin về các gói mạng TCP hoặc UDP (tcp or udp).
  • Tiếp theo, kết quả này được sắp xếp (sort) và sau đó sử dụng uniq -c để đếm số lần xuất hiện của mỗi dòng.
  • Cuối cùng, kết quả được sắp xếp lại (sort -nr) theo thứ tự giảm dần và lệnh head -n 10 chỉ hiển thị 10 giao thức cao nhất, bao gồm cả TCP và UDP, cùng với số cổng (port number).

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories