UDP 포트 연결 테스트


37

UDP를 통해 원격 서버의 특정 포트에 액세스 할 수 있는지 테스트하려고합니다.

두 서버 모두 인터넷에 연결되어 있습니다. netcat을 사용하여 특정 포트 청취를하고 있습니다.

그런 다음 nmap을 사용하여 해당 포트가 열려 있는지 확인하지만 포트가 열려 있지 않은지 확인합니다.

IP 테이블이 꺼져 있습니다.

이것이 왜 가능한지 제안? 결국 VPN 터널을 설정하려고하지만 터널을 처음 사용하기 때문에 포트 UDP 1194에 연결되어 있는지 확인하고 싶습니다.


"UDP 포트 연결 테스트"질문에 응답했습니다. 그러나 OpenVPN 로그를 보면 쉽게 얻을 수있는보다 구체적인 "OpenVPN이 UDP 패킷을 수신하는지 확인"하는 부분에 집중하는 것이 좋습니다.
Luke404

답변:


46

"오픈"UDP 포트는 없습니다. 적어도 대부분의 사람들이 생각하는 데 익숙하지는 않습니다 ( "확인, 연결을 수락했습니다"와 같은 것에 응답합니다). UDP는 세션이 없으므로 "포트"(읽기 : 운영 체제 IP 스택의 UDP 프로토콜)는 자체적으로 "성공"하지 않습니다.

UDP 포트는 두 가지 상태, 즉 수신 또는 수신 거부 만 있습니다. 일반적으로 "프로세스에 의해 소켓이 열린 상태"또는 "소켓이 열려 있지 않은"상태로 변환됩니다. 후자는 시스템이 코드 = 3 (포트에 도달 할 수 없음) 인 ICMP Destination Unreachable 패킷으로 응답해야하기 때문에 쉽게 탐지 할 수 있어야합니다 . 불행히도 많은 방화벽이 이러한 패킷을 제거 할 수 있으므로 아무 것도받지 못하면 포트가이 상태에 있는지 확실하지 않습니다. ICMP도 세션이없고 재전송을하지 않는다는 것을 잊지 마십시오. 포트 연결 불가 패킷은 네트워크 어딘가에서 손실 될 수 있습니다.

은 "듣기"상태의 UDP 포트 수도 있고 프로세스가 수신시 행동 않는 경우가 (뭔가 다시 보낼 수있는 모든 (그냥 패킷을 수신 및 전송 아무것도하지 않습니다에 프로세스 청취)에서하지 응답 가에 의해 작용하는 경우 UDP를 통해 원래 발신자 IP : 포트에 응답). 다시 말하지만, 당신이 아무것도 얻지 못하면 상태가 무엇인지 확실하게 알 수 없습니다.

수신 호스트를 제어 할 수 있다고 말합니다 .UDP 포트 도달 가능성을 확인하기 위해 자체 프로토콜을 구성 할 수 있습니다. 주어진 UDP 포트에서 수신 대기 하고 응답 하는 수신 호스트에 프로세스를 넣으 십시오. 이메일, 또는 놀라서 unlink()호스트 파일 시스템의 모든 것 ...주의를 유발할 모든 것).


내가 지금 이해하고 있다고 생각합니다. 따라서 수신 udp 포트가있는 서버의 netstat에는 원격 호스트가 표시되지 않습니다 ... tcpdump만이 원격 요청을 표시해야합니까?
잠금

netstat와 tcpdump는 모두 사용자가 읽을 수있는 형태로 데이터를 덤프 할 수 있습니다. 자세한 내용은 해당 매뉴얼 페이지를 확인하십시오.
Luke404

56

udp 포트가 응답하는지 테스트하려면을 사용하십시오 netcat.

매뉴얼 페이지 의 예 :

nc -v -u -z -w 3 example.host 20-30
    Send UDP packets to ports 20-30 of example.host, and report which ones
    did not respond with an ICMP packet after three seconds.

물론 DROP인터넷이 연결된 게이트웨이를 다룰 때 방화벽이 작동 하는 경우 ICMP 응답을받지 못합니다.


1
이 반응은 나에게 잘못된 반응을 주었다. 반면에 사샤의 대답은 내가 기대하는 것을 보여준다.
텍사스-브로 니 우스

@ texas-bronius 만약 당신이 다른 서버에 접근 할 수 있다면 아마 Sasha의 길을하는 것이 좋습니다
motobói

27
  1. 클라이언트 및 서버 설치 nc 모두 : yum install nc(centos의 경우)
  2. 서버에서 UDP 포트 수신 : nc -ul 6111
  3. 클라이언트에서 nc -u <server> 6111
  4. 클라이언트에 무엇이든 입력하고 Enter 키를 누르십시오-서버 에이 텍스트가 표시되어야합니다

참고 :nc -ul 서버 에서 명령 을 실행 하면 처음 연결될 때만 연결됩니다. 내가 알다시피 서버를 멈추고 다시 시작하지 않고 서버를 핑 (ping) 할 수 없습니다 nc -ul. 실제로 ^ C 클라이언트를 중지하면 ( nc -u ...) 서버 리스너를 먼저 다시 시작하지 않으면 클라이언트를 다시 시작할 수 없습니다.


1
UDP가 "보내고 잊어 버리는 방법"에 대한 내 자신의 이해 (및 오해)를 제공하고 모든 확인은 적절한 구성에서만 얻을 수 있기 때문에 나는이 영리한 대답을 좋아합니다. 너무 많은 요소. 이 응답은 실제로 작동하지 않거나 작동하지 않거나 구성 변경, 헹굼 및 반복이 가능한 매우 간단하고 명확한 호출 및 응답을 제공합니다.
텍사스-브로 니 우스

10

nmap으로 열린 UDP 포트를 테스트하는 것은 위험에 처해 있습니다. 개방성을 나타내는 3 방향 핸드 셰이크가 없습니다. 리스닝 프로세스가 nmap이 보내는 모든 것에 응답하지 않는 한, nmap이 응답하지 않는 열린 포트와 필터링 된 포트를 구별 할 수있는 방법이 없습니다.

한 쪽 끝에서 netcat을 듣고 다른 쪽 끝에서 netcat을 사용하여 패킷을 보내고 다른 쪽 끝에 도착하는 것을 보는 것이 훨씬 쉽습니다. 두 가지 방법 모두 확실하게하십시오. 또한 tcpdump패킷이 필요한 위치로 이동하는 것을 볼 수 있습니다 .


알 겠어요. 그렇다면 nmap은 어떻게 열린 포트를 정확히 알고 있습니까? 해당 포트로 데이터를 보내고 응답을 받으면 열린 것으로 간주됩니까? tcpdump와 netcat의 조합을 사용합니다. 잘 설명 된 답변에 감사드립니다.
잠금

9

비슷한 문제가 있었고 여기에서 netcat을 사용하여 좋은 솔루션을 찾았습니다 .

nc -vzu <host> <port>

UDP 포트가 열려 있는지 확인한 다음 실제 코드 테스트를 진행할 수 있습니다.



1

당신은이 작업을 수행 할 수 있습니다 netcat(NC) 또는 iperf네트워크 외부와 테스트에 다른 컴퓨터가 가정. 내 선택은 nmap환경 외부의 시스템에서 UDP 스캔하는 것입니다. nmap 명령 줄은 무엇입니까? 믹스에 하드웨어 방화벽이나 다른 장치가 있습니까?


1

나는 단순한 생각을 가지고 있습니다. UDP 서버가 예상 데이터를 반환하지 않으면 다운 된 것으로 가정하여 dgram 수집을 중지합니다.

LINE: while(1)
{
    my $line;
    my $flags;

    local $SIG{ALRM} = sub {die "exceeded timeout for recv"};
    alarm 5;
    eval {
        $socket->recv($line,2024,$flags);
    };

    unless($line =~ /\{.*\}/){
        if($verbose){
            print STDERR "Invalid or empty dgram:\n",'"', $line, '"',"\n";
        }

        last LINE;
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.