Tcpdump는 네트워크 어댑터를 통과하는 TCP / IP 패킷을 수집하는 다양한 Linux 운영 체제 (OS)에서 사용되는 명령입니다. 패킷 스니퍼 도구와 마찬가지로 tcpdump는 네트워크 트래픽을 분석 할뿐만 아니라 파일에 저장합니다.
기본적으로 운영 체제에서 제공하는 일부 명령과 달리 tcpdump가 설치되어 있지 않으므로 tcpdump를 사용할 수 없습니다. tcpdump를 설치하려면 다음을 실행하십시오. apt-get install tcpdump 또는 yum install tcpdumpOS에 따라 다릅니다.
Tcpdump 작동 방식
Tcpdump는 부울과 일치하는 네트워크 인터페이스에서 패킷의 헤더를 출력합니다. 표현 . 또한-w 플래그는 나중에 분석을 위해 패킷 데이터를 파일에 저장하게하고 / 또는-아르 자형 플래그를 사용하면 네트워크 인터페이스에서 패킷을 읽는 대신 저장된 패킷 파일에서 읽을 수 있습니다. 모든 경우에 일치하는 패킷 만 표현 에 의해 처리됩니다. tcpdump .
Tcpdump 실행되지 않을 경우-기음 플래그는 SIGINT 신호에 의해 인터럽트 될 때까지 패킷 캡처를 계속합니다 (예를 들어, 인터럽트 문자를 입력하거나 Ctrl + C) 또는 SIGTERM 신호 (일반적으로죽이다(1) 명령); 만약에-기음 플래그를 사용하면 SIGINT 또는 SIGTERM 신호에 의해 인터럽트되거나 지정된 수의 패킷이 처리 될 때까지 패킷을 캡처합니다.
위에서 언급 한 스위치에 대해서는이 기사 뒷부분에서 자세히 설명합니다.
언제 tcpdump 패킷 캡처를 마치면 다음의 수를보고합니다.
- 패킷 "필터를 받았습니다."
- 이 의미는 실행중인 OS에 따라 다릅니다. tcpdump OS가 구성된 방식 일 수 있습니다. 필터가 명령 줄에 지정된 경우 일부 OS에서는 필터 식과 일치하는지 여부에 관계없이 패킷을 계산하고 다른 식에서 필터 식과 일치하고 처리 된 패킷 만 계산합니다 tcpdump.
- 패킷은 "커널에 의해 삭제되었습니다."
- 이것은 버퍼 공간 부족으로 인해 삭제 된 패킷 수이며, OS의 패킷 캡처 메커니즘에 의해 tcpdump OS가 해당 정보를 응용 프로그램에보고하는 경우 실행 중입니다. 그렇지 않은 경우 0으로보고됩니다.
대부분의 BSD (Berkeley Software Distributions)와 같은 SIGINFO 신호를 지원하는 플랫폼에서 SIGINFO 신호를 받으면 그 수를보고합니다 (예 : "status"문자를 입력하여 생성됨, 일반적으로 Ctrl + T) 패킷을 계속 캡쳐합니다.
Tcpdump 호환성
tcpdump 명령으로 네트워크 인터페이스에서 패킷을 읽으려면 특별한 권한이 필요합니다 ( 독서 저장된 패킷 파일에는 이러한 권한이 필요하지 않습니다.
- NIT 또는 BPF가있는 SunOS 3.x 또는 4.x:에 대한 읽기 권한이 있어야합니다. / dev / nit 또는 dev / bpf * .
- DLPI가있는 Solaris: 네트워크 의사 장치에 대한 읽기 / 쓰기 권한이 있어야합니다. / dev / le . 그러나 Solaris의 일부 버전에서 이것은 허용하기에 충분하지 않습니다. tcpdump 무차별 모드로 캡처하기. Solaris의 해당 버전에서는 root이거나 tcpdump 무차별 모드로 캡처하려면 root로 setuid를 설치해야합니다. 많은 (아마 모든) 인터페이스에서 무차별 모드로 캡처하지 않으면 나가는 패킷이 표시되지 않으므로 무차별 모드로 캡처하지 않으면 매우 유용하지 않을 수 있습니다.
- DLPI가있는 HP-UX: 당신은 루트이거나 tcpdump root로 setuid를 설치해야합니다.
- 스눕 (snoop)이있는 IRIX: 당신은 루트이거나 tcpdump root로 setuid를 설치해야합니다.
- 리눅스: 당신은 루트이거나 tcpdump root로 setuid를 설치해야합니다.
- Ultrix 및 Digital UNIX / Tru64 UNIX: 모든 사용자가 네트워크 트래픽을 캡처 할 수 있습니다. tcpdump . 그러나 수퍼 유저가 해당 인터페이스에서 무차별 모드 작업을 사용 가능하게하지 않는 한 사용자는 (심지어 수퍼 유저조차도) 무차별 모드로 인터페이스에서 캡처 할 수 없습니다. pfconfig 수퍼 유저가 해당 인터페이스에서 copy-all-mode 작업을 사용 가능하게 설정하지 않은 경우 인터페이스에서 시스템이 수신하거나 사용자가 전송 한 유니 캐스트 트래픽을 캡처 할 수있는 사용자는 없습니다 (수퍼 유저조차도 아님) pfconfig , 그래서 유능한 인터페이스에서의 패킷 캡처는 무차별 모드 또는 전체 복사 모드 조작 또는 두 가지 조작 모드가 모두 해당 인터페이스에서 사용 가능해야합니다.
- BSD:에 대한 읽기 권한이 있어야합니다. / dev / bpf * .
Tcpdump 명령 구문
모든 컴퓨터 명령과 마찬가지로 tcpdump 명령은 구문이 올바른 경우에만 제대로 작동합니다.
tcpdump -adeflnNOpqRStuvxX -기음 카운트
-기음 file_size -에프 파일
-나는 인터페이스 -엠 기준 치수 -아르 자형 파일
-에스 스냅 풀 -티 유형 -유 사용자 -w 파일
-이자형 알 고 : 비밀 표현
Tcpdump 명령 옵션
다음은 tcpdump 명령과 함께 사용할 수있는 모든 옵션입니다.
- -에이: 네트워크 및 브로드 캐스트 주소를 이름으로 변환하려고 시도합니다.
- -기음: 수신 후 종료 카운트 패킷.
- -기음: 원시 패킷을 저장 파일에 기록하기 전에 파일이 현재 file_size 그렇다면 현재 저장 파일을 닫고 새 저장 파일을 엽니 다.첫 번째 savefile 이후의 Savefile은-w 2 번부터 시작하여 상향으로 계속 진행합니다. 단위는 file_size 수백만 바이트 (1,000,000 바이트, 1,048,576 바이트가 아님)입니다.
- -디: 컴파일 된 패킷 일치 코드를 사람이 읽을 수있는 형식으로 표준 출력으로 덤프하고 중지합니다.
- -dd: 패킷 일치 코드를기음 프로그램 조각.
- -ddd: 패킷 매칭 코드를 10 진수 (덤프)로 덤프합니다.
- -이자형: 각 덤프 행에 링크 레벨 헤더를 인쇄하십시오.
- -이자형: 사용 알 고 : 비밀 IPsec ESP 패킷의 암호를 해독합니다. 알고리즘 수 있습니다.des-cbc, 3des-cbc, 복어 - cbc, rc3-cbc, cast128-cbc, 또는없음. 기본값은des-cbc. 패킷을 해독하는 기능은 다음 경우에만 존재합니다. tcpdump 암호화가 가능하도록 컴파일되었습니다. 비밀 ESP 비밀 키의 ASCII 텍스트 현재로서는 임의의 2 진 값을 취할 수 없습니다. 이 옵션은 RFC2406 ESP가 아니라 RFC1827 ESP를 가정합니다. 이 옵션은 디버깅 목적으로 만 사용되며 진정한 '비밀'키와 함께이 옵션을 사용하는 것은 권장하지 않습니다. 명령 줄에 IPsec 비밀 키를 표시하면 다른 사람이 볼 수있게됩니다. 추신 (1) 및 다른 경우.
- -에프: 상징적 인 것보다 수치 적으로 '외국의'인터넷 주소를 인쇄하십시오 (이 옵션은 Sun의 yp 서버에서 심각한 뇌 손상을 피하기위한 것입니다 - 일반적으로 로컬이 아닌 인터넷 번호를 번역 할 때마다 중단됩니다).
- -에프: 사용 파일 필터 표현식의 입력으로 사용합니다. 명령 행에 주어진 추가 표현식은 무시됩니다.
- -나는: 들어라. 인터페이스 . 지정되지 않은 경우, tcpdump 가장 낮은 번호의 구성 인터페이스 (루프백 제외)를 시스템 인터페이스 목록에서 검색합니다. 가장 빠른 시합을 선택하면 연결 고리가 끊어집니다. 2.2 또는 그 이후 커널을 가진 리눅스 시스템에서, 인터페이스 "any"의 인수는 모든 인터페이스의 패킷을 캡쳐하는 데 사용할 수 있습니다. "any"장치의 캡처는 무차별 모드로 수행되지 않습니다.
- -엘: stdout 행을 버퍼링합니다. 캡처하는 동안 데이터를보고 싶을 때 유용합니다. 예를 들어, "tcpdump -l | tee dat"또는 "tcpdump -l> dat & tail -f dat".
- -엠: 파일에서 SMI MIB 모듈 정의로드 기준 치수 . 이 옵션은 여러 MIB 모듈을로드하기 위해 여러 번 사용할 수 있습니다. tcpdump .
- -엔: 호스트 주소를 이름으로 변환하지 마십시오. 이것은 DNS 조회를 피하기 위해 사용될 수 있습니다.
- -nn: 프로토콜과 포트 번호 등을 이름으로 변환하지 마십시오.
- -엔: 호스트 이름의 도메인 이름 규정을 인쇄하지 마십시오. 예를 들어,이 플래그를 지정하면 tcpdump "nic.ddn.mil"대신 "nic"을 인쇄합니다.
- -영형: 패킷 일치 코드 최적화 프로그램을 실행하지 마십시오. 이는 최적화 프로그램에서 버그가 의심 될 때만 유용합니다.
- -피: 하지마. 인터페이스를 무차별 모드로 전환하십시오. 다른 이유로 인터페이스가 무차별 모드 일 수 있습니다. 따라서 '-p'는 'ether host {local-hw-addr} 또는 ether broadcast'의 약어로 사용할 수 없습니다.
- -큐: 빠른 (조용한) 출력. 더 적은 프로토콜 정보를 출력하여 출력 라인이 짧아집니다.
- -아르 자형: ESP / AH 패킷이 이전 사양 인 RFC1825에서 RFC1829를 기반으로한다고 가정합니다. 지정된 경우, tcpdump 재생 방지 필드를 인쇄하지 않습니다. ESP / AH 명세에는 프로토콜 버전 필드가 없기 때문에, tcpdump ESP / AH 프로토콜의 버전을 추론 할 수 없습니다.
- -아르 자형:에서 패킷을 읽습니다. 파일 (-w 옵션으로 작성). 표준 입력은 다음 경우에 사용됩니다. 파일 "-"입니다.
- -에스: 상대적이 아닌 TCP 시퀀스 번호를 절대적으로 인쇄합니다.
- -에스: 스노 프 스냅 풀 기본값 인 68 대신 각 패킷의 데이터 바이트 수; SunOS의 NIT에서 최소값은 실제로 96입니다. 68 바이트는 IP, ICMP, TCP 및 UDP에는 적합하지만 네임 서버 및 NFS 패킷 (아래 참조)에서 프로토콜 정보를 잘라낼 수 있습니다. 제한된 스냅 샷으로 인해 잘린 패킷은 출력에 "| 프로토 '', 어디서 프로토 절단이 발생한 프로토콜 수준의 이름입니다. 더 큰 스냅 샷을 사용하면 패킷을 처리하는 데 걸리는 시간이 늘어나고 효과적으로 패킷 버퍼링 양이 줄어 듭니다. 이로 인해 패킷이 손실 될 수 있습니다. 너는 제한해야한다. 스냅 풀 관심있는 프로토콜 정보를 캡처 할 수있는 최소 숫자로 설정하십시오. 스냅 풀 ~ 0은 전체 패킷을 포착하는 데 필요한 길이를 사용함을 의미합니다.
- -티: " 표현 "지정된대로 해석된다. 유형 . 현재 알려진 유형cnfp (Cisco NetFlow 프로토콜),rpc (원격 프로 시저 호출),RTF (Real-Time Applications 프로토콜),rtcp (실시간 응용 프로그램 제어 프로토콜),SNMP (단순 네트워크 관리 프로토콜),큰 통 (비주얼 오디오 도구),wb (분산 화이트 보드).
- -티: 하지마. 각 덤프 행에 시간 소인을 인쇄하십시오.
- -tt: 각 덤프 행에 형식화되지 않은 시간 소인을 인쇄합니다.
- -유: 루트 권한을 삭제하고 사용자 ID를 다음으로 변경합니다. 사용자 및 그룹 ID를 사용자 .
- 노트: Red Hat Linux는 다른 것이 지정되지 않으면 자동으로 사용자 "pcap"에게 권한을 삭제합니다.
- -ttt: 각 덤프 행의 현재 행과 이전 행 사이에 델타 (마이크로 초)를 인쇄합니다.
- -tttt: 각 덤프 행의 날짜별로 진행되는 기본 형식으로 시간 소인을 인쇄합니다.
- -유: 암호화되지 않은 NFS 핸들을 인쇄합니다.
- -V: (약간 더) 자세한 출력. 예를 들어 IP 패킷의 수명, 식별, 총 길이 및 옵션이 인쇄됩니다. 또한 IP 및 ICMP 헤더 체크섬 확인과 같은 추가 패킷 무결성 검사를 가능하게합니다.
- -vv더 자세한 출력. 예를 들어 추가 필드는 NFS 응답 패킷에서 인쇄되고 SMB 패킷은 완전히 디코딩됩니다.
- -vvv더 자세한 출력. 예 : telnetSB … SE 옵션이 모두 인쇄됩니다. 와 -엑스 텔넷 옵션은 16 진수로 인쇄됩니다.
- -w:에 원시 패킷을 쓰십시오 파일 그 (것)들을 분석하고 인쇄하기보다는 오히려. 나중에 -r 옵션을 사용하여 인쇄 할 수 있습니다. 표준 출력은 다음 경우에 사용됩니다. 파일 "-"입니다.
- -엑스: 각 패킷 (링크 레벨 헤더 빼기)을 16 진수로 인쇄하십시오. 전체 패킷 또는 스냅 풀 바이트가 인쇄됩니다. 이것은 전체 링크 계층 패킷이므로, 패드 (예를 들어, 이더넷)의 링크 계층에 대해, 상위 계층 패킷이 요구 된 패딩보다 짧을 때 패딩 바이트가 또한 인쇄 될 것이다.
- -엑스: 16 진수를 인쇄 할 때 ascii도 인쇄하십시오. 따라서 if-엑스 패킷이 16 진수 / 아스키로 인쇄됩니다. 이는 새로운 프로토콜을 분석 할 때 매우 편리합니다. 설사-엑스 또한 설정되지 않은 경우 일부 패킷의 일부가 16 진수 / 8 진수로 인쇄 될 수 있습니다.
- 표현 : 덤프 할 패킷을 선택합니다. 없는 경우 표현 이 주어지면, 네트상의 모든 패킷들이 덤프 될 것입니다. 그렇지 않으면, 표현 '사실'이라고 표시됩니다. 그만큼 표현 하나 이상의 프리미티브. 프리미티브는 일반적으로 신분증 (이름 또는 번호) 앞에 하나 이상의 한정자가 있어야합니다. 한정자에는 세 가지 종류가 있습니다.
- 유형 : 한정자는 ID 이름이나 숫자가 어떤 종류의 것을 지칭하는지 말합니다. 가능한 유형은 다음과 같습니다.숙주, 그물, 및포트예를 들어, 'host foo', 'net 128.3', 'port 20'. 형식 한정자가없는 경우,숙주 가정합니다.
- 지시 : 한정어는 특정 전송 방향을 지정하거나 지정합니다 신분증 . 가능한 길 찾기src, DST, src 또는 dst 과src 및 DST (예 : 'src foo', 'dst net 128.3', 'src 또는 dst port ftp-data'). dir 한정자가 없으면,src 또는 dst 가정합니다. '널 (null)'링크 계층 (즉, 슬립과 같은 점대 점 프로토콜)의 경우 인바운드 과 배 밖으로 한정어를 사용하여 원하는 방향을 지정할 수 있습니다.
- 프로토 : 한정어는 일치를 특정 프로토콜로 제한합니다. 가능한 프로토 타입은 다음과 같습니다. 에테르, fddi, tr, ip, ip6, arp, 격렬한, 데넷, tcp, 및udp예를 들어, 'ether src foo', 'arp net 128.3', 'tcp port 21'. 프로토콜 한정자가 없으면 유형과 일치하는 모든 프로토콜이 사용됩니다. 'net bar'는 '(ip or arp or rarp) net bar'와 'port 53'을 의미하며, 'src foo'는 '(ip or arp or rarp) src foo' '(TCP 또는 UDP) 포트 53'을 의미합니다.
- 'fddi'는 실제로 'ether'의 별칭입니다. 파서는 "지정된 네트워크 인터페이스에서 사용되는 데이터 링크 레벨"을 의미하는 것으로 간주합니다. FDDI 헤더는 이더넷과 같은 소스 및 대상 주소를 포함하며 이더넷과 유사한 패킷 유형을 포함하기 때문에 이러한 FDDI 필드 만 필터링 할 수 있습니다 비슷한 이더넷 필드와 마찬가지로 FDDI 헤더에는 다른 필드가 포함되어 있지만 필터 표현식에 명시 적으로 이름을 지정할 수는 없습니다.
- 마찬가지로 'tr'은 'ether'의 별칭입니다. FDDI 헤더에 관한 이전 단락의 내용은 토큰 링 헤더에도 적용됩니다.
위의 내용 외에도 패턴을 따르지 않는 특수한 "기본"키워드가 있습니다.게이트웨이, 방송, 적게, 더 큰, 및 산수 표현. 이들 모두는 아래에 설명되어 있습니다.
더 복잡한 필터 표현은 단어를 사용하여 구축됩니다.과, 또는, 및아니 예를 들어, "호스트 foo가 아니라 포트 ftp가 아니라 포트 ftp-data"를 결합하는 것입니다. 타이핑을 줄이기 위해 동일한 한정자 목록을 생략 할 수 있습니다 (예 : "tcp dst port ftp 또는 ftp-data or domain"은 "tcp dst port ftp 또는 tcp dst port ftp-data 또는 tcp dst port domain"과 동일합니다).
다음은 tcpdump 명령에서 허용되는 기본 요소입니다.
- DST 호스트 숙주
- 패킷의 IPv4 / v6 대상 필드가 숙주 주소 또는 이름이 될 수 있습니다.
- src 호스트 숙주
- 패킷의 IPv4 / v6 소스 필드가 숙주 .
- 숙주 숙주
- 패킷의 IPv4 / v6 원본 또는 대상이 숙주 . 위의 호스트 표현식 중 임의의 키워드 앞에 키워드를 추가 할 수 있으며,ip, arp, 격렬한, 또는ip6,에서와 같이 ip 호스트 숙주 (이는 에테르 프로토 ip 호스트 숙주).
- 만약 숙주 여러 IP 주소가있는 이름 인 경우 각 주소가 일치하는지 확인됩니다.
- 에테르 dst 유령
- 이더넷 대상 주소가 true이면 참 유령 . 유령 / etc / ethers의 이름이거나 숫자 일 수 있습니다 ( 에테르 (3N) 숫자 형식).
- 에테르 src 유령
- 이더넷 소스 주소가 true이면 참 유령 .
- 에테르 호스트 유령
- 이더넷 소스 또는 대상 주소가 유령 .
- 게이트웨이 숙주
- 패킷이 사용 되었다면 참 숙주 게이트웨이로서 (즉, 이더넷 소스 또는 목적지 주소는 숙주 IP 소스도 IP 목적지도 숙주 ).
- 숙주 이름이어야하며 시스템의 호스트 이름 - IP 주소 해석 메커니즘 (호스트 이름 파일, DNS, NIS 등)과 시스템의 호스트 이름 - 이더넷 주소 해석 메커니즘 (/ etc / ethers 등).
- 동일한 표현식은 다음과 같습니다. 에테르 호스트 유령 지금은 호스트 숙주 , 이름 또는 숫자와 함께 사용할 수 있습니다. 호스트 / 호스트 이 구문은 현재 IPv6 사용 구성에서 작동하지 않습니다.
- DST 넷 그물
- 패킷의 IPv4 / v6 대상 주소에 네트워크 번호가 그물 . 그물 / etc / networks의 이름이거나 네트워크 번호 일 수 있습니다 ( 네트워크 (4) 자세한 내용은
- src net 그물
- 패킷의 IPv4 / v6 원본 주소에 네트워크 번호가 그물 .
- 그물 그물
- IPv4 / v6 원본 또는 패킷의 대상 주소에 네트워크 번호가 그물 .
- 그물 그물 마스크 넷 마스크
- IP 주소가 일치하면 참 그물 구체적으로 넷 마스크 . 자격을 얻을 수있다.src 또는DST. 이 구문은 IPv6에 유효하지 않습니다. 그물 .
- 그물 그물 / len
- IPv4 / v6 주소가 일치하면 True 그물 넷 마스크로 len 비트 너비. 자격을 얻을 수있다.src 또는DST.
- DST 포트 포트
- 패킷이 ip / tcp, ip / udp, ip6 / tcp 또는 ip6 / udp이고 대상 포트 값이 포트 . 그만큼 포트 / etc / services에 사용 된 번호 또는 이름이 될 수 있습니다 ( tcp (4P) 및 udp (4P)). 이름이 사용되면 포트 x 호와 프로토콜이 모두 점검됩니다. 번호 또는 애매한 이름이 사용 된 경우 포트 번호 만 확인됩니다 (예 :dst 포트 513 tcp / login 트래픽과 udp / who 트래픽을 모두 출력합니다.포트 도메인 tcp / domain 및 udp / domain 트래픽을 모두 인쇄합니다.
- src 포트 포트
- 패킷의 소스 포트 값이 포트 .
- 포트 포트
- 패킷의 소스 또는 대상 포트가 포트 . 위의 포트 표현식 중 임의의 키워드 앞에 키워드를 추가 할 수 있습니다.tcp 또는udp,에서와 같이 TCP src 포트 포트 , 이는 원본 포트가 TCP 패킷과 일치합니다. 포트 .
- 적게 길이
- 패킷의 길이가 이하인 경우 true 길이 . 이것은 len <= 길이 .
- 더 큰 길이
- 패킷의 길이가 다음보다 크거나 같으면 true입니다. 길이 . 이것은 len> = 길이 .
- ip proto 실험 계획안
- 패킷이 IP 패킷이면 true입니다 ( ip (4P)) 프로토콜 타입 실험 계획안 . 실험 계획안 번호 또는 이름 중 하나 일 수 있습니다. icmp , icmp6 , igmp , igrp , 핌 , 아 , 특히 , vrrp , udp , 또는 tcp . 식별자들 tcp , udp , 및 icmp 또한 키워드이기 때문에 C 쉘에서 인 백 슬래시 ()를 통해 이스케이프해야합니다. 이 프리미티브는 프로토콜 헤더 체인을 추적하지 않는다.
- ip6 proto 실험 계획안
- 패킷이 프로토콜 유형의 IPv6 패킷이면 true입니다. 실험 계획안 . 이 프리미티브는 프로토콜 헤더 체인을 추적하지 않는다.
- ip6 protochain 실험 계획안
- 패킷이 IPv6 패킷이고 형식이있는 프로토콜 헤더가 포함되어 있으면 True입니다. 실험 계획안 프로토콜 헤더 체인에 있습니다. 예를 들어, ipv6 protochain 6 모든 IPv6 패킷을 프로토콜 헤더 체인의 TCP 프로토콜 헤더와 일치시킵니다. 패킷은 IPv6 헤더와 TCP 헤더 사이에 인증 헤더, 라우팅 헤더 또는 hop-by-hop 옵션 헤더를 포함 할 수 있습니다. 이 프리미티브에 의해 생성 된 BPF 코드는 복잡하며, BPF 옵티 마이저 코드로 최적화 할 수 없습니다. tcpdump , 이것은 다소 느릴 수 있습니다.
- ip protochain 실험 계획안
- 동등한ip6 protochain 실험 계획안 ,하지만 이것은 IPv4를위한 것입니다.
- 에테르 방송
- 패킷이 이더넷 브로드 캐스트 패킷이면 true입니다. 그만큼 에테르 키워드는 선택 사항입니다.
- IP 방송
- 패킷이 IP 브로드 캐스트 패킷이면 true입니다. all-zeroes 및 all-ones 브로드 캐스트 규칙을 확인하고 로컬 서브넷 마스크를 조회합니다.
- 에테르 멀티 캐스트
- 패킷이 이더넷 멀티 캐스트 패킷이면 true입니다. 그만큼 에테르 키워드는 선택 사항입니다. 이것은 '에테르 0 & 1! = 0'.
- IP 멀티 캐스트
- 패킷이 IP 멀티 캐스트 패킷이면 true입니다.
- ip6 multicast
- 패킷이 IPv6 멀티 캐스트 패킷이면 true입니다.
- 에테르 프로토 실험 계획안
- 패킷이 ether 형의 경우는 true 실험 계획안 . 실험 계획안 번호 또는 이름 중 하나 일 수 있습니다. ip , ip6 , arp , 격렬한 , 대화 , 방울뱀 , 데넷 , 스카 , 위도 , mopdl , moprc , 이소 , stp , ipx , 또는 그물 . 이러한 식별자는 키워드이기도하므로 백 슬래시 ()를 통해 이스케이프해야합니다.
- FDDI의 경우 (예 : 'fddi 프로토콜 arp') 및 토큰 링 (예 :'tr 프로토콜 arp'), 대부분의 프로토콜에서 프로토콜 식별은 일반적으로 FDDI 또는 토큰 링 헤더 맨 위에 계층화 된 802.2 논리 링크 제어 (LLC) 헤더에서 제공됩니다.
- FDDI 또는 토큰 링에서 대부분의 프로토콜 식별자를 필터링 할 때, tcpdump 캡슐화 된 이더넷에 대해 조직 단위 식별자 (OUI)가 0x000000 인 소위 SNAP 형식의 LLC 헤더의 프로토콜 ID 필드 만 검사합니다. OUI가 0x000000 인 SNAP 형식인지 여부는 확인하지 않습니다.
- 예외는 다음과 같습니다. 이소 LLC 헤더의 DSAP (Destination Service Access Point) 필드와 SSAP (Source Service Access Point) 필드를 검사하고, stp 과 그물 LLC 헤더의 DSAP를 검사하고, 대화 OUI가 0x080007 인 SNAP 형식 패킷과 Appletalk etype을 확인합니다.
- 이더넷의 경우, tcpdump 대부분의 프로토콜에 대해 이더넷 유형 필드를 확인합니다. 예외는 이소 , 수액 , 및 그물 , 802.3 프레임을 검사 한 다음 FDDI 및 토큰 링과 마찬가지로 LLC 헤더를 확인합니다. 대화 여기서 이더넷 프레임의 Appletalk etype과 FDDI 및 토큰 링처럼 SNAP 형식 패킷을 확인합니다. 방울뱀 OUI가 0x000000 인 이더넷 프레임 또는 802.2 SNAP 프레임에서 Appletalk ARP etype을 확인합니다. 과 ipx 여기서 이더넷 프레임의 IPX etype, LLC 헤더의 IPX DSAP, IPX의 LLC 헤더 캡슐화가없는 802.3 및 SNAP 프레임의 IPX etype을 확인합니다.
- decnet src 숙주
- DECNET 소스 주소가 true이면 참 숙주 이 주소는 "10.123"형식의 주소이거나 DECNET 호스트 이름 일 수 있습니다. DECNET 호스트 이름 지원은 DECNET을 실행하도록 구성된 Ultrix 시스템에서만 사용할 수 있습니다.
- decnet dst 숙주
- DECNET 대상 주소가 true이면 참 숙주 .
- 데크 넷 호스트 숙주
- DECNET 소스 또는 대상 주소가 숙주 .
- ip, ip6, arp, 격렬한, 대화, 방울뱀, 데넷, 이소, stp, ipx, 그물
- 약어 에테르 프로토 피 어디에 피 위의 프로토콜 중 하나입니다.
- 위도, moprc, mopdl
- 약어 에테르 프로토 피 어디에 피 위의 프로토콜 중 하나입니다. 유의 사항 tcpdump 현재 이러한 프로토콜을 구문 분석하는 방법을 알지 못합니다.
- VLAN vlan_id
- 패킷이 IEEE 802.1Q VLAN 패킷이면 true입니다. 만약 vlan_id 패킷이 지정된 경우에만 참 vlan_id . 첫 번째VLAN 발생 키워드 표현 나머지 부분에 대한 디코딩 오프셋을 변경합니다. 표현 패킷이 VLAN 패킷이라고 가정합니다.
- tcp, udp, icmp
- 약어 ip proto 피 또는 ip6 proto 피 어디에 피 위의 프로토콜 중 하나입니다.
- 이소 프로토 실험 계획안
- 패킷이 프로토콜 유형의 OSI 패킷이면 true입니다. 실험 계획안 . 실험 계획안 번호 또는 이름 중 하나 일 수 있습니다. clnp , 에스 시스 , 또는 이시스 .
- clnp, 에스 시스, 이시스
- 약어 이소 프로토 피 어디에 피 위의 프로토콜 중 하나입니다. 유의 사항 tcpdump 이러한 프로토콜을 파싱하는 불완전한 작업을 수행합니다.
- expr relop expr
- 관계가 성립하는 경우는 true, 어디 재배치하다 >, <,> =, <=, =,! = 및> 중 하나입니다. expr 는 정수 상수 (표준 C 구문으로 표현됨), 일반 이진 연산자 +, -, *, /, &, |, 길이 연산자 및 특수 패킷 데이터 접근 자로 구성된 산술 표현식입니다. 패킷 내부의 데이터에 액세스하려면 다음 구문을 사용하십시오. proto expr : 크기 .
프로토 중 하나이다에테르, fddi, tr, PPP, 슬립, 링크, ip, arp, 격렬한, tcp, udp, icmp, 또는 ip6, 인덱스 연산을위한 프로토콜 계층을 지시한다 (에테르, fddi, tr, PPP, 슬립, 및링크 모두 링크 레이어를 참조). 유의 사항 tcp, udp 및 기타 상위 계층 프로토콜 유형은 IPv6이 아닌 IPv4에만 적용됩니다 (향후 수정 예정). 표시된 프로토콜 계층을 기준으로 한 바이트 오프셋은 다음과 같습니다. expr . 크기 선택적이며 관심 분야의 바이트 수를 나타냅니다. 1, 2 또는 4 일 수 있으며 기본값은 1입니다. 길이 연산자는 키워드로 표시됩니다.len, 패킷의 길이를 제공합니다.
예를 들어 '에테르 0 & 1! = 0'는 모든 멀티 캐스트 트래픽을 포착합니다. 표현식 'ip 0 & 0xf! = 5'옵션으로 모든 IP 패킷을 포착합니다. 표현식 'ip 6 : 2 & 0x1fff = 0'는 단편화되지 않은 데이터 그램과 단편화 된 데이터 그램의 단점을 포착합니다. 이 검사는 암시 적으로tcp 과udp 색인 작업. 예를 들어, tcp 0 항상 TCP의 첫 번째 바이트를 의미합니다. 머리글 , 절대로 개입하는 조각의 첫 번째 바이트를 의미하지는 않습니다.
일부 오프셋 및 필드 값은 숫자 값이 아닌 이름으로 표현 될 수 있습니다. 다음 프로토콜 헤더 필드 오프셋을 사용할 수 있습니다. icmptype (ICMP 유형 필드),icmpcode (ICMP 코드 필드),tcpflags (TCP 플래그 필드).
다음 ICMP 유형 필드 값을 사용할 수 있습니다.icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect, icmp-echo, icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply.
다음 TCP 플래그 필드 값을 사용할 수 있습니다.tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-push, tcp-ack, TCP-urg.
프리미티브는 다음 중 하나를 사용하여 결합 될 수 있습니다.
- 괄호로 묶은 프리미티브 및 연산자 그룹 (괄호는 쉘에만 적용되므로 이스케이프 처리해야 함)
- 부정 ( '!'또는'아니')
- 연결 ( '&&'또는'과')
- 교대 ( '||'또는'또는')
부정은 우선 순위가 가장 높습니다. 교대와 연결은 우선 순위가 같고 왼쪽에서 오른쪽으로 연결됩니다. 명시 적과 병치가 아닌 토큰이 병합에 필요합니다.
식별자없이 키워드가 주어지면, 가장 최근의 키워드로 간주됩니다. 예를 들어, 호스트 대 에이스가 아니다. 짧다. 호스트 대 호스트가 아닌 호스트 에이스. 그러나 이것과 혼동해서는 안됩니다. not (호스트 대 에이스).
표현식 인수는에 전달 될 수 있습니다. tcpdump 단일 인수 또는 다중 인수 중 더 편리한 것. 일반적으로 표현식에 쉘 메타 문자가 포함되어 있으면이를 따옴표 붙은 단일 인수로 전달하는 것이 더 쉽습니다. 여러 인수는 구문 분석되기 전에 공백으로 연결됩니다.
Tcpdump 예제
tcpdump 호스트 일몰
위의 tcpdump 명령은 도착하거나 출발하는 모든 패킷을 인쇄하는 데 사용됩니다 일몰. tcpdump 호스트 helios 및 (핫 또는 에이스)
이 tcpdump 예제는 헬리오스 및 뜨거운 또는 에이스. tcpdump IP 호스트 에이스가 아니라 헬리오스
이 tcpdump 명령을 사용하여 다음 사이의 모든 IP 패킷을 인쇄 할 수 있습니다. 에이스 및 모든 호스트 제외 헬리오스. tcpdump net ucb-ether
위의 예에서 tcpdump는 Berkeley에있는 로컬 호스트와 호스트 간의 모든 트래픽을 인쇄합니다. tcpdump '게이트웨이 snup 및 (포트 ftp 또는 ftp-data)'
이 다음 tcpdump 명령 예제는 인터넷 게이트웨이를 통해 모든 FTP 트래픽을 인쇄하는 데 사용됩니다 놀래켜 주다 . 셸이 괄호를 잘못 해석하지 않도록식이 인용됩니다. tcpdump ip와 not net localnet
위의 tcpdump 예제에서이 명령은 로컬 호스트로부터의 출처가 아니거나 예정된 트래픽을 인쇄하지 않습니다. tcpdump 'tcp tcpflags & (tcp-syn | tcp-fin)! = 0이며 src 및 dst net이 아닙니다. localnet '
위의 tcpdump 예제의 경우 명령은 로컬이 아닌 호스트가 관련된 각 TCP 대화의 시작 및 끝 패킷 (SYN 및 FIN 패킷)을 인쇄하는 데 사용됩니다. tcpdump '게이트웨이 snup 및 ip 2 : 2> 576'
위 명령은 게이트웨이를 통해 전송 된 576 바이트보다 긴 IP 패킷을 출력합니다 snup. tcpdump 'ether 0 & 1 = 0 and ip 16> = 224'
위에 표시된 tcpdump 명령은 다음과 같은 IP 브로드 캐스트 또는 멀티 캐스트 패킷을 인쇄합니다. 아니 이더넷 브로드 캐스트 또는 멀티 캐스트를 통해 전송됩니다. tcpdump 'icmp icmptype! = icmp-echo와 icmp icmptype! = icmp-echoreply'
이 마지막 tcpdump 예제에서 echo 명령이나 응답이 아닌 모든 패킷 (즉, ping 패킷이 아닌)을 인쇄합니다. 의 출력 tcpdump 프로토콜 의존적이다. 다음은 대부분의 형식에 대한 간단한 설명과 예제를 제공합니다. 링크 레벨 헤더. '-e'옵션이 주어지면, 링크 레벨 헤더가 출력됩니다. 이더넷 네트워크에서 소스 및 대상 주소, 프로토콜 및 패킷 길이가 인쇄됩니다. FDDI 네트워크에서 '-e'옵션은 tcpdump '프레임 제어'필드, 원본 및 대상 주소 및 패킷 길이를 인쇄합니다. ( '프레임 제어'필드는 나머지 패킷의 해석을 제어합니다. IP 데이터 그램을 포함하는 패킷과 같은 일반 패킷은 우선 순위 값이 0과 7 사이 인 '비동기식'패킷입니다 (예 :`비동기 4'. 이러한 패킷은 802.2 논리 링크 제어 (LLC) 패킷을 포함한다고 가정한다. LLC 헤더가있는 경우 인쇄됩니다. 아니 ISO 데이터 그램 또는 소위 SNAP 패킷 일 수 있습니다. 토큰 링 네트워크에서 '-e'옵션은 tcpdump '액세스 제어'및 '프레임 제어'필드, 원본 및 대상 주소 및 패킷 길이를 인쇄합니다. FDDI 네트워크 에서처럼 패킷은 LLC 패킷을 포함한다고 가정합니다. '-e'옵션이 지정되었는지 여부에 관계없이 원본 라우팅 정보는 원본 라우팅 패킷에 대해 인쇄됩니다. (N.B. : 다음 설명은 RFC-1144에 설명 된 SLIP 압축 알고리즘에 익숙하다고 가정합니다.) SLIP 링크에서 방향 표시기 ( "I"는 인바운드, "O"는 아웃 바운드), 패킷 유형 및 압축 정보가 인쇄됩니다. 패킷 유형이 먼저 인쇄됩니다. 세 가지 유형은 ip , utcp , 및 ctcp . 추가 링크 정보는 인쇄되지 않습니다. ip 패킷. TCP 패킷의 경우 연결 식별자가 유형 다음에 인쇄됩니다. 패킷이 압축되면 인코딩 된 헤더가 인쇄됩니다. 특별한 경우는 다음과 같이 인쇄됩니다.* S + 엔 과* SA + 엔 , 어디서 엔 시퀀스 번호 (또는 시퀀스 번호와 ack)가 변경된 양입니다. 특수한 경우가 아니면 0 개 이상의 변경 사항이 인쇄됩니다. 변경은 U (긴급 포인터), W (창), A (확인), S (시퀀스 번호) 및 I (패킷 ID) 다음에 델타 (+ n 또는 -n) 또는 새 값 (= n). 마지막으로 패킷의 데이터 양과 압축 된 머리글 길이가 인쇄됩니다. 예를 들어, 다음 행은 암시 적 연결 식별자가있는 아웃 Y 운드 압축 TCP 패킷을 표시합니다. ack는 6, 시퀀스 번호는 49, 패킷 ID는 6으로 변경되었습니다. 3 바이트의 데이터와 6 바이트의 압축 된 헤더가 있습니다. O ctcp * A + 6 S + 49 I + 6 3 (6)
Arp / rarp 패킷. Arp / rarp 출력은 요청 유형과 그 인수를 표시합니다. 형식은 자명하다. 다음은 호스트에서 'rlogin'을 시작한 짧은 샘플입니다. rtsg 주최하다 쌈 : arp who-csam tell rtsgarp reply csam is-at CSAM
첫 번째 라인은 rtsg가 인터넷 호스트 csam의 이더넷 주소를 묻는 ARP 패킷을 보냈다는 것입니다. Csam은 이더넷 주소로 응답합니다 (이 예에서 이더넷 주소는 대문자와 소문자로 된 인터넷 주소입니다). 우리가 해본다면 이것은 덜 불필요 해 보입니다. tcpdump -n : arp who-has 128.3.254.6 128.3.254.68에게 말하십시오.arp 답장 128.3.254.6 is at 02 : 07 : 01 : 00 : 01 : c4
우리가 해낸다면 tcpdump -e 첫 번째 패킷이 브로드 캐스트이고 두 번째 패킷이 지점 간 (point-to-point)이라는 사실이 표시됩니다. RTSG 브로드 캐스트 0806 64 : arp who-has csam tell rtsgCSAM RTSG 0806 64 : arp reply csam is-at CSAM
첫 번째 패킷의 경우 이더넷 소스 주소는 RTSG이고 대상은 이더넷 브로드 캐스트 주소이며 유형 필드는 16 진수 0806 (ETHER_ARP 유형)을 포함하며 총 길이는 64 바이트입니다. TCP 패킷 (N.B. : 다음 설명은 RFC-793에 설명 된 TCP 프로토콜에 익숙하다고 가정합니다. 프로토콜에 익숙하지 않은 경우이 설명이나 tcpdump는별로 유용하지 않습니다) . tcp 프로토콜 라인의 일반적인 형식은 다음과 같습니다. src> dst : flags data-seqno ack 창 긴급 옵션
Src 과 DST 원본 및 대상 IP 주소 및 포트입니다. 국기 S (SYN), F (FIN), P (PUSH) 또는 R (RST) 또는 단일 '.' (플래그 없음). 데이터 정렬 이 패킷의 데이터가 포함하는 시퀀스 공간의 일부를 설명합니다 (아래 예 참조). 흡인력 이 연결에서 다른 방향으로 예상되는 다음 데이터의 시퀀스 번호입니다. 창문 이 연결에서 다른 방향으로 사용할 수있는 수신 버퍼 공간의 바이트 수입니다. Urg 패킷에 '긴급한'데이터가 있음을 나타냅니다. 옵션 tcp 옵션은 꺽쇠 괄호로 묶습니다 (예 : Src, dst, 과 깃발 항상 존재합니다. 다른 필드는 패킷의 TCP 프로토콜 헤더의 내용에 따라 다르며 적절한 경우에만 출력됩니다. 다음은 호스트에서 rlogin의 시작 부분입니다. rtsg 주최하다 쌈 . rtsg.1023> csam.login : S 768512 : 768512 (0) win 4096 첫 번째 라인은 rtsg의 tcp 포트 1023이 포트로 패킷을 보냈다 고 말합니다. 로그인 on csam. 그만큼에스 는 SYN 플래그가 설정되었습니다. 패킷 시퀀스 번호는 768512이고 데이터가 없습니다. (표기법은 'first : last (nbytes)'이며 이는 '시퀀스 번호 먼저 최대 포함하지만 포함하지 않음 마지막 그것은 n 바이트 사용자 데이터의 바이트 '). 피기 백 승인 (ack)이 없었고 사용 가능한 수신 창은 4096 바이트였으며 최대 세그먼트 크기 옵션은 1024 바이트의 mss를 요청했습니다. Csam은 rtsg의 SYN에 대한 피기 백 확인을 제외하고는 유사한 패킷으로 응답합니다. 그런 다음 Rtsg는 csam의 SYN을 확인합니다. '.' 플래그가 설정되지 않았 음을 의미합니다. 패킷에 데이터가 없으므로 데이터 시퀀스 번호가 없습니다. 확인 시퀀스 번호는 작은 정수 (1)입니다. 처음 tcpdump tcp 'conversation'을 보았을 때 패킷의 시퀀스 번호를 출력합니다. 대화의 후속 패킷에서 현재 패킷의 시퀀스 번호와이 초기 시퀀스 번호 간의 차이가 인쇄됩니다. 즉, 첫 번째 바이트 이후의 시퀀스 번호는 대화의 데이터 스트림에서 상대적인 바이트 위치로 해석 될 수 있습니다 (첫 번째 데이터 바이트는 각 방향이 '1'임). '-S'는이 기능을 무효화하여 원래의 시퀀스 번호를 출력합니다. 여섯 번째 줄에서 rtsg는 csam에 19 바이트의 데이터를 보냅니다 (대화의 rtsg -> csam 쪽에서 바이트 2에서 20까지). PUSH 플래그가 패킷에 설정됩니다. 일곱 번째 줄에서 csam은 rtsg에 의해 바이트 21까지 포함하여 수신 된 데이터를 수신했다고 말합니다.이 데이터의 대부분은 csam의 수신 창이 19 바이트 작아 졌기 때문에 분명히 소켓 버퍼에 있습니다. 또한 Csam은이 패킷에서 1 바이트의 데이터를 rtsg로 전송합니다. 8 번째 줄과 9 번째 줄에서 csam은 2 바이트의 긴급 푸시 된 데이터를 rtsg로 보냅니다. 스냅 샷이 충분히 작 으면 tcpdump 전체 TCP 헤더를 포착하지 못했지만 가능한 한 많은 헤더를 해석 한 다음 "| tcp ''를 사용하여 해석 할 수 없음을 나타냅니다. 헤더에 가짜 옵션 (길이가 너무 작거나 헤더의 끝을 초과하는 옵션)이 있으면 tcpdump " 나쁜 선택 ''(더 이상 옵션을 해석하지 않습니다. 헤더 길이가 옵션이 있지만 IP 데이터 그램 길이가 실제로 옵션이 존재하기에 충분하지 않음을 나타내는 경우, tcpdump " 나쁜 hdr 길이 ''. 특정 플래그 조합으로 패킷 캡처. TCP 헤더의 제어 비트 섹션에는 8 비트가 있습니다. CWR | ECE | URG | ACK | PSH | RST | SYN | 지느러미 TCP 연결을 설정하는 데 사용되는 패킷을 보려고한다고 가정 해 봅시다. 새로운 연결을 초기화 할 때 TCP는 3 방향 핸드 셰이크 프로토콜을 사용합니다. TCP 제어 비트에 관한 연결 순서는 다음과 같습니다. 이제 SYN 비트 만 설정된 패킷 캡처에 관심이 있습니다 (1 단계). 우리는 2 단계 (SYN-ACK) 패킷을 원하지 않는다는 것을 알아두기 바란다. 우리가 필요한 것은 올바른 필터 표현입니다. tcpdump . 옵션없이 TCP 헤더의 구조를 상기하자. 0 15 31-----------------------------------------------------------------| 소스 포트 | 대상 포트 |-----------------------------------------------------------------| 시퀀스 번호 |-----------------------------------------------------------------| 확인 번호 |-----------------------------------------------------------------| HL | rsvd | C | E | U | A | P | R | S | F | 창 크기 |-----------------------------------------------------------------| TCP 체크섬 | 긴급 포인터 |-----------------------------------------------------------------
TCP 헤더는 옵션이없는 한 일반적으로 20 옥텟의 데이터를 저장합니다. 그래프의 첫 번째 라인은 옥텟 0-3을 포함하고, 두 번째 라인은 옥텟 4-7을 표시합니다. 0으로 계산되기 시작한 관련 TCP 제어 비트는 옥텟 13에 포함됩니다. 0 7| 15| 23| 31----------------|---------------|---------------|----------------| HL | rsvd | C | E | U | A | P | R | S | F | 창 크기 |----------------|---------------|---------------|----------------| | 13 번째 옥텟 | | |
옥텟 번호를 더 자세히 살펴 보겠습니다. 13 : | | |---------------| | C | E | U | A | P | R | S | F | |---------------| |7 5 3 0|
이들은 우리가 관심을 가지는 TCP 제어 비트입니다. 우리는 0에서 7까지 오른쪽에서 왼쪽으로이 옥텟의 비트를 번호 매기기 때문에 PSH 비트는 비트 3이며 URG 비트는 5입니다. SYN 만 설정된 패킷을 캡처하려고한다는 것을 상기하십시오. 헤더에 SYN 비트가 설정된 TCP 데이터 그램이 도착하면 13 번 옥텟에 어떤 일이 발생하는지 봅시다. | C | E | U | A | P | R | S | F | |---------------| |0 0 0 0 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|
제어 비트 섹션을 살펴보면 비트 번호 1 (SYN) 만 설정된다는 것을 알 수 있습니다. 옥텟 번호 13이 네트워크 바이트 순서에서 8 비트 부호없는 정수라고 가정하면이 옥텟의 이진 값은 다음과 같습니다. 00000010 십진수 표현은 다음과 같습니다. 7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2
SYN 만 설정하면 TCP 헤더의 13 번째 옥텟 값이 네트워크 바이트 순서에서 8 비트 부호없는 정수로 해석 될 때 정확하게 2이어야한다는 것을 알기 때문에 거의 완료되었습니다. 이 관계는 다음과 같이 표현 될 수있다. tcp 13 == 2 이 표현식을 다음과 같은 필터로 사용할 수 있습니다. tcpdump SYN 만 설정된 패킷을보기 위해서 : tcpdump -i xl0 tcp 13 == 2 이 표현식은 "TCP 데이터 그램의 13 번째 옥텟에 10 진수 값 2가 있어야합니다."라고 말하면서 정확히 우리가 원하는 것입니다. 이제 SYN 패킷을 캡처해야한다고 가정 해 보겠습니다. 그러나 ACK 또는 다른 TCP 제어 비트가 동시에 설정되는지는 신경 쓰지 않습니다. SYN-ACK 세트가있는 TCP 데이터 그램이 도착할 때 옥텟 13에 어떤 일이 발생하는지 살펴보십시오. | C | E | U | A | P | R | S | F | |---------------| |0 0 0 1 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|
비트 1과 4는 이제 13 번째 옥텟에 설정됩니다. 옥텟 13의 이진 값은 다음과 같습니다. 00010010 10 진수로 변환됩니다. 7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18
우리는 'tcp 13 == 18'을 사용할 수 없습니다. tcpdump 왜냐하면 SYN-ACK가 설정된 패킷 만 선택하고 SYN 만 설정된 패킷은 선택하지 않기 때문입니다. SYN이 설정되어있는 한 ACK 또는 다른 제어 비트가 설정되어 있는지 신경 쓰지 않습니다. 목표를 달성하기 위해서는 옥텟 13의 이진 값과 SYN 비트를 보존하기 위해 다른 값을 논리적으로 AND해야합니다. 우리는 어떤 경우에도 SYN이 설정되기를 원한다는 것을 알고 있으므로, 13 번째 옥텟의 값과 SYN의 이진 값을 논리적으로 AND합니다. 00010010 SYN-ACK 00000010 SYN 00000010 (우리는 SYN을 원한다) AND 00000010 (우리는 SYN을 원한다) -------- -------- = 00000010 = 00000010
이 AND 연산은 ACK 또는 다른 TCP 제어 비트가 설정되었는지 여부에 관계없이 동일한 결과를 제공합니다. 이 연산의 결과뿐만 아니라 AND 값의 십진수 표현은 2 (이진 00000010)이므로 SYN이 설정된 패킷의 경우 다음 관계가 true이어야합니다. ((옥텟 13의 값 AND (2)) == (2) 이것은 우리에게 tcpdump 필터 식 tcpdump -i xl0 'tcp 13 & 2 == 2' 쉘에서 AND ( '&') 특수 문자를 숨기려면 표현식에 작은 따옴표 또는 백 슬래시를 사용해야합니다. UDP 패킷. UDP 형식은이 rwho 패킷에 의해 설명됩니다. actinide.who> 방송. 누가 : udp 84
이 말은 포트 누구 호스트에 악티니드 udp 데이터 그램을 포트로 보냈습니다. 누구 호스트에 방송 , 인터넷 브로드 캐스트 주소. 패킷에는 84 바이트의 사용자 데이터가 포함되어 있습니다. 일부 UDP 서비스는 소스 또는 대상 포트 번호에서 인식되고 특히 도메인 이름 서비스 요청 (RFC-1034 / 1035) 및 Sun RPC 호출 (RFC-1050)에서 NFS로 인쇄되는 상위 수준 프로토콜 정보가 인식됩니다. UDP 이름 서버 요청 (N.B. : 다음 설명은 RFC-1035에 설명 된 도메인 서비스 프로토콜에 익숙하다고 가정합니다. 프로토콜에 익숙하지 않은 경우 다음 설명은 거의 의미가 없습니다.) 이름 서버 요청은 다음과 같이 형식화됩니다. src> dst : id op? 플래그 qtype qclass 이름 (len) h2opolo.1538> helios.domain : 3+ A? ucbvax.berkeley.edu. (37)
숙주 h2opolo 에 도메인 서버에 물었다. 헬리오스 이름과 연관된 주소 레코드 (qtype = A) ucbvax.berkeley.edu. 검색어 ID는 '3'입니다. '+'는 원하는 재귀 플래그가 설정되었습니다. 쿼리 길이는 37 바이트이며 UDP 및 IP 프로토콜 헤더는 포함되지 않았습니다. 쿼리 작업은 정상적인 작업이었습니다. 질문 , op 필드는 생략되었습니다. op가 다른 것이었다면 '3'과 '+'사이에 인쇄되었을 것입니다. 비슷하게, qclass는 정상적인 것이었고, C_IN , 생략되었습니다. 다른 qclass는 'A'바로 다음에 인쇄됩니다. 몇 가지 예외가 확인되고 대괄호로 묶인 추가 필드가 생길 수 있습니다. 쿼리에 대답, 권한 레코드 또는 추가 레코드 섹션이 포함 된 경우, 계산서 , nscount , 또는 아크 마운트 ' 엔 a ',' 엔 n '또는' 엔 au '어디에서 엔 적절한 수입니다. 응답 비트 중 하나 (AA, RA, 또는 rcode)가 설정되거나`반드시 0이어야 '비트 중 하나가 바이트 2와 3으로 설정되면, b2 & 3 = 엑스 '이 인쇄됩니다. 엑스 헤더 바이트 2와 3의 16 진수 값입니다. UDP 이름 서버 응답. 이름 서버 응답의 형식은 다음과 같습니다. src> dst : id opcode 플래그 a / n / au 유형 클래스 데이터 (len) helios.domain> h2opolo.1538 : 3 3/3/7 A 128.32.137.3 (273)helios.domain> h2opolo.1537 : 2 NXDomain * 0/1/0 (97)
첫 번째 예에서, 헬리오스 ~에서 조회 ID 3에 응답합니다. h2opolo 3 개의 응답 레코드, 3 개의 이름 서버 레코드 및 7 개의 추가 레코드가 있습니다. 첫 번째 응답 레코드는 유형 A (주소)이고 데이터는 인터넷 주소 128.32.137.3입니다. 응답의 전체 크기는 UDP 및 IP 헤더를 제외한 273 바이트입니다. op 레코드 (쿼리)와 응답 코드 (NoError)는 A 레코드의 클래스 (C_IN)와 마찬가지로 생략되었습니다. 두 번째 예에서, 헬리오스 응답이없는 도메인 (NXDomain)의 응답 코드, 이름 서버 하나 및 권한 레코드가없는 쿼리 2에 응답합니다. '*'는 권위있는 대답 비트가 설정되었습니다. 응답이 없었기 때문에 유형, 클래스 또는 데이터가 인쇄되지 않았습니다. 나타날 수있는 다른 플래그 문자는 '-'(재귀 사용 가능, RA, 아니 세트) 및 '|' (잘린 메시지, TC, 세트). 'question'섹션에 정확히 하나의 항목이 포함되어 있지 않으면 ' 엔 q '가 인쇄됩니다. 네임 서버 요청과 응답은 큰 경향이 있고 기본값은 스냅 풀 68 바이트의 패킷이 인쇄하기에 충분한 패킷을 캡처하지 못할 수 있습니다. 사용-에스 네임 서버 트래픽을 심각하게 조사해야하는 경우 플래그를 사용하여 스냅을 늘립니다. '-s 128'나를 위해 잘 작동했다. SMB / CIFS 디코딩. tcpdump UDP / 137, UDP / 138 및 TCP / 139에 대한 데이터를위한 상당히 광범위한 SMB / CIFS / NBT 디코딩을 포함합니다. IPX 및 NetBEUI SMB 데이터의 일부 기본 디코딩도 수행됩니다. 기본적으로 상당히 최소한의 디코드가 수행되며 -v가 사용되면 훨씬 더 상세한 디코드가 수행됩니다. -v 옵션을 사용하면 단일 SMB 패킷이 한 페이지 이상을 차지할 수 있으므로 항상 모든 세부 정보를 원한다면 -v 옵션 만 사용하십시오. 유니 코드 문자열을 포함하는 SMB 세션을 디코딩하는 경우 환경 변수 USE_UNICODE를 1로 설정할 수 있습니다. 유니 코드 문자열 자동 검색 패치가 환영받을 것입니다. SMB 패킷 형식 및 모든 필드의 의미에 대한 정보는 www.cifs.org 또는 pub / samba / specs / 디렉토리의 samba.org 미러 사이트를 참조하십시오. SMB 패치는 Andrew Tridgell ([email protected])에 의해 작성되었습니다. NFS 요청 및 응답. Sun NFS (Network File System) 요청 및 응답은 다음과 같이 인쇄됩니다. src.xid> dst.nfs : len op 인수 src.nfs> dst.xid : 응답 통계 결과 sushi.6709> wrl.nfs : 112 readlink fh 21,24 / 10.73165wrl.nfs> sushi.6709 : reply ok 40 readlink "../var"초밥 .211b> wrl.nfs : 144 조회 fh 9,74 / 4096.6878 "xcolors"wrl.nfs> sushi.201b : 답장 확인 128 조회 fh 9,74 / 4134.3150
첫 번째 줄에는 호스트 회 id가있는 트랜잭션을 보낸다. 6709 에 URL (src 호스트 다음의 숫자는 트랜잭션 ID이며, 아니 소스 포트). 요청은 UDP 및 IP 헤더를 제외한 112 바이트입니다. 수술은 readlink (심볼릭 링크 읽기) 파일 핸들 ( fh ) 21,24 / 10.731657119. (운이 좋다면,이 경우처럼 파일 핸들은 메이저, 마이너 디바이스 번호 쌍, 아이 노드 번호 및 세대 번호로 해석 될 수 있습니다.) Wrl 링크의 내용으로 'ok'라고 응답합니다. 세 번째 줄에서, 회 묻다 URL 이름을 조회하려면 ' xcolors '디렉토리 파일에서 9,74 / 4096.6878. 출력되는 데이터는 작업 유형에 따라 달라집니다. 이 형식은 NFS 프로토콜 스펙과 함께 읽으면 자명하다. -v (자세한 정보 표시) 플래그가 제공되면 추가 정보가 인쇄됩니다. 예 : sushi.1372a> wrl.nfs : 148 읽기 fh 21,11 / 12.195 8192 바이트 @ 24576wrl.nfs> sushi.1372a : 답장 OK 1472 읽기 REG 100664 ID 417/0 sz 29388
(-v는 IP 헤더 TTL, ID, 길이 및이 예에서 생략 된 분할 필드도 인쇄합니다.) 첫 번째 행에서, 회 묻다 URL 바이트 오프셋 24576에서 파일 21,11 / 12.195에서 8192 바이트를 읽습니다. Wrl 대답 'ok'; 두 번째 줄에 표시된 패킷은 회신의 첫 번째 조각이므로 1472 바이트 길이입니다 (다른 바이트는 후속 조각에서 따라 오지만 이러한 조각에는 NFS 또는 UDP 헤더가 없으므로 인쇄되지 않을 수도 있습니다. 사용 된 필터 표현식에 따라 다름). -v 플래그가 주어지기 때문에, 파일 유형 ( "REG", 일반 파일), 파일 모드 (8 진수), 파일 유형 uid 및 gid 및 파일 크기 -v 플래그가 두 번 이상 주어지면 더 많은 세부 사항이 인쇄됩니다. NFS 요청은 매우 커서 많은 세부 사항이 인쇄되지 않을 것입니다. 스냅 풀 증가합니다. '-s 192'를 선택하면 NFS 트래픽을 볼 수 있습니다. NFS 회신 패킷은 RPC 작업을 명시 적으로 식별하지 않습니다. 대신, tcpdump "최근"요청을 추적하고 트랜잭션 ID를 사용하여 응답과 일치시킵니다. 응답이 해당 요청을 따르지 않을 경우 구문 분석 할 수 없습니다. Transarc AFS (Andrew File System) 요청 및 응답.
Tcpdump 출력 형식