Maison > Opération et maintenance > CentOS > Comment utiliser tcpdump pour capturer des paquets réseau sous CentOS

Comment utiliser tcpdump pour capturer des paquets réseau sous CentOS

藏色散人
Libérer: 2021-01-04 14:26:53
avant
3555 Les gens l'ont consulté

La colonne suivante du tutoriel Centos vous présentera la méthode d'utilisation de la capture de paquets réseau tcpdump sous CentOS j'espère. cela sera utile aux amis qui en ont besoin.

Comment utiliser tcpdump pour capturer des paquets réseau sous CentOS

tcpdump est un outil d'interception et d'analyse des paquets de données réseau sous Linux. Il a une grande valeur de référence pour optimiser les performances du système.

Installation

tcpdump n'est pas installé par défaut. Installer sous CentOS :

yum install tcpdump
Copier après la connexion

Installer sous Ubuntu :

apt-get install tcpdump
Copier après la connexion
Démarrer par défaut
tcpdump
Copier après la connexion

Dans des circonstances normales, démarrer directement tcpdump surveillera tous les paquets de données circulant sur la première interface réseau.

Surveillez les paquets de données de l'interface réseau spécifiée (assurez-vous de vérifier la carte réseau)

tcpdump -i eth1
Copier après la connexion

Si vous ne spécifiez pas de carte réseau, par défaut, tcpdump ne surveillera que la première interface réseau , généralement eth0. Les exemples suivants sont Aucune interface réseau spécifiée.

Surveiller les paquets de données de l'hôte spécifié

Imprimer tous les paquets de données entrant ou sortant du coucher du soleil.

tcpdump host sundown
Copier après la connexion

Vous pouvez également spécifier l'adresse IP, par exemple, intercepter tous les 210.27. 48.1 hôtes recevant et tous les paquets envoyés

tcpdump host 210.27.48.1
Copier après la connexion

Imprimer les paquets communiqués entre helios et hot ou avec as

tcpdump host helios and \( hot or ace \)
Copier après la connexion

Hôte intercepté 210.27.48.1 et hôte 210.27.48.2 ou 210.27.48.3 Communication

tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
Copier après la connexion

Imprimez les paquets IP communiqués entre ace et tout autre hôte, mais sans inclure les paquets avec helios.

tcpdump ip host ace and not helios
Copier après la connexion

Si vous souhaitez obtenir l'hôte 210.27.48.1 sauf les paquets IP communiqués par tous les autres hôtes que l'hôte 210.27.48.2, utilisez la commande :

tcpdump ip host 210.27.48.1 and ! 210.27.48.2
Copier après la connexion

Intercepter toutes les données envoyées par l'hôte nom d'hôte

tcpdump -i eth0 src host hostname
Copier après la connexion

Surveiller tous les paquets de données envoyés à l'hôte nom d'hôte

tcpdump -i eth0 dst host hostname
Copier après la connexion
Surveiller les paquets de données de l'hôte et du port spécifiés

Si vous souhaitez obtenir les paquets telnet reçus ou envoyés par l'hôte 210.27.48.1, utilisez la commande suivante

tcpdump tcp port 23 and host 210.27.48.1
Copier après la connexion

pour surveiller le port udp 123 du local machine 123 Surveiller les paquets sur le réseau spécifié pour le port de service ntp

tcpdump udp port 123
Copier après la connexion

Imprimer tous les paquets de communication entre l'hôte local et les hôtes sur le réseau de Berkeley (nt: ucb-ether, ici Cela peut être comprise comme l'adresse réseau du «réseau de Berkeley». La signification originale de cette expression peut être exprimée comme suit: Imprimer tous les paquets avec l'adresse réseau ucb-ether)

tcpdump net ucb-ether
Copier après la connexion

Imprimer tous les paquets ftp passant par la passerelle snup. (Notez que l'expression est placée entre guillemets simples, ce qui empêche le shell d'analyser mal les parenthèses)

tcpdump 'gateway snup and (port ftp or ftp-data)'
Copier après la connexion

