>  기사  >  운영 및 유지보수  >  패킷 캡처 도구 tcpdump 사용 지침

패킷 캡처 도구 tcpdump 사용 지침

巴扎黑
巴扎黑원래의
2017-06-23 11:13:002168검색

이 문서의 디렉토리:

1.1 tcpdump 옵션

1.2 tcpdump 표현식

1.3 tcpdump 예시


tcpdump는 명령줄을 사용합니다. 인터페이스 데이터 패킷을 필터링하고 캡처하며 풍부한 기능이 유연한 표현에 반영됩니다.

옵션이 없는 Tcpdump는 기본적으로 첫 번째 네트워크 인터페이스를 캡처하며, 패킷 캡처는 tcpdump 프로세스가 종료될 때만 중지됩니다.

예:

shell> tcpdump -nn -i eth0 icmp

다음은 자세한 tcpdump 사용법입니다.


1.1 tcpdump 옵션

명령 형식은 다음과 같습니다.

tcpdump [ -DenNqvX ] [ -c count ] [ -F  ] [ -i interface ] [ -r -s snaplen ] [ - 注意,是最终要获取这么多个包。例如,指定若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),
            :一旦找到第一个符合条件的接口,搜寻马上结束。可以使用-n:对地址以数字方式显式,否则显式为主机名,也就是说--N:不打印出host的域名部分。例如tcpdump将会打印而不是-P:指定要抓取的包是流入还是流出的包。可以给定的值为、和,默认为-s len:设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,
      :输出行中会出现-----vv:产生比---:将抓包数据输出到文件中而不是标准输出。可以同时配合选项使得输出文件每time秒就自动切换到另一个文件。可通过-r:从给定的数据包文件中读取数据。使用表示从标准输入中读取。

일반적인 옵션은 다음과 같습니다.

  • tcpdump -D

  • tcp dump - c 번호 -i int -nn -XX -vvv


1.2 tcpdump 표현식

표현식은 출력되는 데이터 패킷 유형을 필터링하는 데 사용됩니다. 표현식이 제공되지 않으면 모든 데이터 패킷이 출력되고, 그렇지 않으면 출력만 해당 패키지가 됩니다. 표현은 사실이다. 표현식에 나타나는 쉘 메타문자 주위에는 작은따옴표를 사용하는 것이 좋습니다.

tcpdump의 표현은 하나 이상의 "단위"로 구성되며, 각 단위에는 일반적으로 ID 수정자와 ID(번호 또는 이름)가 포함됩니다. 세 가지 수식자가 있습니다:

(1).type: ID 유형을 지정합니다.

지정할 수 있는 값은 호스트/넷/포트/포트레인지입니다. 예를 들어 "host foo", "net 128.3", "port 20", "portrange 6000-6008"입니다. 기본 유형은 호스트입니다.

(2).dir: ID의 방향을 지정합니다.

지정할 수 있는 값에는 src/dst/src 또는 dst/src 및 dst가 포함되며, 기본값은 src 또는 dst입니다. 예를 들어, "src foo"는 소스 호스트가 foo인 패킷을 나타내고, "dst net 128.3"은 대상 네트워크가 128.3인 패킷을 나타내고, "src or dst port 22"는 소스 또는 대상 포트가 22인 패킷을 나타냅니다.

(3).proto: 지정된 프로토콜을 통해 일치하는 패킷 유형을 제한합니다.

일반적으로 사용되는 프로토콜에는 tcp/udp/arp/ip/ether/icmp 등이 있습니다. 프로토콜 유형이 제공되지 않으면 가능한 모든 유형이 일치됩니다. 예를 들어 "tcp 포트 21", "udp 포트 범위 7000-7009"입니다.

그래서 기본 표현 단위 형식은 "proto dir 유형 ID"입니다

수식자와 ID로 구성된 표현 단위 외에도 게이트웨이, 브로드캐스트, Less, Greater 및 산술 표현식과 같은 키워드 표현 단위도 있습니다.

표현 단위는 "and / && / 또는 / || / not / !" 연산자를 사용하여 연결하여 복잡한 조건식을 형성할 수 있습니다. 예를 들어, "host foo이고 포트 ftp가 아니고 포트 ftp-data가 아닙니다"는 필터링된 데이터 패킷이 "호스트는 foo이고 포트는 ftp(포트 21) 및 ftp-data가 아닙니다(")의 요구 사항을 충족해야 함을 의미합니다. 포트 20)", 일반적으로 사용되는 포트 이름과의 대응 관계는 Linux 시스템의 /etc/service 파일에서 찾을 수 있습니다.

또한 동일한 수식어는 생략할 수 있습니다. 예를 들어 "tcp dst port ftp 또는 ftp-data 또는 domain"과 "tcp dst port ftp 또는 tcp dst port ftp-data 또는 tcp dst port domain"은 동일한 의미를 가지며, 둘 다 패키지를 나타냅니다. 프로토콜은 tcp이고 대상 포트는 ftp, ftp-data 또는 도메인(포트 53)입니다.

대괄호 "()"를 사용하면 표현식의 우선순위가 변경될 수 있지만 대괄호는 셸에서 해석되므로 백슬래시 ""를 사용하여 "()"로 이스케이프해야 하며 필요한 경우 따옴표로 묶어야 합니다.


1.3 tcpdump 예

(1). 기본적으로 시작됨

tcpdump

