모든 인터페이스에서 로컬 응용 프로그램의 연결을 허용하는 작은 소켓 서버 프록시 응용 프로그램을 작성해야합니다 (소켓은 0.0.0.0에 바인딩되어야 함).모든 인터페이스에서 로컬 클라이언트의 소켓을 허용합니다. rejcct 원격 클라이언트
나는 이것을 달성하는 방법을 모르고있다. (필자는 127.0.0.1에 대한 바인딩을 막는 추가적인 요구 사항이있다.) (s.src_addr 경우
바인드 (0.0.0.0) ... 의의 = 수락() 이 ... 가 // 원격 연결 를 거부 :
이에서의 첫 번째 시도는이 다음을 수행 하지 닫기) local_interfaces에서() ... // 지역 conenction
이 구현은 원격 응용 프로그램에 부작용이 정상적으로 진행 - 사람들은/동의 가까운 조합을 참조하십시오. 이 시스템은 원격 응용 프로그램이 "아무것도 없다"고 인식하도록 행동해야합니다 : -> SYN < --RST/ACK
을 내가 SO_CONDITIONAL_ACCEPT의 윈속 API의 조합을 사용하는이 동작하고 WSAAccept 콜백 (구현하려면 LPCONDITIONPROC lpfnCondition)을 사용하여 원래 인터페이스를 기반으로 연결을 수락하거나 거부합니다 (즉, 로컬 주소 중 하나인지 여부).
이렇게하면 원하는 기능 동작이 발생합니다. 로컬 응용 프로그램이 작동합니다. 원격 응용 프로그램에 필요한 WSAECONNREFUSED 오류가 발생합니다.
SO_CONDITIONAL_ACCEPT에는 특정 부작용이 있지만 더 중요한 것은 LINUX 구현이 필요하며 나중에 다른 UNIX로 이식해야 할 수도 있다는 것입니다.
내 우선 순위는 LINUX 솔루션입니다. 그것이 소켓 API를 뛰어 넘을 경우 기꺼이 할 수 있습니다.
저는 갑자기 배포 지침에 방화벽을 지정하지 않았습니다.엔터프라이즈 환경의 클라이언트 시스템에서 작동하려면이 작업이 필요하며 이러한 접근 방식을 요구할 수는 없습니다. –