0

Linux 上のホストから発信される着信および発信 icmpv6 パケットをキャプチャしようとしています。私はそれを行うために次のプログラムを書きました。このプログラムでは、送信パケットではなく受信パケットをトラップできます。トラッピングは icmpv4 パケット (コードのコメント部分) では正常に機能しますが、icmpv6 パケットでは問題になります。以下で使用した方法と比較して、少し煩わしいパケット フィルタリング (バークレー パケット フィルター) メカニズムの使用には興味がありません。これを行うために使用できる何か他のものがあれば教えてもらえますか?それとも、Linux はこれを行うための他のメカニズムを提供していますか?

int main(int argc,char *argv[])
{
    char buf[500];
    struct icmp6_hdr *icmpv6_hdr;
    int  raw_socket = socket(AF_INET, SOCK_RAW,IPPROTO_ICMPV6);
    //int  raw_socket = socket(AF_INET, SOCK_RAW,IPPROTO_ICMP);
    if(raw_socket <=0)
    {
        perror("Could not create raw socket");
        exit(1);
    }
    while(1)
    {
        if(recvfrom(raw_socket, buf, 500, 0,NULL,NULL)<0)
        {
            perror("error in recvfrom");
            break;
        }
        else
        {
            icmpv6_hdr = (struct icmp6_hdr *)buf;
            switch(icmpv6_hdr->icmp6_type)
            {
                case ND_ROUTER_SOLICIT:
                    printf("ND_ROUTER_SOLICIT");
                    break;
                case ND_ROUTER_ADVERT:
                    printf("ND_ROUTER_ADVERT");
                    break;
                case ND_NEIGHBOR_SOLICIT:
                    printf("ND_NEIGHBOR_SOLICIT");
                    break;
                case ND_NEIGHBOR_ADVERT:
                    printf("ND_NEIGHBOR_ADVERT");
                    break;
                default:
                    printf("icmpv6_type:%x\n",icmpv6_hdr->icmp6_type);
            }
        }
    }
    return 0;
}
4

2 に答える 2

0

ええと、私はICMPv6についてしか知りません。ICMPv6にはICMPv4よりもはるかに多くのメッセージが含まれているため、フィルターsockoptが作成されます。詳細については、対応するRFCを参照してください。

https://www.rfc-editor.org/rfc/rfc2292#section-3.2

それはすべてそこにあります。基本的に、構造があり、いくつかのマクロでフィルターマスクを定義し、ソケットオプションを設定します。もちろん、これはIPv6でのみ機能します。

また、次のようなソケットを作成します:socket(AF_INET6、SOCK_RAW、IPPROTO_ICMPV6)

于 2013-02-15T12:56:59.850 に答える
0

PCAP と呼ばれる NIC を通過するネットワーク トラフィックをキャプチャするためのライブラリがあります。icmpv6 に一致するように構成できる内部フィルターがあります。これは、Wireshark と tcpdump がトラフィックを傍受するために使用するライブラリです。http://www.tcpdump.org/pcap.html

「押しつけがましく」なりたくない場合は、プロミスキャス モードを無効にしてください。

于 2012-02-17T05:38:32.350 に答える