기본적으로 tcpdump를 직접 시작하면 첫 번째 네트워크 인터페이스(비-lo 포트)에서 순환하는 모든 데이터 패킷을 모니터링합니다. 이런 방식으로 많은 결과가 캡처되며 스크롤 속도가 매우 빨라집니다.

(2). 지정된 네트워크 인터페이스의 데이터 패킷을 모니터링합니다

tcpdump -i eth1

네트워크 카드가 지정되지 않은 경우 기본적으로 tcpdump는 eth0과 같은 첫 번째 네트워크 인터페이스만 모니터링합니다.

(3) longshuai

tcpdump host longshuai

(4)에 들어오거나 나가는 모든 데이터 패킷과 같은 지정된 호스트의 데이터 패킷을 모니터링합니다.(4). ->ace

tcpdump host helios and \( hot or ace \)

(5) ace와 다른 호스트 간에 통신된 IP 패킷을 인쇄하지만 helios

tcpdump ip host ace and not helios
를 사용한 데이터 패킷은 포함하지 않습니다.

(6).截获主机hostname发送的所有数据

tcpdump src host hostname

(7).监视所有发送到主机hostname的数据包

tcpdump dst host hostname

(8).监视指定主机和端口的数据包

tcpdump tcp port 22 and host hostname

(9).对本机的udp 123端口进行监视(123为ntp的服务端口)

tcpdump udp port 123

(10).监视指定网络的数据包,如本机与192.168网段通信的数据包,"-c 10"表示只抓取10个包

tcpdump -c 10 net 192.168

(11).打印所有通过网关snup的ftp数据包(注意,表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析)

shell> tcpdump 'gateway snup and (port ftp or ftp-data)'

(12).抓取ping包

[root@server2 ~]# tcpdump -c 5 -nn -i eth0 icmp 

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes12:11:23.273638 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16422, seq 10, length 6412:11:23.273666 IP 192.168.100.62 > 192.168.100.70: ICMP echo reply, id 16422, seq 10, length 6412:11:24.356915 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16422, seq 11, length 6412:11:24.356936 IP 192.168.100.62 > 192.168.100.70: ICMP echo reply, id 16422, seq 11, length 6412:11:25.440887 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16422, seq 12, length 645 packets captured6 packets received by filter0 packets dropped by kernel

如果明确要抓取主机为192.168.100.70对本机的ping,则使用and操作符。

[root@server2 ~]# tcpdump -c 5 -nn -i eth0 icmp and src 192.168.100.62tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes12:09:29.957132 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 1, length 6412:09:31.041035 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 2, length 6412:09:32.124562 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 3, length 6412:09:33.208514 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 4, length 6412:09:34.292222 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 5, length 645 packets captured5 packets received by filter0 packets dropped by kernel

注意不能直接写icmp src 192.168.100.70,因为icmp协议不支持直接应用host这个type。

(13).抓取到本机22端口包

[root@server2 ~]# tcpdump -c 10 -nn -i eth0 tcp dst port 22  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes12:06:57.574293 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 535528834, win 2053, length 012:06:57.629125 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 193, win 2052, length 012:06:57.684688 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 385, win 2051, length 012:06:57.738977 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 577, win 2050, length 012:06:57.794305 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 769, win 2050, length 012:06:57.848720 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 961, win 2049, length 012:06:57.904057 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1153, win 2048, length 012:06:57.958477 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1345, win 2047, length 012:06:58.014338 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1537, win 2053, length 012:06:58.069361 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1729, win 2052, length 010 packets captured10 packets received by filter0 packets dropped by kernel

(14).解析包数据

[root@server2 ~]# tcpdump -c 2 -q -XX -vvv -nn -i eth0 tcp dst port 22tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes12:15:54.788812 IP (tos 0x0, ttl 64, id 19303, offset 0, flags [DF], proto TCP (6), length 40)192.168.100.1.5788 > 192.168.100.62.22: tcp 00x0000:  000c 2908 9234 0050 56c0 0008 0800 4500  ..)..4.PV.....E.0x0010:  0028 4b67 4000 4006 a5d8 c0a8 6401 c0a8  .(Kg@.@.....d...0x0020:  643e 169c 0016 2426 5fd6 1fec 2b62 5010  d>....$&_...+bP.0x0030:  0803 7844 0000 0000 0000 0000            ..xD........12:15:54.842641 IP (tos 0x0, ttl 64, id 19304, offset 0, flags [DF], proto TCP (6), length 40)192.168.100.1.5788 > 192.168.100.62.22: tcp 00x0000:  000c 2908 9234 0050 56c0 0008 0800 4500  ..)..4.PV.....E.0x0010:  0028 4b68 4000 4006 a5d7 c0a8 6401 c0a8  .(Kh@.@.....d...0x0020:  643e 169c 0016 2426 5fd6 1fec 2d62 5010  d>....$&_...-bP.0x0030:  0801 7646 0000 0000 0000 0000            ..vF........2 packets captured2 packets received by filter0 packets dropped by kernel

总的来说,tcpdump对基本的数据包抓取方法还是较简单的。只要掌握有限的几个选项(-nn -XX -vvv -i -c -q),再组合表达式即可。

 

姊妹篇:网络扫描工具nmap

 

回到系列文章大纲:

转载请注明出处:

위 내용은 패킷 캡처 도구 tcpdump 사용 지침의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.