2010-01-29 2 views
2

클라이언트가 열린 포트을 가지고 있는지 확인하는 가장 좋은 방법은 무엇입니까? 이 올바르게 전달 된 경우?클라이언트 포트가 열려 있고 전달되는지 확인하십시오. [C#, ASP.NET]

이 앱이 현재처럼 작동 :

  1. 클라이언트가 들어오는 연결을위한 소켓을 생성하고 자신의 오픈 포트에 대한 모든 통지를 원한다. 클라이언트는 또한 UPnP를 사용하여 포트 전달을 설정하려고 시도하지만 (항상 존재하지는 않고 활성화 된 것은 아닙니다).
  2. 클라이언트는 자신의 포트를 알려진 "중앙"서버로 보냅니다.
  3. 서버는 포트가 열려 있는지 (올바르게 전달되었는지) 확인하고 상태를 반환해야합니다.
  4. 전달 문제가있는 경우 클라이언트는 사용자에게 알립니다.

목표는 서버에 저장된 IP + 포트 정보를 다른 클라이언트에게 제공하는 것입니다. 나는 서버에서 클라이언트로 Socket을 열려고 시도 할 수 있었고 실패했는지를 알 수 있었지만, 더 쉬운 (더 빠른) 방법이 있습니까? http://www.canyouseeme.org/

+0

"핑 (ping)"이라는 용어는 여기에서 약간 혼란 스러울 수 있습니다. ping에는 TCP가 아닌 ICMP 패킷이 포함되므로 특정 포트에 대해 ping을 수행 할 수 없습니다. 그들은 포트 번호 개념이 없습니다. – Thorarin

+0

올바른 단어 선택이 아닙니다. – Groo

답변

1

아니, 거기되지 않습니다 :

예를 들어,이 사이트는 그런 일을한다.
연결을 설정할 수 있는지 확인하려면 연결을 시도해야합니다. Socket을 사용하면이를 수행하는 합리적인 방법입니다.

컴퓨터에 공용 IP 주소 또는 로컬 IP 주소가 있는지 확인하여 일부 클라이언트의 경우이 단계를 건너 뛸 수 있습니다. 하지만 회사 방화벽과 같은 일이 발생할 가능성이 있기 때문에 연결을 열려고하는 것이 가장 안전한 방법입니다.

ICMP는 포트 번호 개념이없는 TCP (또는 UDP)와는 다른 프로토콜이기 때문에 ICMP 에코 요청 (ping)은 옵션이 아닙니다. 핑 (ping)은 IP 주소에 도달 할 수 있는지를 결정하는 데 사용할 수 있지만 이는 귀하의 경우에는 가치가 없습니다.

+0

그러면 어떻게 작동합니까? http://www.canyouseeme.org/? – Groo

+0

@Groo : 설명대로 소켓을 열려고 시도합니까? – Thorarin

+0

오, 오케이, 나는 그것이 가능하지 않다고 말했다. ;) 좋아, 이것은 실제로 문제가 아니며, ping과 같은 것이 가능할 수 있다고 생각했다. – Groo

관련 문제