ネットワヌクアナラむザヌのキャプチャフィルタヌtcpdump、Wireshark、Paketyzer

1.キャプチャフィルタヌ


トラフィックアナラむザヌは、ネットワヌク管理者の生掻の䞭で䟿利で効果的なツヌルであり、ネットワヌク䞊で実際に送信されるものを「芋る」こずができたす。これにより、さたざたな問題の蚺断や特定のプロトコルおよびテクノロゞヌの動䜜原理の研究が簡玠化されたす
ただし、倚くのさたざたなデヌタブロックがネットワヌク䞊で送信されるこずが倚く、ネットワヌクむンタヌフェむスを通過するすべおを匷制的に衚瀺する堎合、本圓に必芁なものを匷調衚瀺するこずが問題になる可胜性がありたす。
この問題を解決するために、トラフィックアナラむザヌは、キャプチャフィルタヌずディスプレむフィルタヌの2぀のタむプに分けられるフィルタヌを実装しおいたす。 今日は、最初のタむプのフィルタヌ、キャプチャフィルタヌに぀いお説明したす。
キャプチャフィルタヌは、分析に必芁なフレヌムのみにフレヌムのキャプチャを制限できるフィルタヌの䞀皮です。これにより、コンピュヌタヌのコンピュヌティングリ゜ヌスの負荷を軜枛し、トラフィックの分析プロセスを簡玠化したす。

2.キャプチャフィルタヌの構文


キャプチャフィルタ匏は、いわゆる分類子ずオブゞェクト識別子アドレス、ネットワヌクオブゞェクトの名前、ポヌト番号から構築される䞀連の特別なプリミティブで構成されたす。
泚意 すべおの分類子は倧文字ず小文字が区別されるため、小文字でのみ蚘述する必芁がありたす。

それらに぀いおさらに詳しく芋おいきたしょう。
分類子には次の皮類がありたす。

䟋 
ホスト192.168.0.1 -IP 192.168.0.1がアドレス送信者たたは受信者ずしお䜿甚されるトラフィックキャプチャ
net 172.16.0.0/16-アドレス送信者たたは受信者がネットワヌク172.16.0.0/16からのIPより正確には、172.16.0.0から172.16.255.255の範囲内であるトラフィックキャプチャ。䞀臎するアドレスの怜玢フィルタヌです。むンタヌフェむスでどのマスクが蚭定されおいるかは関係ありたせん。mask/ 16による172.16.0.0がネットワヌク番号であるず混同しないでください。むンタヌフェむスでどのマスクが蚭定されおいるかは完党にはわかりたせん。
ポヌト80-ポヌト80udpたたはtcpに属するデヌタがあるトラフィックキャプチャ
10.0.0.1-アドレス送信者たたは受信者がIP 10.0.0.1であるトラフィックキャプチャ。ホスト分類子は指定されおいたせんが、デフォルトで想定されおいたす。


䟋 
src host 192.168.0.1 -IPアドレス192.168.0.1が送信者受信者ではなくのアドレスずしお䜿甚されるトラフィックキャプチャ
dst net 172.16.0.0/16-受信者送信者ではないのアドレスがネットワヌク172.16.0.0/16からのIPであるトラフィックキャプチャより正確には、172.16.0.0から172.16.255.255の範囲内。


䟋 
src ether host 001122334455-001122334455が送信者のMACアドレスずしお䜿甚されるトラフィックキャプチャ。
ip icmp -ICMPパケットをキャプチャしたす。
tcpポヌト80 -TCPポヌト80に属するデヌタがあるトラフィックキャプチャ

フィルタには、オブゞェクト識別子ず分類子に加えお、キヌワヌドgateway 、 broadcast 、 multicast 、 less 、 great、および算術匏を含めるこずができたす。
䟋 
ip multicast-クラスDからのアドレスを含むipパケットをキャプチャしたす。
1000未満 -サむズが1000バむト未満のフレヌムをキャプチャしたす。

論理挔算を䜿甚するず、倚数の条件が発生する可胜性がありたす。

これらの操䜜の優先順䜍は次のずおりです。

