Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

マスター TCPDump:パケット分析に必要な 15 のコマンド例

マスター TCPDump:パケット分析に必要な 15 のコマンド例

tcpdump コマンドはパケット アナライザーとも呼ばれます。

tcpdump コマンドは、ほとんどの Unix オペレーティング システムで動作します。 tcpdump を使用すると、キャプチャされたパケットを保存して、将来の分析に使用できるようになります。保存されたファイルは、同じ tcpdump コマンドで表示できます。 Wireshark などのオープン ソース ソフトウェアを使用して tcpdump pcap ファイルを読み取ることもできます。

この tcpdump チュートリアルでは、tcpdump コマンドの使用方法に関するいくつかの実践的な例について説明します。

1. tcpdump -i

を使用して、特定のイーサネット インターフェイスからパケットをキャプチャします。

オプションを指定せずに tcpdump コマンドを実行すると、すべてのインターフェイスを流れるすべてのパケットがキャプチャされます。 tcpdump コマンドの -i オプションを使用すると、特定のイーサネット インターフェイスでフィルタリングできます。

$ tcpdump -i eth1
14:59:26.608728 IP xx.domain.netbcp.net.52497 > valh4.lell.net.ssh: . ack 540 win 16554
14:59:26.610602 IP resolver.lell.net.domain > valh4.lell.net.24151: 4278 1/0/0 (73)
14:59:26.611262 IP valh4.lell.net.38527 > resolver.lell.net.domain: 26364+ PTR? 244.207.104.10.in-addr.arpa. (45)

この例では、tcpdump はインターフェイス eth1 を流れるすべてのパケット フローをキャプチャし、標準出力に表示します。

注意 :Editcap ユーティリティは、ダンプ ファイルから特定のパケットを選択または削除し、特定の形式に変換するために使用されます。

2. tcpdump -c を使用して N 個のパケットのみをキャプチャします

tcpdump コマンドを実行すると、tcpdump コマンドをキャンセルするまでパケットが送信されます。 -c オプションを使用すると、キャプチャするパケットの数を指定できます。

$ tcpdump -c 2 -i eth0
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
14:38:38.184913 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 1457255642:1457255758(116) ack 1561463966 win 63652
14:38:38.690919 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 116:232(116) ack 1 win 63652
2 packets captured
13 packets received by filter
0 packets dropped by kernel

上記の tcpdump コマンドは、インターフェイス eth0 から 2 つのパケットのみをキャプチャしました。

注: Mergecap と TShark:Mergecap はパケット ダンプ結合ツールであり、複数のダンプを 1 つのダンプ ファイルに結合します。 Tshark は、ネットワーク パケットをキャプチャする強力なツールであり、ネットワーク トラフィックの分析に使用できます。 Wireshark ネットワーク アナライザーのディストリビューションが付属しています。

3. tcpdump -A を使用してキャプチャされたパケットを ASCII で表示

次の tcpdump 構文は、パケットを ASCII で出力します。

$ tcpdump -A -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
14:34:50.913995 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 1457239478:1457239594(116) ack 1561461262 win 63652
E.....@.@..]..i...9...*.V...]...P....h....E...>{..U=...g.
......G..7\+KA....A...L.
14:34:51.423640 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 116:232(116) ack 1 win 63652
E.....@.@..\..i...9...*.V..*]...P....h....7......X..!....Im.S.g.u:*..O&....^#Ba...
E..(R.@.|.....9...i.*...]...V..*P..OWp........

注: ifconfig コマンドを使用してネットワーク インターフェイスを構成します

4. tcpdump -XX を使用して、キャプチャされたパケットを HEX および ASCII で表示します

ユーザーによっては、パケットを 16 進値で分析したい場合があります。 tcpdump は、ASCII 形式と HEX 形式の両方でパケットを出力する方法を提供します。

$tcpdump -XX -i eth0
18:52:54.859697 IP zz.domain.innetbcp.net.63897 > valh4.lell.net.ssh: . ack 232 win 16511
 0x0000: 0050 569c 35a3 0019 bb1c 0c00 0800 4500 .PV.5.........E.
 0x0010: 0028 042a 4000 7906 c89c 10b5 aaf6 0f9a .(.*@.y.........
 0x0020: 69c4 f999 0016 57db 6e08 c712 ea2e 5010 i.....W.n.....P.
 0x0030: 407f c976 0000 0000 0000 0000 @..v........
18:52:54.877713 IP 10.0.0.0 > all-systems.mcast.net: igmp query v3 [max resp time 1s]
 0x0000: 0050 569c 35a3 0000 0000 0000 0800 4600 .PV.5.........F.
 0x0010: 0024 0000 0000 0102 3ad3 0a00 0000 e000 .$......:.......
 0x0020: 0001 9404 0000 1101 ebfe 0000 0000 0300 ................
 0x0030: 0000 0000 0000 0000 0000 0000 ............

5. tcpdump -w

を使用してパケットをキャプチャし、ファイルに書き込みます。

tcpdump を使用すると、パケットをファイルに保存でき、後でそのパケット ファイルをさらに分析するために使用できます。

$ tcpdump -w 08232010.pcap -i eth0
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
32 packets captured
32 packets received by filter
0 packets dropped by kernel

-w オプションは、パケットを指定されたファイルに書き込みます。ファイル拡張子は .pcap にする必要があり、どのネットワーク プロトコルでも読み取ることができます。
アナライザー。

6. tcpdump -r

を使用して保存されたファイルからパケットを読み取る

以下に示すように、キャプチャされた pcap ファイルを読み取り、分析用のパケットを表示できます。

$tcpdump -tttt -r data.pcap
2010-08-22 21:35:26.571793 00:50:56:9c:69:38 (oui Unknown) > Broadcast, ethertype Unknown (0xcafe), length 74:
 0x0000: 0200 000a ffff 0000 ffff 0c00 3c00 0000 ............<...
 0x0010: 0000 0000 0100 0080 3e9e 2900 0000 0000 ........>.).....
 0x0020: 0000 0000 ffff ffff ad00 996b 0600 0050 ...........k...P
 0x0030: 569c 6938 0000 0000 8e07 0000 V.i8........
2010-08-22 21:35:26.571797 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.50570: P 800464396:800464448(52) ack 203316566 win 71
2010-08-22 21:35:26.571800 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.50570: P 52:168(116) ack 1 win 71
2010-08-22 21:35:26.584865 IP valh5.lell.net.ssh > 11.154.12.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADC

7. tcpdump -n

を使用して IP アドレスを持つパケットをキャプチャします

上記のすべての例では、DNS アドレスを含むパケットが出力されますが、IP アドレスは出力されません。次の例ではパケットをキャプチャし、関係するマシンの IP アドレスを表示します。

$ tcpdump -n -i eth0
15:01:35.170763 IP 10.0.19.121.52497 > 11.154.12.121.ssh: P 105:157(52) ack 18060 win 16549
15:01:35.170776 IP 11.154.12.121.ssh > 10.0.19.121.52497: P 23988:24136(148) ack 157 win 113
15:01:35.170894 IP 11.154.12.121.ssh > 10.0.19.121.52497: P 24136:24380(244) ack 157 win 113

8. tcpdump -tttt

を使用して、適切な読み取り可能なタイムスタンプを持つパケットをキャプチャします。
$ tcpdump -n -tttt -i eth0
2010-08-22 15:10:39.162830 IP 10.0.19.121.52497 > 11.154.12.121.ssh: . ack 49800 win 16390
2010-08-22 15:10:39.162833 IP 10.0.19.121.52497 > 11.154.12.121.ssh: . ack 50288 win 16660
2010-08-22 15:10:39.162867 IP 10.0.19.121.52497 > 11.154.12.121.ssh: . ack 50584 win 16586

9. N バイトを超えるパケットを読み取る

tcpdump コマンドでフィルター「より大きい」を使用すると、バイト数が n を超えるパケットのみを受信できます。

$ tcpdump -w g_1024.pcap greater 1024

10.特定のプロトコル タイプのパケットのみを受信します

プロトコルの種類に基づいてパケットを受信できます。 fddi、tr、wlan、ip、ip6、arp、rarp、decnet、tcp、udp のいずれかのプロトコルを指定できます。次の例では、eth0 インターフェイスを流れる arp パケットのみをキャプチャします。

