집 >운영 및 유지보수 >리눅스 운영 및 유지 관리 >Linux 네트워크 패킷 캡처 분석 도구
tcpdump 명령은 지정된 네트워크 인터페이스를 통과하는 패킷 헤더를 나열할 수 있으며 네트워크를 통해 전송될 수 있습니다 데이터 패킷의 "헤더"를 완전히 가로채서 분석합니다. 네트워크 계층, 프로토콜, 호스트, 네트워크 또는 포트에 대한 필터링을 지원하고 유용한 정보를 추출하는 데 도움이 되는 and, or, not와 같은 논리문을 제공합니다.
네트워크 인터페이스를 무차별 모드로 설정해야 하기 때문에 일반 사용자는 정상적으로 실행할 수 없으나 루트 권한을 가진 사용자는 직접 실행하여 네트워크상의 정보를 얻을 수 있습니다
기타 패킷 캡처 도구
wireshark에는 tcpdump로 캡처한 패킷을 분석할 수 있는 그래픽 버전과 명령줄 버전이 모두 있습니다. 주요 기능은 데이터 패킷을 분석하는 것입니다.
ngrep은 캡처된 패킷 데이터를 텍스트 형식으로 직접 표시합니다. 이는 텍스트가 포함된 패킷 데이터(예: HTTP, MySQL)의 [캡처] 분석에 적합합니다
tcpdump [옵션] [프로토콜] [데이터 흐름 방향] [범위]
-a 네트워크 주소와 브로드캐스트 주소를 이름으로 변환
-A 모든 패킷을 ASCII 형식으로 인쇄하고 헤더를 최소화합니다. 링크 계층
-b ip/arp/rarp/ipx를 포함하여 데이터 링크 계층에서 선택한 프로토콜은 모두 이 계층에 있습니다.
-c 데이터 패킷을 수신할 횟수를 지정합니다. 지정된 데이터 패킷 수에 도달한 후 Exit tcpdump를 수신합니다
-d는 일치하는 정보 패킷의 코드를 사람들이 이해할 수 있는 어셈블리 형식으로 출력합니다
-dd 일치하는 정보 패킷의 코드를 C 언어 프로그램 세그먼트 형식으로 출력
-ddd 일치하는 정보 패킷의 코드를 십진수 형식으로 출력
-D 가능한 모든 네트워크를 인쇄합니다. 시스템 인터페이스에서 모니터링됨
-e는 데이터 링크 레이어의 헤더 정보를 출력 라인에 인쇄합니다.
-f는 외부 인터넷 주소를 숫자 형식으로 인쇄합니다. 즉, 호스트를 표시하지 않습니다. name
-F from 지정된 파일에서 표현식을 읽고 다른 표현식은 무시합니다
-i 수신 네트워크 인터페이스 지정
-l 표준 출력을 버퍼링된 형식으로 만들고 데이터를 파일로 내보냅니다.
-L 열 네트워크 인터페이스의 알려진 데이터 링크를 출력합니다.
-n 네트워크 주소를 이름으로 변환하지 않습니다.
-N 호스트 이름의 도메인 이름 부분을 출력하지 않습니다. 예 www.baidu.com은 www
만 출력합니다. -nn은 포트 이름을 변환하지 않습니다.
-P는 네트워크 인터페이스를 무차별 모드로 설정하지 않습니다.
-q 빠른 출력, 즉 출력이 적습니다. 프로토콜 정보
-r 지정된 파일에서 데이터 읽기, 일반적으로 -w 저장된 파일
-w 캡처된 정보를 화면에 분석하고 인쇄하지 않고 파일에 저장
-s 각각에서 읽기 기본 68바이트 대신 snaplen 바이트 시작 부분에 그룹화
-S 상대 값이 아닌 절대 값으로 tcp 시퀀스 번호를 출력
-T 모니터링된 패킷을 지정된 유형의 메시지로 직접 구문 분석합니다. 유형에는 rpc(원격 프로시저 호출) 및 snmp(간단한 네트워크 관리 프로토콜)가 포함됩니다.
-t는 출력의 각 줄에 타임스탬프를 인쇄하지 않습니다.
-tt는 형식이 지정되지 않은 타임스탬프를 출력합니다.
-ttt 출력 이 라인과 이전 라인의 시간 차이
-tttt 각 라인의 데이터 처리 기본 형식으로 타임스탬프를 출력합니다.
-u 디코딩되지 않은 NFS 핸들을 출력
-v는 약간 더 자세한 정보를 출력합니다. , 예를 들어 ip 패키지에는 ttl 및 서비스 유형 정보가 포함될 수 있습니다
-vv 신뢰할 수 있는 메시지 정보를 출력합니다.
데이터 유형에 대한 키워드
host, port, net 포함:
host 192.168.100.1은 호스트, net 192.168.100을 나타냅니다. .0은 네트워크 세그먼트, 포트 80은 포트 번호가 80임을 나타냅니다. 여기서 데이터 유형이 지정되지 않은 경우 기본값은 호스트
牛逼啊!接私活必备的 N 个开源项目!赶快收藏
데이터 전송 방향에 대한 키워드
포함 src, dst, dst 또는 src, dst 및 src, 이러한 키워드는 전송 방향을 나타냅니다. 예를 들어 src 192.168.100.1은 데이터 패킷의 소스 주소가 192.168.100.1임을 나타냅니다. dst net 192.168.100.0은 대상 네트워크 주소가 192.168.100.0임을 나타냅니다. 기본값은 호스트에 대한 src 및 dst를 모니터링하는 것입니다. 즉, 기본값은 로컬 및 대상 호스트의 모든 데이터를 모니터링하는 것입니다
프로토콜 키워드
ip 및 arp,rarp,udp를 포함
其他关键字
运算类型:or、and、not、!
辅助功能型:gateway、less、broadcast、greater
tcpdump [协议类型] [源或目标] [主机名称或 IP] [or/and/not/! 条件组合] [源或目标] [主机名或 IP] [or/and/not/! 条件组合] [端口] [端口号] …… [or/and/not/! 条件组合] [条件]
> tcpdump ip dst 192.168.10.1 and src 192.168.10.10 and port 80 and host !www.baidu.com
tcpdump
默认监听在第一块网卡,监听所有经过此网卡的数据包
> tcpdump -i ens33
监听指定网卡 ens33 的所有传输数据包
> tcpdump -i ens33 host 192.168.100.10
捕获主机 192.168.100.10 经过网卡 ens33 的所有数据包(也可以是主机名,但要求可以解析出 IP 地址)
第一列:报文的时间
第二列:网络协议 IP
第三列:发送方的 ip 地址、端口号、域名,上图显示的是本机的域名,可通过 / etc/hosts 查看本机域名
第四列:箭头 >, 表示数据流向
第五列:接收方的 ip 地址、端口号、域名,
第六列:冒号
第七列:数据包内容,报文头的摘要信息,有 ttl、报文类型、标识值、序列、包的大小等信息
> tcpdump host 192.168.130.151 and 192.168.130.152or192.168.130.153192.168.130.152or192.168.130.153
捕获主机 192.168.56.209 和主机 192.168.56.210 或 192.168.56.211 的所有通信数据包
> tcpdump ip host node9 and not www.baidu.com
捕获主机 node9 与其他主机之间(不包括 www.baidu.com)通信的 ip 数据包
> tcpdump ip host node9 and ! www.baidu.com
捕获 node9 与其他所有主机的通信数据包(不包括 www.baidu.com)
> tcpdump -i ens33 src node10
捕获源主机 node10 发送的所有的经过 ens33 网卡的所有数据包
> tcpdump -i ens33 dst host www.baidu.com
捕获所有发送到主机 www.baidu.com 的数据包
监听主机 192.168.56.1 和 192.168.56.210 之间 ip 协议的 80 端口的且排除 www.baidu.com 通信的所有数据包:
> tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host ! baidu.com
也可以写成 tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host not www.baidu.com,即 not 和!都是相同的取反的意思
> tcpdump arp
监控指定主机的通信数据包与 1.9.1 方式相同
> tcpdump tcp port 22 and host 192.168.56.210
捕获主机 192.168.56.210 接收和发出的 tcp 协议的 ssh 的数据包
tcpdump udp port 53
监听本机 udp 的 53 端口的数据包,udp 是 dns 协议的端口,这也是一个 dns 域名解析的完整过程
tcpdump 可以支持逻辑运算符
and: 与运算,所有的条件都需要满足,可用 “and”和 “&&” 表示
or:或运行,只要有一个条件满足就可以,可用 “or” 和“|”表示
not:取反,即取反条件,可以用 “not” 和“!”表示
> tcpdump icmp and src 192.168.100.10 -i ens33 -n
过滤 icmp 报文并且源 IP 是 192.168.100.10
多条件格式
在使用多个过滤条件进行组合时,有可能需要用到括号,而括号在 shell 中是特殊符号,又需要使用引号将其包含。用括号的主要作用是逻辑运算符之间存在优先级,!>and > or, 为例条件能够精确所以需要对一些必要的组合括号括起来,而括号的意思相当于加减运算一样,括起来的内容作为一个整体进行逻辑运算。
过滤源地址是 192.168.100.1 并且目的地址是 192.168.20.20 的数据包或者 ARP 协议的包。另外,搜索公众号Linux就该这样学后台回复“Linux”,获取一份惊喜礼包。
> tcpdump **src** host 192.168.10.10 -i ens33 -n -c 5
过滤源 IP 地址是 192.168.10.10 的包
> tcpdump **dst** host 192.168.10.10 -i ens33 -n -c 5
过滤目的 IP 地址是 192.168.10.10 的包
基于端口进行过滤
> tcpdump port 22 -i ens33 -n -c 5 > 过滤端口号为 22 即 ssh 协议的
> tcpdump portrange 22-433 -i ens33 -n -c 8
过滤端口号 22-433 内的数据包
Wireshark 是一个网络封包分析软件。网络封包分析软件的功能是捕获网络数据包,并尽可能显示出最为详细的网络封包资料。Wireshark 使用 WinPCAP 作为接口,直接与网卡进行数据报文交换
Linux 中有两个版本的 wireshark,一个是 wireshark,这个版本是无图形化界面,基本命令是”tshark“。
一个是 wireshark-gnome(界面版本),这个版本只能安装在支持 GUI 功能的 Linux 的版本中。
> yum -y install wireshark // 安装无图形化版本 > yum -y install wireshark-gnome // 安装图形化版本
注:这里的通过 yum 进行安装,需要提前做好 epel 源(即红帽操作系统额外拓展包),装上了 EPEL 之后,就相当于添加了一个第三方源。官方的 rpm repository 提供的 rpm 包也不够丰富,很多时候需要自己编译那太辛苦了,而 EPEL 可以解决官方 yum 源数据包不够丰富的情况。
安装epel源
> yum -y install epel-release
tshark 是 wireshark 的命令行工具 tshark 选项 参数 -i:指定捕获的网卡接口,不设置默认第一个非环回口接口 -D:显示所有可用的网络接口列表 -f:指定条件表达式,与 tcpdump 相同 -s:设置每个抓包的大小,默认 65535,多于这个大小的数据将不会不会被截取。 -c:捕获指定数量的数据包后退出 -w:后接文件名,将抓包的结果输出到. pcap 文件中,可以借助其他网络分析工具进行分 析,也可以使用重定向 > 把解码后的输出结果以 txt 的格式输出。 -p:设置网络接口以非混合模式工作,即只关心和本机有关的流量 -r:后接文件路径,用于分析保持好的网络包文件,比如 tcpdump 的输出文件 -n:禁止所有地址名字解析,即禁止域名解析, 默认是允许所有 -N:指定对某一层的地址名字解析,如果 - n 和 - N 同时存在,则 - n 将被忽略,如果两者都不写,则会默认打开所有地址名字解析 m:代表数据链路层 n:代表网络层 t:代表传输层 -V:设置将解码结果的细节输出,否则解码结果仅显示一个 packet 一行的 summary -t:设置结果的时间格式 ad:表示带日期的绝对时间 a:表示不带日期的绝对时间 r:表示从第一个包到现在的相对时间 d:表示两个相邻包之间的增量时间
tshark -f "icmp" -i ens33 -V -c 1
过滤 icmp 报文,并展开详细信息。另外,搜索公众号编程技术圈后台回复“1024”,获取一份惊喜礼包。
tshark -f "arp" -i ens33
过滤 arp 报文
입니다.
가상 머신에서 Wireshark를 통해 읽기
ip.addr == [ip 주소 번호]를 사용하여 관련 없는 IP를 필터링하세요
그래픽 읽기
wireshark를 직접 사용 보기
tcpdump와 Wireshark는 패킷 캡처 기능 측면에서 유사합니다. 둘의 명령줄 옵션도 동일하지만, 동시에 tcpdump는 현재 많은 Linux 시스템에서 패킷 분석에 그다지 능숙하지 않습니다. tcpdump가 내장되어 있으므로 tcpdump를 통해 데이터 패킷을 캡처하여 사용자 정의 파일(.pcap)에 저장한 다음 파일을 추출하고 Wireshark를 사용하여 분석하고 문제를 해결할 수 있습니다
위 내용은 Linux 네트워크 패킷 캡처 분석 도구의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!