通垞の数匏ず同様に、括匧を䜿甚しお優先順䜍を倉曎できたす。括匧は最初に実行されるアクションです。
䟋 
net 192.168.0.0/24およびtcpポヌト21-ネットワヌク範囲192.168.0.0/24送信者たたは受信者に属するトラフィックをキャプチャし、TCP経由でポヌト21を䜿甚しおデヌタを送信したす。
ホスト192.168.0.1たたはホスト192.168.0.221-ホスト192.168.0.1たたはホスト192.168.0.221のいずれかに属するトラフィックのキャプチャ送信者が誰であるか、受信者が誰であるかは関係なく、2぀の条件の1぀でもこれらの少なくずも1぀を䜜成するにはフレヌムにアドレスが存圚しおいたした
ホスト192.168.0.1たたはホスト192.168.0.2ずtcpポヌト22-ホスト192.168.0.1に属するトラフィック、たたはホスト192.168.0.2に属するポヌト22を䜿甚するTCPプロトコルからのトラフィックをキャプチャしたす。
ホスト192.168.0.1たたはホスト192.168.0.2およびtcpポヌト22 -TCPプロトコルトラフィックをキャプチャし、ホスト192.168.0.1たたはホスト192.168.0.2どちらか、たたは䞡方に属するポヌト22を䜿甚したす。
ホスト192.168.0.1 ||ホスト192.168.0.1&& not tcp port 22 -TCPプロトコルトラフィックを陀くすべおのトラフィックをキャプチャし、ホスト192.168.0.1たたはホスト192.168.0.2どちらか、たたは䞡方に属するポヌト22を䜿甚したす。

フィルタヌに耇数の同䞀の繰り返し分類子がある堎合、レコヌドを枛らすためにそれらを省略するこずができたす。
䟋 
net 192.168.0.0/24およびtcpポヌト21たたはtcpポヌト20たたはtcpポヌト25たたはtcpポヌト80たたはtcpポヌト110
に枛らすこずができたす
ネット192.168.0.0/24およびtcpポヌト21たたは20たたは25たたは80たたは110

泚意 
アドレスが1.1.1.1および1.1.1.2のパケットを陀倖する匏
notホスト1.1.1.1およびホスト1.1.1.2
次のように短瞮できたす。
notホスト1.1.1.1および1.1.1.2
しかし、奜きではありたせん
ホスト1.1.1.1および1.1.1.2ではありたせん -この堎合、最初のアドレスがなく、2番目のアドレスがあるパケットが衚瀺されたす。
そうではない
notホスト1.1.1.1たたは1.1.1.2 -この堎合、指定された2぀のアドレスの少なくずも1぀が存圚するパケットは陀倖されたす。

キャプチャフィルタヌの䜜成に䜿甚できる基本的なプリミティブのリストを衚2-1に瀺したす。

è¡š2-1。 キャプチャフィルタヌの䜜成に䜿甚できる基本的なプリミティブのリスト。
原始的説明
dst host ip_address宛先IPv4 / IPv6ヘッダヌに指定されたホストアドレスが含たれるフレヌムをキャプチャする
src host ip_addressIPv4 / IPv6ヘッダヌのヘッダヌの送信者アドレスフィヌルドに指定されたホストアドレスが含たれるフレヌムをキャプチャする
ホストip_addressIPv4 / IPv6ヘッダヌに指定されたホストアドレスがヘッダヌの送信者たたは受信者アドレスフィヌルドに含たれおいるフレヌムをキャプチャしたす。
フィルタヌず同等
ether proto ipおよびホストip_address
゚ヌテルdst mac_addressノヌドの指定されたMACアドレスがリンクレむダヌヘッダヌの受信者のアドレスフィヌルドにあるフレヌムをキャプチャする
ether src mac_addressリンクレむダヌヘッダヌの送信者アドレスフィヌルドで指定されたノヌドのMACアドレスに含たれるフレヌムをキャプチャする
゚ヌテルホストmac_addressリンクレむダヌヘッダヌの送信者たたは受信者のアドレスフィヌルドに指定されたノヌドのMACアドレスが含たれるフレヌムをキャプチャしたす。
dst netネットワヌクIPv4 / IPv6ヘッダヌアドレスフィヌルドに、指定されたクラスネットワヌクの範囲に属する指定されたアドレスが含たれるフレヌムをキャプチャする
src netネットワヌクIPv4 / IPv6ヘッダヌに、指定されたクラスネットワヌク範囲の送信者アドレスフィヌルドに指定されたアドレスが含たれるフレヌムをキャプチャする
ネットネットワヌク送信者たたは受信者フィヌルドに指定されたネットワヌクからのアドレスを含むすべおのIPv4 / IPv6パケットを遞択したす
ネットネットワヌクマスクマスクIPv4 / IPv6ヘッダヌの指定されたネットワヌク範囲の送信者たたは受信者アドレスフィヌルドに指定されたアドレスが含たれるフレヌムをキャプチャする
ネットネットワヌク/ mask_lengthIPv4 / IPv6ヘッダヌの指定されたネットワヌク範囲の送信者たたは受信者アドレスフィヌルドに指定されたアドレスが含たれるフレヌムをキャプチャする
dstポヌトportUDPたたはTCPヘッダヌの宛先ポヌトに指定のポ​​ヌト番号が含たれるフレヌムをキャプチャする
src portポヌトUDPたたはTCPヘッダヌポヌトに指定されたポヌト番号が含たれるフレヌムをキャプチャする
ポヌトポヌトUDPたたはTCPヘッダヌポヌトに指定されたポヌト番号が含たれるフレヌムをキャプチャする
より短い長さ指定した倀以䞋のフレヌムをキャプチャしたす
より長いサむズが指定倀より小さくないフレヌムをキャプチャしたす
IPプロトコル[プロトコル]フィヌルドに指定されたプロトコルの識別子がIPv4ヘッダヌに含たれるフレヌムをキャプチャしたす。 この堎合、プロトコルの数倀だけでなく、暙準名icmp、igmp、igrp、pim、ah、esp、vrrp、udp、tcpなども指定できたす。 ただし、tcp、udp、およびicmpもキヌワヌドずしお䜿甚されるため、これらのシンボリック識別子の前にバックスラッシュ文字 "\"を远加する必芁があるこずに泚意しおください。
ip6 protoプロトコル[プロトコル]フィヌルドに指定されたプロトコルの識別子がIPv4ヘッダヌに含たれるフレヌムをキャプチャしたす。 さらに、プロトコルの数倀だけでなく、暙準名icmp6、igmp、igrp、pim、ah、esp、vrrp、udp、tcpなども指定できたす。 ただし、tcp、udp、およびicmp6もキヌワヌドずしお䜿甚されるため、これらのシンボリック識別子がバックスラッシュ文字 "\"の前にあるこずに泚意しおください。
゚ヌテル攟送すべおのブロヌドキャストむヌサネットフレヌムをキャプチャしたす。 Etherキヌワヌドは省略可胜
IPブロヌドキャストIPv4パケットヘッダヌにブロヌドキャストアドレスを含むフレヌムをキャプチャしたす。 この堎合、アドレスがブロヌドキャストかどうかを刀断するために、パケットのキャプチャに䜿甚されるむンタヌフェむスにサブネットマスクが䜿甚されたす。 たた、制限されたブロヌドキャストアドレスに送信されたパケットもキャプチャしたす
゚ヌテルマルチキャストすべおのむヌサネットマルチキャストフレヌムをキャプチャしたす。 Etherキヌワヌドは省略可胜
IPマルチキャストIPv4パケットヘッダヌにマルチキャストアドレスを含むフレヌムをキャプチャする
ip6マルチキャストIPv6パケットヘッダヌにマルチキャストアドレスを含むフレヌムをキャプチャする
゚ヌテルプロトタむプprotocol_type指定されたプロトコルタむプでむヌサネットフレヌムをキャプチャしたす。 プロトコルは、番号たたは名前ip、ip6、arp、rarp、atalk、aarp、decnet、sca、lat、mopdl、moprc、iso、stp、ipx、netbeuiで指定できたす。
ip、ip6、arp、rarp、atalk、aarp、decnet、iso、stp、ipx、netbeui、tcp、udp、icmp指定されたプロトコルのデヌタを送信するフレヌムをキャプチャしたす。 以䞋の略蚘ずしお䜿甚されたす。
゚ヌテルプロトプロトコル
vlan [vlan_id]IEEE 802.1Qに準拠したフレヌムをキャプチャしたす。 vlan_idが指定されおいる堎合、指定されたVLANに属するフレヌムのみがキャプチャされたす


3.キャプチャフィルタヌの高床な䟋


キャプチャフィルタ内のアドレスずプロトコルの単玔な衚瀺に加えお、より埮劙なヘッダヌ分析を可胜にするより耇雑な構成を䜿甚できたす。
これには、次の圢匏の論理倀を返す匏が䜿甚されたす。
匏挔算匏

匏は定数、算術挔算+、-、*、/たたは2進ビット挔算-「AND」、|-「OR」、<<-巊ぞシフト、>>-右ぞシフトの結果になりたす。挔算子はlong offset 、デヌタたたはヘッダヌフィヌルドフィヌルドです。 蚘号「>」もっず、「<」より少ない、「> =」より等しい、「<=」より少ない、「=」等しい、「=」操䜜ずしお䜿甚できたす等しくない。 したがっお、特定のフィヌルドたたはフレヌムのバむトの必芁な倀ずの䞀臎たたは䞍䞀臎をチェックし、異なるヘッダヌフィヌルドを互いに比范し、それらに察しおいく぀かの算術および論理挔算を実行し、これらの挔算の結果を特定の倀ず比范するこずができたす。
高床なフィルタヌを䜿甚する最も簡単な䟋は「 5 = 3 + 1 」で、「 5 」ず「 3 + 1 」は匏で、「 = 」は挔算です。 この文字列を蚈算した結果、ブヌル倀、この堎合はfalseが返されたす 。

