s3 클라이언트에서 pcap 파일을 얻을 때, 그 안의 패킷을 읽으려면 gopacket의 패킷 소스를 생성해야 합니다. 하지만 gopacket 문서에서 openofflinefile 함수만 찾았습니다. 어떻게 []byte(s3 파일에서 읽기)로 패킷 소스를 생성할 수 있나요?
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.pipe
与 github.com/google/gopacket/pcap
사용파일 형식이 github.com/google/gopacket/pcapgo
不支持该文件格式,而我们必须使用 github.com/google/gopacket/pcap
,解决方法是创建一个管道,并将 r
文件传递给pcap.openofflinefile
지원되지 않고 github.com/google/gopacket/pcap
을 사용해야 하는 경우 해결 방법은 파이프를 만들고 r
파일을 전달하는 것입니다. pcap.openofflinefile
에:
Notes:
github.com/google/gopacket/pcap
是 libpcap
(或 windows 上的 winpcap
或 npcap
)的包装器。这就是为什么使用 []byte
或 io.reader
좀 복잡해요. 위 내용은 s3 파일을 사용하여 gopacket의 packetSource 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!