Go에서 사용자 정의 TCP 패킷을 작성하고 \'잘못된 src IP 127.0.0.1\' 패닉을 방지하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-24 11:04:10
원래의
811명이 탐색했습니다.

How to Craft Custom TCP Packets in Go and Avoid the

gopacket을 사용하여 Go에서 원시 TCP 패킷 구성

gopacket을 사용하여 사용자 정의 TCP 패킷을 제작하고 원시 소켓을 통해 전송하는 것이 목표입니다. 그러나 제공된 코드에 문제가 발생하여 "invalid src IP 127.0.0.1."

Crafting Custom IPv4 Packets

예제 또한 귀하가 제공한 코드는 TCP 레이어만 처리하는 것과는 별개의 문제인 사용자 지정 IP 레이어 3 헤더를 만드는 것을 목표로 합니다. 자세한 설명은 다음과 같습니다.

Go에서 원시 소켓 생성

몇 가지 가정과 달리 Go에서 원시 소켓을 생성하는 것은 net.ListenPacket, net.DialIP를 사용하여 가능합니다. , 또는 net.ListenIP:

conn, err := net.ListenIP("ip4:tcp", netaddr)
로그인 후 복사

IP 설정 소켓 옵션

자체 IPv4 레이어 3 헤더를 설정하려면 IP_HDRINCL이라는 소켓 옵션을 활성화해야 합니다. 이는 Core Go 패키지에서는 지원되지 않지만 ipv4와 같은 타사 라이브러리는 이 기능을 제공할 수 있습니다.

conn, err := ipv4.NewRawConn(network, addr)
로그인 후 복사

이 기능은 원시 연결을 설정하고 IPv4용 IP_HDRINCL을 활성화합니다.

대안

TCP 헤더 조작, 대기 시간 코드가 적합할 수 있습니다:

// Create a raw socket
fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_TCP)
로그인 후 복사

그러나 이 접근 방식은 IPv4 헤더 수정을 허용하지 않습니다.

권장 사항

제공된 코드로 문제를 해결하려면 다음과 같은 라이브러리를 사용해야 합니다. ipv4 IP_HDRINCL을 활성화하고 사용자 정의 IP 헤더를 설정합니다. 또는 TCP 헤더 조작에 대한 단순화된 접근 방식을 위해 latency 패키지를 탐색할 수 있습니다.

위 내용은 Go에서 사용자 정의 TCP 패킷을 작성하고 \'잘못된 src IP 127.0.0.1\' 패닉을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