Go에서 원시 소켓 사용: DHCP 검색 전달
GIADDR을 기반으로 하는 사용자 정의 소스 IP 주소로 DHCP 검색을 수정하려는 시도 필드에서 개발자는 로컬로 구성되지 않은 IP 주소를 사용하는 데 어려움을 겪었습니다. 이런 질문이 생깁니다.
원시 소켓을 사용해서만 이를 달성할 수 있습니까?
답변:
소스 수정 IP 주소에는 보안 고려 사항으로 인해 특정 기능이 필요합니다. 이러한 제한을 극복하기 위해 원시 소켓을 활용할 수 있습니다.
Go의 원시 소켓 라이브러리:
Go의 표준 Net 라이브러리는 원시 소켓 지원을 제공하지 않지만 go.net은 하위 저장소는 ipv4 및 ipv6 패키지를 모두 제공합니다. ipv4 패키지, 특히 NewRawConn 기능이 이 시나리오에 적합합니다.
패킷 조작:
패킷 헤더를 읽고 수정하려면 ipv4.RawConn의 ReadFrom 메소드 채용될 수 있습니다. 추출된 필드와 GIADDR 로직을 사용하여 WriteTo 호출을 시작하기 전에 헤더를 업데이트해야 합니다.
예:
<code class="go">for { hdr, payload, _, err := conn.ReadFrom(buf) if err != nil { ... } hdr.ID = 0 hdr.Checksum = 0 hdr.Src = ... hdr.Dst = ... if err := conn.WriteTo(hdr, payload, nil); err != nil { ... } }</code>
이 접근 방식을 사용하면 소스 IP 주소를 수정할 수 있습니다. DHCP 패킷의 특정 조건에 따라 달라집니다.
위 내용은 Go의 원시 소켓이 사용자 정의 소스 IP로 DHCP 검색을 수정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!