2009-04-12 4 views
0

조건부로 연결을 허용 할 수있는 Socket 또는 ListenSocket 메서드가없는 것 같습니다..NET : 조건부 Socket.Accept

SYN을 수신하면 SYN/ACK (연결 허용) 또는 RST (강제 거부)를 보내면 원본에 따라이 연결을 원하는지 여부를 결정할 수 있습니다.

이 작업을 수행하고 싶습니까? 불행히도, 나는 수락 후에 연결을 즉각적으로 닫을 수는 없으며 전혀 열리지 않아야합니다. 또한 RAW 소켓으로 작업하지 않아도됩니다.

답변

1

불행히도 이것은 불가능합니다. TCP 소켓 연결을 조건부로 수락 할 수있는 방법은 없습니다. 연결이 확립 된 후에 만 ​​연결을 필터링 할 수 있습니다.

하지만 정확히 필터링하려고합니까? SYN 패킷을받는 순간, 소스의 IP 주소와 연결하려는 포트가 알 수 있습니다. 방화벽을 사용하여이 데이터를 기반으로 필터링하는 것이 훨씬 더 나은 것처럼 보입니다. 나는 이것이 당신의 앱을 통해 제어되지 않는다는 것을 알고 있지만, 고려해야 할 대안이다.

+0

이 프로토콜은 TCP를 통한 사용자 지정 프로토콜의 중계 서비스입니다. 원격 연결을 설정할 수없는 경우 로컬 연결을 거부하기 시작해야합니다. 또한 일부 방화벽 기능도 내장되어 있습니다. –

0

RAW 모드에 들어 가지 않으면 불가능한 것 같습니다. 소켓이 Winsock의 수신 대기 모드로 들어가면 Socket.Accept가 호출되기 전이라도 무엇이든 허용됩니다.

이 기능을 원하면 RAW 모드를 사용해야하며 패킷을 자체 TCP 스택으로 구문 분석해야합니다.

0

스크래치도 마찬가지입니다. Windows XP SP2 이상에서는 RAW 소켓을 통해 TCP 패킷을 보낼 수 없습니다. 자세한 내용은 here을 참조하십시오.