『神探tcpdump第七招』-linux命令5分シリーズの四十一
【シリーズ記事】
『神探tcpdump第一手』-linux命令5分シリーズの35『神探tcpdump第二手』-linux命令5分シリーズの36『神探tcpdump第三手』-linux命令5分シリーズの37『神探tcpdump第四手』-linux命令5分シリーズの38『神探tcpdump第五手』-linux命令5分シリーズの39『神探tcpdump第六手』-linuxコマンド5分シリーズの40
==
前の手では、最後の3つの例が複雑で、雲の中に霧が立ち込めているような気がするかもしれません.私たちは今この3つの例を振り返って、それから今日の7番目の手はみんなにどのように彼らを理解するかを教えます!
==
説明する前に、ETHER/IP/TCP/UDPなどのプロトコルのパッケージ定義フォーマットを熟知し、一人一人の役割と意味を知る必要があります.
ETHERについては、「コンピュータネットワークプロトコルパッケージ鑑賞-イーサネット」を参照してください.IPについては、「コンピュータネットワークプロトコルパッケージヘッダ鑑賞-IP」を参照することができる.TCPについては、「コンピュータネットワークプロトコルパッケージ評価-TCP」を参照してください.UDPについては、「コンピュータネットワークプロトコルヘッダ鑑賞-UDP」を参照してください.
==
刀を研ぐのは間違いなく薪を切る仕事で、もしこのシリーズの前の6編の文章がすべてよく見たことがあるならば、同時に、いくつかのプロトコルのパッケージのフォーマットもすべて理解して、それでは私達は本題に入って、式の高級な文法を濾過することを紹介します.
実は私たちが重点的に説明しなければならないのは1つの文法だけで、proto[expr:size]で、この文法のフォーマットをマスターすれば、みんなは上の3つの奇妙な表現を理解することができると信じています.
protoはprotocolの略で、ip、tcp、etherなど、ここで指定するプロトコルの名前を表します.実はprotoという場所で、指定できるプロトコルのタイプは全部で15個以上あります. ether,Cリンク層プロトコル fddi、Cリンク層プロトコル tr,Cリンク層プロトコル wlan,Cリンク層プロトコル ppp,Cリンク層プロトコル slip�Cリンク層プロトコル link�Cリンク層プロトコル ip arp rarp tcp udp icmp ip6 radio
exprは、あるプロトコルのデータ・レポートの何番目のビットからコンテンツを抽出するかを示すデータ・レポートのオフセット量を指定し、デフォルトの開始位置は0です.一方sizeは,オフセット量の位置から抽出されるバイト数を表し,1,2,4に設定できる.
exprのみが設定され、sizeが設定されていない場合は、デフォルトで1バイトが抽出されます.例えばip[2:2]は、3、4バイト目が抽出されたことを示す.一方、ip[0]は、ipプロトコルヘッダを抽出する最初のバイトを表す.
特定のコンテンツを抽出した後、フィルタ条件を設定する必要があります.比較オペレータには、>、<、>=、<=、!=、全部で6つあります.
はい、上記の内容をマスターした後、私は責任を持ってあなたに教えて、あなたはすでにtcpdumpフィルタ式の最も重要な文法をマスターしました.まず牛刀を試して、例題を見てみましょう.
IPプロトコルの0-4ビット目は、IPバージョン番号を表し、IPv 4(値0100)またはIPv 6(0110)であってもよい.5~8位は「4バイト」の首の長さを表し、首の長さがデフォルトの20バイトであれば、この値は5、すなわち「0101」となります.ip[0]はこの2つのドメインの合体である.0 xfの0 xは16進数、fは16進数、8ビットに変換された2進数は「0000 1111」である.5は10進数で、8ビットのバイナリ数が「0000 0101」に変換されます.
これらの分析があれば、皆さんはよく知っているはずです.この文の中で!=の左側部分はIPパケットヘッダ長ドメインを抽出し,ヘッダ長が5に等しくなければフィルタ条件を満たす.すなわち,IPパケットのヘッダにオプションフィールドを含めることが要求される.
フィルタ式を書くときは、プロトコルのフォーマットを完全に頭に暗記してこそ、式を正しく書くことができることを知っているかもしれません.しかし、これは多くの人にとって、少し難しいかもしれません.tcpdumpツールをより人間的にするためには、icmptypeがICMPプロトコルのタイプドメインを表し、icmpcodeがICMPのcodeドメインを表し、tcpflagsがTCPプロトコルのフラグフィールドドメインを表すなど、一般的なオフセット量があります.
さらに、ICMPのタイプドメインについては、icmp-echoreply,icmp-unreach,icmp-sourcequench,icmp-redirect,icmp-echo,icmp-routeradvert,icmp-routersolicit,icmp-timxceed,icmp-paramprob,icmp-tstampreply,icmp-tstampreply,icmp-ireq,icmp-ireqreply,icmp-masekreq,ic mp-maseprlyを具体的に指すことができる.
一方、TCPプロトコルのフラグフィールドドメインは、tcp−fin、tcp−syn、tcp−rst、tcp−push、tcp−ack、tcp−urgに細分化することができる.
1つのフィルタ式に複数のフィルタ条件がある場合は、論理子を使用する必要があります.あるいはnotはすべて“否定”を表すことができて、&&andはすべて“と”を表すことができて、|orとすべて“あるいは”を表すことができます.
==
はい、大功は成し遂げて、もしあなたが本当に上の内容をよく読んで掌握したら、私はあなたが自分で下の3つの文を分析する能力があると信じて、その上きっとそれらの“言下の意味”を理解することができます!
ありがとう!
『神探tcpdump第一手』-linux命令5分シリーズの35『神探tcpdump第二手』-linux命令5分シリーズの36『神探tcpdump第三手』-linux命令5分シリーズの37『神探tcpdump第四手』-linux命令5分シリーズの38『神探tcpdump第五手』-linux命令5分シリーズの39『神探tcpdump第六手』-linuxコマンド5分シリーズの40
==
前の手では、最後の3つの例が複雑で、雲の中に霧が立ち込めているような気がするかもしれません.私たちは今この3つの例を振り返って、それから今日の7番目の手はみんなにどのように彼らを理解するかを教えます!
tcpdump 'tcp[tcpflags] & tcp-syn != 0 and not dst host qiyi.com'
tcpdump 'ip[2:2] > 576'
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
==
説明する前に、ETHER/IP/TCP/UDPなどのプロトコルのパッケージ定義フォーマットを熟知し、一人一人の役割と意味を知る必要があります.
ETHERについては、「コンピュータネットワークプロトコルパッケージ鑑賞-イーサネット」を参照してください.IPについては、「コンピュータネットワークプロトコルパッケージヘッダ鑑賞-IP」を参照することができる.TCPについては、「コンピュータネットワークプロトコルパッケージ評価-TCP」を参照してください.UDPについては、「コンピュータネットワークプロトコルヘッダ鑑賞-UDP」を参照してください.
==
刀を研ぐのは間違いなく薪を切る仕事で、もしこのシリーズの前の6編の文章がすべてよく見たことがあるならば、同時に、いくつかのプロトコルのパッケージのフォーマットもすべて理解して、それでは私達は本題に入って、式の高級な文法を濾過することを紹介します.
実は私たちが重点的に説明しなければならないのは1つの文法だけで、proto[expr:size]で、この文法のフォーマットをマスターすれば、みんなは上の3つの奇妙な表現を理解することができると信じています.
protoはprotocolの略で、ip、tcp、etherなど、ここで指定するプロトコルの名前を表します.実はprotoという場所で、指定できるプロトコルのタイプは全部で15個以上あります.
exprは、あるプロトコルのデータ・レポートの何番目のビットからコンテンツを抽出するかを示すデータ・レポートのオフセット量を指定し、デフォルトの開始位置は0です.一方sizeは,オフセット量の位置から抽出されるバイト数を表し,1,2,4に設定できる.
exprのみが設定され、sizeが設定されていない場合は、デフォルトで1バイトが抽出されます.例えばip[2:2]は、3、4バイト目が抽出されたことを示す.一方、ip[0]は、ipプロトコルヘッダを抽出する最初のバイトを表す.
特定のコンテンツを抽出した後、フィルタ条件を設定する必要があります.比較オペレータには、>、<、>=、<=、!=、全部で6つあります.
はい、上記の内容をマスターした後、私は責任を持ってあなたに教えて、あなたはすでにtcpdumpフィルタ式の最も重要な文法をマスターしました.まず牛刀を試して、例題を見てみましょう.
ip[0] & 0xf != 5
IPプロトコルの0-4ビット目は、IPバージョン番号を表し、IPv 4(値0100)またはIPv 6(0110)であってもよい.5~8位は「4バイト」の首の長さを表し、首の長さがデフォルトの20バイトであれば、この値は5、すなわち「0101」となります.ip[0]はこの2つのドメインの合体である.0 xfの0 xは16進数、fは16進数、8ビットに変換された2進数は「0000 1111」である.5は10進数で、8ビットのバイナリ数が「0000 0101」に変換されます.
これらの分析があれば、皆さんはよく知っているはずです.この文の中で!=の左側部分はIPパケットヘッダ長ドメインを抽出し,ヘッダ長が5に等しくなければフィルタ条件を満たす.すなわち,IPパケットのヘッダにオプションフィールドを含めることが要求される.
フィルタ式を書くときは、プロトコルのフォーマットを完全に頭に暗記してこそ、式を正しく書くことができることを知っているかもしれません.しかし、これは多くの人にとって、少し難しいかもしれません.tcpdumpツールをより人間的にするためには、icmptypeがICMPプロトコルのタイプドメインを表し、icmpcodeがICMPのcodeドメインを表し、tcpflagsがTCPプロトコルのフラグフィールドドメインを表すなど、一般的なオフセット量があります.
さらに、ICMPのタイプドメインについては、icmp-echoreply,icmp-unreach,icmp-sourcequench,icmp-redirect,icmp-echo,icmp-routeradvert,icmp-routersolicit,icmp-timxceed,icmp-paramprob,icmp-tstampreply,icmp-tstampreply,icmp-ireq,icmp-ireqreply,icmp-masekreq,ic mp-maseprlyを具体的に指すことができる.
一方、TCPプロトコルのフラグフィールドドメインは、tcp−fin、tcp−syn、tcp−rst、tcp−push、tcp−ack、tcp−urgに細分化することができる.
1つのフィルタ式に複数のフィルタ条件がある場合は、論理子を使用する必要があります.あるいはnotはすべて“否定”を表すことができて、&&andはすべて“と”を表すことができて、|orとすべて“あるいは”を表すことができます.
==
はい、大功は成し遂げて、もしあなたが本当に上の内容をよく読んで掌握したら、私はあなたが自分で下の3つの文を分析する能力があると信じて、その上きっとそれらの“言下の意味”を理解することができます!
tcpdump 'tcp[tcpflags] & tcp-syn != 0 and not dst host qiyi.com'
tcpdump 'ip[2:2] > 576'
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
ありがとう!