문제

C#에 Bootp 서버를 작성하려고합니다.

클라이언트로부터 BOOTP 패킷을 받고 구문 분석하고 있으며 서버 IP 주소로 답장해야합니다.

문제는:

  • 컴퓨터에는 여러 네트워크 어댑터가있을 수 있습니다
  • 클라이언트에는 아직 IP 주소가 없습니다

UDP 패킷이 어떤 어댑터에 수신되었는지 알아낼 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

이를 수행하는 몇 가지 가능한 방법이 있습니다. 각 물리적 인터페이스의 각 IP에서 별도의 소켓을 바인딩하면 패킷이 도착한 인터페이스를 항상 알 수 있습니다. Windows에서 지원되는지 모르겠지만 RecVMSG 소켓 기능과 함께 IP_RECVIF 플래그를 사용해 볼 수도 있습니다. Steven 's에는 UNIX 네트워크 프로그래밍 섹션 22.2 및 22.6의 예가 있습니다. ioctl과 함께 siocgifconf 플래그를 사용하여 컴퓨터의 인터페이스 목록을 얻을 수 있습니다. UNP 섹션 17.6에는 예제 프로그램이 있습니다. C#이 이러한 기능에 액세스하지 못하지만 Windows에서 지원되는 경우 간단한 C 프로그램을 작성하여 인터페이스 / IP 정보를 수집하고 업데이트 한 다음 MMAP를 사용하여 C# 프로그램과 인터페이스 열거 자 사이에 메모리 영역을 공유 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top