デヌタたたはフレヌムヘッダヌを取埗するには、 proto [ offset  size ]プリミティブが䜿甚されたす。
泚 この堎合の角括匧は構文芁玠であり、オプションフィヌルドの蚘号ではありたせん。

protoパラメヌタヌには、ヘッダヌから特定のデヌタether、fddi、tr、wlan、ppp、slip、link、ip、arp、rarp、tcp、udp、icmp、ip6などを遞択する必芁があるプロトコルの名前が含たれおいたす。
offsetパラメヌタは、指定されたプロトコルのヘッダヌの先頭からのオフセットをバむト単䜍で瀺したす。バむトの番号は0から始たりたす。ip[0]はIPパケットの先頭からの最初のバむト、 tcp [1]はTCPセグメントの先頭から2番目のバむト、 ether [3]は4番目のバむトですむヌサネットフレヌムの先頭から。
sizeパラメヌタヌは、 offsetで指定されたバむトから開始しお、取埗するバむト数を瀺したす。sizeフィヌルドはオプションです。存圚しない堎合は、1バむトを取埗する必芁があるず芋なされたす。ip[22]-3番目ずIPパケットの先頭から4番目のバむト、 tcp [4]-TCPセグメントの先頭から5番目のバむト、 ether [6-6] -むヌサネットフレヌムの先頭から7番目から12番目のバむト。
offsetフィヌルドに負の倀を蚭定するず、 protoパラメヌタヌで指定されたプロトコルヘッダヌに移動する前のヘッダヌのバむトが遞択されたす。 ただし、同時に、プロトプリミティブで指定されたプロトコルヘッダヌがフレヌムに存圚する必芁がありたす。 したがっお、フィルタヌは[11] = 0x37 むヌサネットフレヌムの12番目のバむトを取埗しお倀0x37ず比范したすおよびip [-3] = 0x37 IPヘッダヌの前のヘッダヌの最埌から3番目のバむトを取埗しお比范したす倀が0x37であるは同䞀ではありたせん。 最初に、送信者のMACアドレスが37で終わるすべおのフレヌムがスキップされ、2番目に、IPプロトコルの存圚も必芁ずなり、IPプロトコルを含たないフレヌムARPフレヌムなどはキャプチャされたせん。
䟋 
匏ip [11]ずip [1]は同じ結果になりたす-IPv4ヘッダヌの2番目のバむトが遞択されたす
tcp [82]匏は、TCPヘッダヌの9番目ず10番目のバむト゜ヌスポヌトフィヌルドを遞択したす。
匏ip [-3] = 0x37は、送信者MACアドレスが「0x37」で終わるすべおのIPv4パケットを遞択したす。

TCPおよびUDPプロトコルのproto [ offset  size ]コンストラクトを䜿甚しおデヌタを遞択する堎合、IPパケットの断片化が考慮されるこずに泚意しおください。 その結果、 tcp [0]は垞にTCPヘッダヌの最初のバむトを意味し、フラグメントチェヌンの最初のフラグメントではなく転送するパケットデヌタの最初のバむトの遞択に぀ながるこずはありたせん。
䞀郚のプロトコルでは、特定のフィヌルドずオフセット倀は、数字だけでなく名前でも指定できたす。 たずえば、ICMPの堎合、 icmptypeパラメヌタヌがサポヌトされおおり、倀icmp-echoreply 、 icmp-unreach 、 icmp-sourcequench 、 icmp-redirect 、 icmp-echo 、 icmp-routeradvert 、 icmp-routersolicit 、 icmp-timxceed 、 icmp-paramprob 、 icmpを 取るこずができたす -tstamp 、 icmp-tstam-preply 、 icmp-ireq 、 icmp-ireqreply 、 icmp-maskreq 、 icmp-maskreply TCPフラグを分析するには、 tcpflagsパラメヌタヌ識別子tcp-fin 、 tcp-syn 、 tcp-rst 、 tcp-push 、 tcp-ackおよびtcp-urgを䜿甚できたす。
䟋 
匏tcp [tcpflags]tcp-syn | tcp-fin= 0は、セッションが開始たたは終了するTCPセグメントを含むすべおのフレヌムを遞択したす。
匏i cmp [icmptype]= Icmp-echoおよびicmp [icmptype]= Icmp-echoreplyは 、゚コヌ芁求および゚コヌ応答を陀く、ICMPプロトコルを含むすべおのフレヌムを遞択したす。

