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 중국어 웹사이트의 기타 관련 기사를 참조하세요!