>백엔드 개발 >Golang >s3 파일을 사용하여 gopacket의 packetSource 생성

s3 파일을 사용하여 gopacket의 packetSource 생성

王林
王林앞으로
2024-02-05 22:42:041045검색

使用 s3 文件创建 gopacket 的 packetSource

질문 내용

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
}

정답


Try 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,解决方法是创建一个管道,并将 r 文件传递​​给pcap.openofflinefile 지원되지 않고 github.com/google/gopacket/pcap을 사용해야 하는 경우 해결 방법은 파이프를 만들고 r 파일을 전달하는 것입니다. ​​pcap.openofflinefile에:

으아아아

Notes:

  1. 이 내용은 Linux에서만 테스트되었습니다. 하지만 Windows에서는 작동해야 합니다.
  2. github.com/google/gopacket/pcaplibpcap(或 windows 上的 winpcapnpcap)的包装器。这就是为什么使用 []byteio.reader 좀 복잡해요.
  3. s3에서 파일을 다운로드할 때 클라이언트는 리더를 제공해야 합니다. 리더를 직접 사용할 수 있습니다(내 데모의 설명 참조). 독자의 내용을 직접 읽지 마십시오.

위 내용은 s3 파일을 사용하여 gopacket의 packetSource 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제