Imprime tous les paquets IP dont l'adresse source ou de destination est l'hôte local

(Si l'adresse locale Le réseau est connecté à un autre réseau via une passerelle, l'autre réseau ne peut pas être considéré comme le réseau local (ntr : la traduction de cette phrase prête à confusion et doit être complétée. Lorsque localnet est réellement utilisé, il doit être remplacé par le). nom du réseau local)

tcpdump ip and not net localnet
Copier après la connexion
Surveiller les paquets du protocole spécifié

Imprimer les paquets de début et de fin dans la session TCP, et la source ou la destination du paquet n'est pas un hôte sur le réseau local. (nt: localnet, utilisation réelle Il doit être remplacé par le nom du réseau local))

tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
Copier après la connexion

Imprimer tous les ports source ou destination sont 80, le protocole de couche réseau est IPv4 et contiennent des données , au lieu de SYN, FIN et ACK uniquement, qui ne contiennent pas de données de paquet (l'expression de la version ipv6 peut être utilisée comme exercice)

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
Copier après la connexion

(nt : peut être compris comme, ip[. 2:2] représente la longueur de l'intégralité du paquet IP, (ip[0]&0xf) <<2) Indique la longueur de l'en-tête du paquet de données IP (ip[0]&0xf représente le champ IHL dans le paquet, et l'unité de ce champ est de 32 bits. Pour convertir

en octets, vous devez multiplier par 4 , c'est-à-dire décaler vers la gauche de 2. (tcp[12]&0xf0)>>4 représente la longueur. de l'en-tête TCP. L'unité de ce champ est également de 32 bits. La conversion en nombre de bits est ((tcp[12]&0xf0) >> 4) <<  2,
C'est-à-dire (( tcp[12]&0xf0)>>2). ((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>> 2)) != 0 signifie : la longueur de l'intégralité du paquet ip moins la longueur de l'en-tête ip, puis moins la longueur de l'en-tête
tcp n'est pas 0, ce qui signifie Oui, il y a bien des données dans l'ip Pour la version ipv6, il vous suffit de considérer la différence entre la « longueur de la charge utile » dans l'en-tête ipv6 et la « longueur de l'en-tête TCP », et l'expression « ip[] » doit être remplacée par « ip6 [] ». .)

Imprimer les paquets IP de plus de 576 octets et l'adresse de la passerelle est snup

tcpdump 'gateway snup and ip[2:2] > 576'
Copier après la connexion

Imprimer tous les paquets de diffusion ou de multidiffusion de la couche IP, mais pas les datagrammes physiques de diffusion ou de multidiffusion Ethernet au niveau de la couche réseau

tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
Copier après la connexion

Imprimer les paquets de données ICMP autres que les types « demande d'écho » ou « réponse d'écho » (par exemple, vous pouvez l'utiliser lorsque vous devez imprimer tous les paquets de données générés par des programmes non ping) Expression.
(nt : 'echo reuqest' et 'echoanswer' Ces deux types de paquets ICMP sont généralement générés par le programme ping))

tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
Copier après la connexion
tcpdump et wireshark

Wireshark (anciennement ethereal) est un outil de capture de paquets très simple et facile à utiliser sous Windows. Mais il est difficile de trouver un outil graphique de capture de paquets utile sous Linux.
Heureusement, il existe Tcpdump. Nous pouvons utiliser la combinaison parfaite de Tcpdump + Wireshark pour y parvenir : capturer des paquets sous Linux, puis analyser les paquets sous Windows.

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
Copier après la connexion

使用tcpdump抓取HTTP包

tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。
Copier après la connexion

tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序(如Wireshark)进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

1、抓取回环网口的包:tcpdump -i lo

2、防止包截断:tcpdump -s0

3、以数字显示主机及端口:tcpdump -n

第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.

第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。

第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和 分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。

除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&;或运算 是'or' ,'||';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。

普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。

# tcpdump 
tcpdump: listening on fxp0
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
                       0000 0000 0080 0000 1007 cf08 0900 0000
                       0e80 0000 902b 4695 0980 8701 0014 0002
                       000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
                       ffff 0060 0004 ffff ffff ffff ffff ffff
                       0452 ffff ffff 0000 e85b 6d85 4008 0002
                       0640 4d41 5354 4552 5f57 4542 0000 0000
                       0000 00
Copier après la connexion

使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,
使用-c参数指定要监听的数据包数量,
使用-w参数指定将监听到的数据包写入文件中保存
A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:

#tcpdump host 210.27.48.1
Copier après la connexion

B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用 括号时,一定要

#tcpdump host 210.27.48.1 and / (210.27.48.2 or 210.27.48.3 /)
Copier après la connexion
Copier après la connexion

C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
Copier après la connexion
Copier après la connexion
Copier après la connexion

D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:

#tcpdump tcp port 23 host 210.27.48.1
Copier après la connexion
Copier après la connexion

E 对本机的udp 123 端口进行监视 123 为ntp的服务端口

# tcpdump udp port 123
Copier après la connexion

F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据:

#tcpdump -i eth0 src host hostname
Copier après la connexion

G 下面的命令可以监视所有送到主机hostname的数据包:

#tcpdump -i eth0 dst host hostname
Copier après la connexion

H  我们还可以监视通过指定网关的数据包:

#tcpdump -i eth0 gateway Gatewayname
Copier après la connexion

I 如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令:

#tcpdump -i eth0 host hostname and port 80
Copier après la connexion

J 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
Copier après la connexion
Copier après la connexion
Copier après la connexion

K 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令
:(在命令行中适用 括号时,一定要

#tcpdump host 210.27.48.1 and / (210.27.48.2 or 210.27.48.3 /)
Copier après la connexion
Copier après la connexion

L 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
Copier après la connexion
Copier après la connexion
Copier après la connexion

M 如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:

#tcpdump tcp port 23 host 210.27.48.1
Copier après la connexion
Copier après la connexion

第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
r' ,'||';
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,
如果我们只需要列出送到80端口的数据包,用dst port;如果我们只希望看到返回80端口的数据包,用src port。

#tcpdump –i eth0 host hostname and dst port 80  目的端口是80
Copier après la connexion

或者

#tcpdump –i eth0 host hostname and src port 80  源端口是80  一般是提供http的服务的主机
Copier après la connexion

如果条件很多的话  要在条件之前加and 或 or 或 not

#tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80
Copier après la connexion

如果在ethernet 使用混杂模式 系统的日志将会记录
May  7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled.
May  7 20:03:46 localhost kernel: device eth0 entered promiscuous mode
May  7 20:03:57 localhost kernel: device eth0 left promiscuous mode
tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

# tcpdump   -i eth1 src  host 211.167.237.199
00:02:03.096713 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010208:2010352(144) ack 33377 win 8576
00:02:03.096951 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010352:2010496(144) ack 33377 win 8576
00:02:03.100928 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010496:2010640(144) ack 33377 win 8576
00:02:03.101165 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010640:2010784(144) ack 33377 win 8576
00:02:03.102554 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010784:2010928(144) ack 33425 win 8576
Copier après la connexion

表明在00:02:03点的时候,211.167.237.199通过ssh源端口连接到221.216.165.189的1467端口

#tcpdump -i eth1 src host 211.167.237.199 and dst port 1467
00:09:27.603075 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 180400:180544(144) ack 2833 win 8576
00:09:27.605631 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 180544:180688(144) ack 2881 win 8576
Copier après la connexion

截获所有由eth0进入、源地址(src)为192.168.0.5的主机(host),并且(and)目标(dst)端口(port)为80的数据包

观看网卡传送、接收数据包的状态

$ netstat  -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500  0  14639   0      0      0    5705    119    0     0   BMRU

Iface:  网卡
RX-OK RX-ERR RX-DRP RX-OVR : 网卡正确接收数据包的数量以及发生错误、流失、碰撞的总数
TX-OK TX-ERR TX-DRP TX-OVR : 网卡正确发送数据包的数量以及发生错误、流失、碰撞的总数
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal