ホームページ > バックエンド開発 > Golang > s3 ファイルを使用して gopacket の packetSource を作成する

s3 ファイルを使用して gopacket の packetSource を作成する

王林
リリース: 2024-02-05 22:42:04
転載
1037 人が閲覧しました

使用 s3 文件创建 gopacket 的 packetSource

質問内容

s3クライアントからpcapファイルを取得する際、その中のパケットを読み込むためにgopacketのpacketsourceを生成する必要があります。しかし、gopacketのドキュメントでopenofflinefile関数しか見つけられませんでしたが、[]byte(s3ファイルから読み取る)でpacketsourceを生成するにはどうすればよいですか。

gopacket の openofflinefile 関数のソース コードを読みましたが、uintptr に慣れていないためまだ混乱しています。[]byte で Unitptr を直接生成し、それを使用して packetsource を生成できますか?

func openOffline(file string) (handle *Handle, err error) {
    err = LoadWinPCAP()
    if err != nil {
        return nil, err
    }

    buf := make([]byte, errorBufferSize)
    f, err := syscall.BytePtrFromString(file)
    if err != nil {
        return nil, err
    }

    var cptr uintptr
    if pcapOpenOfflineWithTstampPrecisionPtr == 0 {
        cptr, _, _ = syscall.Syscall(pcapOpenOfflinePtr, 2, uintptr(unsafe.Pointer(f)), uintptr(unsafe.Pointer(&buf[0])), 0)
    } else {
        cptr, _, _ = syscall.Syscall(pcapOpenOfflineWithTstampPrecisionPtr, 3, uintptr(unsafe.Pointer(f)), uintptr(pcapTstampPrecisionNano), uintptr(unsafe.Pointer(&buf[0])))
    }

    if cptr == 0 {
        return nil, errors.New(byteSliceToString(buf))
    }

    h := &Handle{cptr: pcapTPtr(cptr)}
    return h, nil
}
ログイン後にコピー

正解


試してください github.com/google/gopacket/pcapgo

github.com/google/gopacket/pcapgo パッケージがこのファイル形式をサポートしている場合は、簡単なので使用を検討してください。 リーリー

os.pipegithub.com/google/gopacket/pcap で使用します

github.com/google/gopacket/pcapgo

がファイル形式をサポートしておらず、github.com/google/gopacket/pcap を使用する必要がある場合、解決策は1 つのパイプを作成し、r ファイルを pcap.openofflinefile に渡します: リーリー

コメント

:

これは Linux でのみテストされました。ただし、Windows では動作するはずです。
  1. github.com/google/gopacket/pcap
  2. は、 libpcap (Windows では winpcap または npcap) のラッパーです。そのため、[]byte または io.reader の使用は少し複雑です。 s3 からファイルをダウンロードする場合、クライアントはリーダーを提供する必要があります。リーダーを直接使用することもできます (私のデモのコメントを参照してください)。読者のコンテンツを自分で読むことは避けてください。

以上がs3 ファイルを使用して gopacket の packetSource を作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート