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
パッケージがこのファイル形式をサポートしている場合は、簡単なので使用を検討してください。
リーリー
を
github.com/google/gopacket/pcap
で使用します
がファイル形式をサポートしておらず、github.com/google/gopacket/pcap
を使用する必要がある場合、解決策は1 つのパイプを作成し、r
ファイルを pcap.openofflinefile
に渡します:
リーリー
:
これは Linux でのみテストされました。ただし、Windows では動作するはずです。libpcap
(Windows では winpcap
または npcap
) のラッパーです。そのため、[]byte
または io.reader
の使用は少し複雑です。
s3 からファイルをダウンロードする場合、クライアントはリーダーを提供する必要があります。リーダーを直接使用することもできます (私のデモのコメントを参照してください)。読者のコンテンツを自分で読むことは避けてください。 以上がs3 ファイルを使用して gopacket の packetSource を作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。