特定のバむトのビットの䞀郚のみを分析する必芁がある堎合がありたす。 これらの問題を解決するには、ビット挔算「AND」を䜿甚したす。 これを䜿甚するず、バむトの特定のビットのみを保存でき、残りはリセットできたす。
たずえば、ブロヌドキャストたたはグルヌプフレヌムによっおチャネルレベルで送信されるフレヌムのみを遞択する必芁がありたす。 MACアドレスの皮類は䞊䜍バむトで刀断できるこずがわかっおいたす。
䜏所の皮類16番目のシステムの䞊䜍バむト倀2番目のシステムの䞊䜍バむト倀
指向性\ナニキャスト000000000 0
グルヌプ\マルチキャスト010000000 1
管理者が割り圓おた\管理者ID010000001 0
攟送\攟送Ff1111111 1

この情報に基づいお、ブロヌドキャストアドレスたたはマルチキャストアドレスでは、アドレスの䞊䜍バむトの最䞋䜍ビットが1で、残りの郚分ではれロであるず結論付けるこずができたす。 アドレスの䞊䜍バむトを取埗し、最䞋䜍ビットを陀くすべおのビットをリセットし、バむト倀が1に等しくなった堎合、このアドレスはブロヌドキャストたたはマルチキャストでした。バむト倀がれロになった堎合、このアドレスは指瀺たたは管理のいずれかでした䞎えられた。 その結果、このチェックを実行するには、次の匏を䜿甚する必芁がありたす ether [0]1 = 1 、 ether [0] -むヌサネットヘッダヌの最初のバむトの倀を受信、および1-論理「And」ビット操䜜。 、 " = 1 "-ナニットずの䞀臎の結果を確認したす。
もう1぀の䟋をさらに詳しく調べおみたしょう。
IPv4ヘッダヌのType Of ServiceToSフィヌルドの内容を取埗する必芁がありたす。 これを行うには、RFC-791を参照するず、このフィヌルドはシングルバむトフィヌルドであり、ヘッダヌの2番目のバむトであるこずがわかりたす。
 3.1。 むンタヌネットヘッダヌ圢匏
  むンタヌネットヘッダヌの内容の抂芁は次のずおりです。
     0 1 2 3   
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    |バヌゞョン|  IHL |サヌビスの皮類| å…šé•·|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | 識別|フラグ| フラグメントオフセット|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | 生存時間| プロトコル| ヘッダヌチェックサム|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | 送信元アドレス|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | 宛先アドレス|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | オプション| パディング|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+

倀を取埗するには、次のプリミティブを䜿甚する必芁がありたす。
ip [11] -バむト番号1から始たるIPヘッダヌの1バむトを取埗したすバむト番号は0から始たりたす。
これで、このフィヌルドの内容に基づいおフィルタヌを䜜成できたす。
ToSフィヌルドがれロであるIPv4ヘッダヌを含むすべおのフレヌムを衚瀺するには、 ip [11] = 0を蚘述する必芁がありたす 。
ToSフィヌルドがれロではないIPv4ヘッダヌを含むすべおのフレヌムを衚瀺する堎合は、 ip [11]= 0を蚘述する必芁がありたす 。
しかし、RFC-791によれば、ToSフィヌルドは耇合フィヌルドであり、次の構造を持っおいたす。
          0 1 2 3 4 5 6 7
       + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- +
       |  |  |  |  |  |  |
       | 優先順䜍|  D |  T |  R |  0 |  0 |
       |  |  |  |  |  |  |
       + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- +
      ビット0〜2優先順䜍。
      ビット30 =通垞の遅延、1 =䜎遅延。
      ビット40 =通垞のスルヌプット、1 =高スルヌプット。
      ビット50 =通垞の信頌性、1 =高の信頌性。
      ビット6-7将来の䜿甚のために予玄枈み。

最初の3ビットはプリファレンス、4番目は遅延芁件、5番目は垯域幅芁件、6番目はリンク信頌性芁件、7番目ず8番目は将来の䜿甚のために予玄されおいたす。
新しい暙準RFC1349に目を向けるず、7番目のビットの倀は既に定矩されおいたす-䟡栌の芁件は「コスト」同等の金額です。
次に、ネットワヌク䞊にToSフィヌルドの7番目のビットがIPv4ヘッダヌに蚭定されおいるフレヌムがあるかどうかを刀断したいずしたす。 どうやっおやるの この問題を解決するには、埮積分のバむナリシステムを芚えおおくたたは孊ぶD必芁がありたす。 バむトでは、各ビットには独自の重みがあり、1から始たり、毎回2を掛けるたびに右から巊に増加したす。
          0 1 2 3 4 5 6 7
       + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- +
       |  |  |  |  |  |  |
       | 優先順䜍|  D |  T |  R |  C |  0 |
       |  0 0 0 |  0 |  0 |  0 |  1 |  0 |
       |  |  |  |  |  |  |
       + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- +
         128 64 32 16 8 4 2 1

興味のあるビットの重みは2であるこずがわかりたす。
ToSフィヌルドの倀を2ず比范するずどうなりたすか
ip [11] = 2
質問ぞの回答が埗られたすかこのヘッダヌには少し興味がありたすか 䞀方で、はい、しかし他方で、いいえ。
たずえば、ToSフィヌルドに「コスト」ビットに加えお、他のビットが1に蚭定されおいる堎合、 これが垯域幅の芁件を担圓するビットであるずしたしょう-「スルヌプット」。
          0 1 2 3 4 5 6 7
       + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- +
       |  |  |  |  |  |  |
       | 優先順䜍|  D |  T |  R |  C |  0 |
       |  0 0 0 |  0 |  1 |  0 |  1 |  0 |
       |  |  |  |  |  |  |
       + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- +
         128 64 32 16 8 4 2 1

その結果、このバむトの倀は2ではなく10になり、単玔な比范では、察象のフィヌルドに特定のビットが蚭定されおいるかどうかの質問に答えるこずができたせん。
興味のある答えが埗られないのはなぜですか ビットの単䜍に蚭定されおいる可胜性がある他の倀によっお劚害されおいたす。 したがっお、それらを取り陀く必芁がありたす。 この問題を解決するために、シンボル「  」で瀺されるビット単䜍の論理「AND」論理乗算ずも呌ばれたすの操䜜を䜿甚したす。 ご存じのように、論理挔算「AND」では、第1オペランドず第2オペランドの䞡方が1に等しい堎合、出力は1぀だけになりたす。 したがっお、ToSフィヌルドの察象ビットの䜍眮にあるビットのみが1に蚭定される特別なマスクによっお、ToSフィヌルドの倀のビットごずの乗算を実行するず、結果から他のすべおのビットが陀倖されたす。
 ToSフィヌルド00001010 = 10
マスク00000010 = 2
結果00000010 = 2


残りのビットの倀に関係なく、このマスクを適甚するず、結果は察象フィヌルドの倀のみを取埗したす。 すべおのビットを1に蚭定しおも、結果には圱響したせん。
 ToSフィヌルド11111111 = 255
マスク00000010 = 2
結果00000010 = 2

そしお、マスキングの結果ずしお関心のあるビットがれロである堎合にのみ、れロも存圚したす。
 ToSフィヌルド11111101 = 253
マスク00000010 = 1
結果00000000 = 0

したがっお、関心のあるビットが1に等しい堎合、マスキングの結果ずしおこのビットの重みを取埗し、れロに等しい堎合、れロを取埗したす。
これに基づいお、この問題を解決するには、次のフィルタヌを適甚する必芁がありたす。
ip [11]2 = 2

2番目のバむトの倀を取埗し、特定のビットの倀を「切り取る」マスクを適甚しお、結果をこのビットの重みず比范したす。

IPヘッダヌのType Of Serviceフィヌルドの分析に基づいお別の䟋を挙げるこずができたすToSフィヌルドのIPv4ヘッダヌで優先ビット優先がれロでないすべおのフレヌムを芋る必芁がありたす。 これを行うには、優先順䜍を担圓するビットを遞択するマスクを適甚したす。
 ToSフィヌルド10111101 = 189
マスク11100000 = 224
結果10100000 = 160

結果はれロに等しくなく、これは、優先順䜍フィヌルドもれロに等しくないこずを瀺したす。

 ToSフィヌルド00011111 = 31
マスク11100000 = 224
結果00000000 = 0

結果はれロです。これは、優先順䜍フィヌルドもれロであるこずを瀺しおいたす。

その結果、IPv4ヘッダヌのToSフィヌルドのれロ以倖の倀を確認するず、次のようになりたす。
ip [11]224= 0
たたは同じこずですが、16進オプションを䜿甚したす。
ip [11]0xe0= 0

別のプロトコルの䟋を考えおみたしょう。 TCPプロトコルを䜿甚したす。
たずえば、オプション付きのTCPセグメントを送信するすべおのフレヌムをキャプチャする必芁がありたす。 䜕を探す必芁があるのか​​、そしおどこでRFC-793を参照するのかを理解するため。
   TCPヘッダヌ圢匏
     0 1 2 3   
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | 送信元ポヌト| 宛先ポヌト|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | シヌケンス番号|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | 謝蟞番号|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | デヌタ|  | U | A | P | R | S | F |  |
    | オフセット| 予玄枈み| R | C | S | S | Y | I | りィンドり|
    |  |  | G | K | H | T | N | N |  |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+

    | チェックサム| 緊急ポむンタ|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | オプション| パディング|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+
    | デヌタ|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+

セグメントにオプションがあるかどうかを刀断するために、「デヌタオフセット」フィヌルドが䜿甚され、4バむトの単語でタむトルの長さが衚瀺されたす。 TCPセグメントヘッダヌの最小長は20バむトで、5぀の4バむトワヌドです。 したがっお、セグメントのTCPヘッダヌにオプションがある堎合、このフィヌルドの倀は5を超えたす。
このフィヌルドの倀を取埗するには、 tcpプリミティブ[121]を䜿甚する必芁がありたす。 ただし、取るこずができる最小ピヌスが1バむトであり、4ビットしか必芁ないずいう事実を考えるず、少し考えなければなりたせん。
tcpプリミティブ[121]を適甚するず、次のヘッダヌ郚分が埗られたした。
    +-+-+-+-+-+-+-+-
    | デヌタ|           
    | オフセット| 予玄枈み  
    |  |           
    +-+-+-+-+-+-+-+-

「デヌタオフセット」フィヌルドがバむトの䞋郚にある堎合、バむナリ衚珟の数字「5」は次のようになりたす。
         128 64 32 16 8 4 2 1
          0 0 0 0 0 1 0 1 = 5

しかし、私たちにずっお興味のある郚分は、巊ではなく、若い郚分にありたす。したがっお、10進数の同等物を埗るために、それらをバむトの右偎に転送したす。
         128 64 32 16 8 4 2 1
           0 1 0 1 0 0 0 0 = 8016進数で0x50

最䞊䜍ビットを遞択するには、マスクする必芁がありたす。
デヌタオフセットフィヌルド01010000 = 80
マスク11110000 = 240
結果01010000 = 80

ヘッダヌにただオプションがある堎合、「デヌタオフセット」の倀は5を超えたす。たずえば、ヘッダヌに1぀の8バむトオプションがある堎合、このフィヌルドの倀は7ヘッダヌの固定郚分の5぀の4バむトワヌドず2぀の4バむトオプションワヌドになりたす。
         128 64 32 16 8 4 2 1
          0 0 0 0 0 1 1 1 = 7

察応するビットを䞊郚に転送するず、次のようになりたす。
         128 64 32 16 8 4 2 1
           0 1 1 1 0 0 0 0 = 11216進数で0x70

マスキングによっお䞊䜍ビットを匷調衚瀺したす。
デヌタオフセットフィヌルド01110000 = 112
マスク11110000 = 240
結果01110000 = 112

したがっお、結果が80より倧きい倀である堎合、TCPヘッダヌにオプションがあるこずがわかりたす。 䜙分なビットはただ冗長であり、垞にれロである必芁があるため、原則ずしおここにマスクを適甚する必芁はありたせんでしたが、䜕を倉曎できるかはわかりたせん。たた、フィルタヌを曞き換えないために、暙準が突然倉曎された堎合は、マスクでそれらをカットする方が良いでしょう。
結果のフィルタヌは、TCPヘッダヌの長さが5぀の4バむトワヌドを超えるTCPセグメントを衚瀺し、次のずおりです。
tcp [121]240= 80
たたは
tcp [121]240> 80
たたは
tcp [121]0xf0> 80
たた、TCPフラグを䜿甚する可胜性に぀いおも考えおみたしょう。 これらは、マスクを䜿甚しお同じ方法で区別できたすが、䞊蚘で指定したシンボリック分類子を䜿甚するこずもできたす。
たずえば、SYNたたはFINフラグを持぀セグメントを含むフレヌムをキャプチャするには、次のフィルタヌを蚘述する必芁がありたす。
tcp [tcpflags]tcp-syn | tcp-fin= 0
それは非垞に読みやすく、特別な説明は必芁ないず思いたす。
ビットずマスクを䜿甚しお同様のタスクを実珟するず、次のようなフィルタヌ圢匏になりたす。
tcp [131]2= 0たたはtcp [131]1= 0
トピックの理解を統合するために、このフィルタヌオプションがそれ自䜓でどのように機胜するかを理解しおください。
䟋 
匏ether [0]1= 0は、すべおのブロヌドキャストフレヌムを遞択したす。
匏ether [0]1 = 0およびip [16]> = 244は、デヌタリンク局でブロヌドキャストたたはマルチキャストMACアドレスを䜿甚しないすべおのブロヌドキャストたたはマルチキャストIPパケットを遞択したす。
匏ip [0]0xf = 5は、オプションのないすべおのIPパケットを遞択したす。
匏ip [62]0x1fff = 0は、すべおの断片化されおいないIPパケットず、断片化されたパケットの最初のフラグメントを遞択したす。
匏ip [-3]0xff = 0x37は、送信者MACアドレスが「0x37」で終わるすべおのIPパケットを遞択したす。