$ tcpdump -i eth0 arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
19:41:52.809642 arp who-has valh5.lell.net tell valh9.lell.net
19:41:52.863689 arp who-has 11.154.12.1 tell valh6.lell.net
19:41:53.024769 arp who-has 11.154.12.1 tell valh7.lell.net

11. N バイト未満のパケットを読み取ります

tcpdump コマンドでフィルター「less」を使用すると、n バイト未満のパケットのみを受信できます。

$ tcpdump -w l_1024.pcap less 1024

12. tcpdump ポートを使用して特定のポートでパケット フローを受信します

マシン上の特定のポートで受信したすべてのパケットを知りたい場合は、以下に示すように tcpdump コマンドを使用できます。

$ tcpdump -i eth0 port 22
19:44:44.934459 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 18932:19096(164) ack 105 win 71
19:44:44.934533 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 19096:19260(164) ack 105 win 71
19:44:44.934612 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 19260:19424(164) ack 105 win 71

13.特定の宛先 IP およびポートのパケットをキャプチャします

パケットには送信元と宛先の IP 番号とポート番号が含まれます。 tcpdump を使用すると、送信元または宛先の IP およびポート番号にフィルターを適用できます。次のコマンドは、特定の宛先 IP とポート番号 22 を持つ eth0 のパケット フローをキャプチャします。

$ tcpdump -w xpackets.pcap -i eth0 dst 10.181.140.216 and port 22

14. 2 つのホスト間の TCP 通信パケットをキャプチャします

2 つの異なるマシンからの 2 つの異なるプロセスが tcp プロトコルを通じて通信している場合、以下に示すように tcpdump を使用してそれらのパケットをキャプチャできます。

$tcpdump -w comm.pcap -i eth0 dst 16.181.170.246 and port 22

ネットワーク プロトコル アナライザー ツールを使用して comm.pcap ファイルを開いて、潜在的な問題をデバッグできます。

15. tcpdump フィルタ パケット – arp と rarp 以外のすべてのパケットをキャプチャします

tcpdump コマンドでは、「and」、「or」、「not」条件を指定して、それに応じてパケットをフィルタリングできます。

$ tcpdump -i eth0 not arp and not rarp
20:33:15.479278 IP resolver.lell.net.domain > valh4.lell.net.64639: 26929 1/0/0 (73)
20:33:15.479890 IP valh4.lell.net.16053 > resolver.lell.net.domain: 56556+ PTR? 255.107.154.15.in-addr.arpa. (45)
20:33:15.480197 IP valh4.lell.net.ssh > zz.domain.innetbcp.net.63897: P 540:1504(964) ack 1 win 96
20:33:15.487118 IP zz.domain.innetbcp.net.63897 > valh4.lell.net.ssh: . ack 540 win 16486
20:33:15.668599 IP 10.0.0.0 > all-systems.mcast.net: igmp query v3 [max resp time 1s]

  1. Linuxで簡単なシェルスクリプトを作成する方法

    シェルスクリプトの作成は、Linuxユーザーが指先で習得する必要のある最も重要なスキルの1つです。シェルスクリプトは、行ごとに実行するのが面倒な反復タスクを自動化する上で大きな役割を果たします。 このチュートリアルでは、すべてのLinuxユーザーが持つべき基本的なシェルスクリプト操作のいくつかに焦点を当てます。 1。簡単なシェルスクリプトを作成する シェルスクリプトは、 ASCIIで構成されるファイルです。 文章。まず、簡単なシェルスクリプトを作成します。これを行うには、テキストエディタを使用します。コマンドラインとGUIベースの両方で、かなりの数のテキストエディタがあります。このガイドで

  2. Linux 上ですべてのユーザーがアクセスできる共有ディレクトリを作成する:ステップバイステップ ガイド

    システム管理者は、Linux サーバー上のすべてのユーザーに読み取り/書き込みアクセスを許可する特定のディレクトリを持っている場合があります。このガイドでは、Linux の特定のディレクトリ (共有ディレクトリ) ですべてのユーザーに書き込みアクセスを有効にする方法を確認します。 これには、適切なアクセス許可を設定する必要があり、特定のディレクトリを共有するか書き込みアクセス権を持つすべてのユーザーに共通のグループを割り当てるための最も効果的かつ信頼性の高い方法が必要です。 したがって、システム上にディレクトリと共通グループが存在しない場合に備えて、次のようにディレクトリと共通グループを作