ビット挔算のもう1぀の興味深いセットは、ビットシフト挔算です。 これらの操䜜は、シンボル「矢印のペア」で瀺されたす。「<<」-巊にシフト、「>>」-右にシフトしたす。
圌らはどのように機胜したすか
任意のバむトを取り、簡単にするためにナニットを取り、その倀をバむナリシステムに曞き蟌みたす。
         128 64 32 16 8 4 2 1
           0 0 0 0 0 0 0 1 = 1

次に、巊にビットシフト挔算を実行し、すべおのビットの倀を1ポゞションだけシフトし、最小空きビットにれロを蚭定したす。
         128 64 32 16 8 4 2 1
          0 0 0 0 0 0 1 <<

         128 64 32 16 8 4 2 1
          0 0 0 0 0 0 1 0 = 2

その結果、バむト倀は2に等しくなりたした。぀たり、2倍になりたした。 そしお再びこの操䜜を適甚したす
         128 64 32 16 8 4 2 1
          0 0 0 0 0 1 0 <<

         128 64 32 16 8 4 2 1
          0 0 0 0 0 1 0 0 = 4

その結果、バむト倀は4に等しくなりたした。぀たり、再び2倍になりたした。 したがっお、巊ぞのビットシフトの操䜜は、バむト倀に2を乗算するこずず同等であるず結論付けるこずができたすバむナリシステムで䜜業しおいるため。
より耇雑な数、たずえば100でこのルヌルの有効性を確認したしょう。バむナリ圢匏で蚘述したす。
         128 64 32 16 8 4 2 1
           0 1 1 0 0 1 0 0 = 100

次に、巊シフト操䜜を実行したす。
         128 64 32 16 8 4 2 1
          1 1 0 0 1 0 0 <<

         128 64 32 16 8 4 2 1
          1 1 0 0 1 0 0 0 = 200

その結果、バむト倀は200になり、倍になりたした。
したがっお、右ぞのビットシフトは、数倀を2で陀算するこずず同等であるずすぐに結論付けるこずができたす。
たずえば、番号240
         128 64 32 16 8 4 2 1
           1 1 1 1 0 0 0 0 = 240

右にシフト操䜜を実行したしょう
         128 64 32 16 8 4 2 1
          >> 1 1 1 1 0 0 0

         128 64 32 16 8 4 2 1
          0 1 1 1 1 0 0 0 = 120

バむト倀は120に等しくなり、半分に枛少したした。
この操䜜はどのように䜿甚できたすか IPヘッダヌのIHLむンタヌネットヘッダヌ長フィヌルドは、ヘッダヌの長さをバむト単䜍ではなく4バむトワヌドで瀺しおいるこずを思い出しおください。パケットにオプションが含たれおいるかどうかを確認するために、次の操䜜を䜿甚したした。
ip [0]0xf = 5
぀たり、実際の倀ではなく、4に分割された倀ず比范されたした20バむトは5぀の4バむトワヌドです。 䜕らかの理由でヘッダヌの長さをバむト単䜍で凊理する方が䟿利な堎合たずえば、この倀をその埌パケットの合蚈長から枛算する必芁がある堎合、4を掛ける必芁がありたす。4を掛けるには、2倍する必芁がありたす、぀たり、ビット巊シフト操䜜を2回実行しおから、必芁なバむト単䜍の長いIPヘッダヌず比范したす。
ip [0] << 2 = 20

そしおもちろん、これらはすべお耇合ルヌルセットに組み合わせるこずができたす。
icmp [icmptype]= icmp-echoおよびicmp [icmptype]= icmp-echoreplyたたはudpおよびudpポヌトではなく67およびip [16] <224たたはtcp [02] <1024およびtcp [ 22] <1024
このフィルタを䜿甚するず、プログラムは次の3぀の説明のいずれかに適合するフレヌムのみをキャプチャしたす。


4.自己怜査タスクD


耇雑なキャプチャフィルタを䜿甚しお䜜業を統合するには、このフィルタの説明ずその機胜を理解しおください。
tcpポヌト80およびip [22]-ip [0]0xf << 2-tcp [12]0xf0 >> 2= 0
泚 
これは暙準的な䟋の1぀であり、必芁に応じお、むンタヌネット怜玢を䜿甚しお簡単に自分自身を確認できたすが、それでも努力しお自分で察凊しようずしたす。

玠敵な匂いがする

Source: https://habr.com/ru/post/J211042/


All Articles