나는에 액세스 할 수없는 netcat
또는 nmap
내가 사용하려고 해요 그래서 bash
하고 /dev/udp/
테스트 포트에 특수 파일을.
나는 다음과 같은 것을 할 수있다 :
echo "" > /dev/udp/example.com/8000
그러나 $?
항상 0
UDP를 사용할 때입니다. echo ""
명령 의 반환 값이 정확 하기 때문이라고 가정 합니다.
나는 기본적으로 내가 함께 할 수 있어요 무엇을 복제하려고 nmap
하고 netcat
:
nmap -sU -p 8000 example.com | grep open >/dev/null && echo 'open'
nc -z -u example.com 8000 && echo 'open'
이 작업을 어떻게 수행 /dev/udp
합니까?
답변
tcp의 경우 확인하십시오 $?
. 연결이 실패한 경우 $?
되지 않습니다 0
:
$ >/dev/tcp/google.com/81
bash: connect: Network is unreachable
bash: /dev/tcp/google.com/81: Network is unreachable
$ echo $?
1
bash
연결이 실패했음을 인식하는 데 시간이 걸립니다 . 시간 초과 를 사용 하여 트리거 할 수 있습니다 bash
.
$ timeout 1 bash -c '>/dev/tcp/google.com/80' &&
echo Port open ||
echo Port close
Port open
udp 포트 테스트는 더 복잡합니다.
엄밀히 말하면 udp 에는 열린 상태 가 없습니다 (물론 udp는 상태 비 저장 프로토콜입니다). UDP와 두 가지 상태 만, 거기 듣기 나 하지 않음 . 상태가 아닌 경우 ICMP 대상에 도달 할 수 없습니다 .
불행히도 방화벽이나 라우터는 종종 해당 ICMP 패킷을 삭제하므로 udp 포트의 상태를 확실하게 알 수 없습니다.
답변
일반적으로 할 수 없습니다.
TCP와 달리 UDP는 비 연결입니다. TCP와 마찬가지로 아무것도 연결하지 않고 포트가 열려 있음을 감지 할 수 없습니다. 오히려, 데이터를 포트로 전송하고 어떤 일이 발생하는지 확인해야하며 실제 환경에서 구현 된 UDP의 세부 사항으로 인해 결과를 해석하기가 어렵습니다. 정교한 nmap
UDP 패킷 수준 툴조차도 특정 UDP 포트를 수신하는 프로그램이 있는지 확실하게 알 수 없습니다. nmap
UDP 포트를 세 그룹으로 분류합니다.
- 확실히 열었습니다. 포트로 패킷을 전송하면 대상 시스템에서 데이터 응답이 도출되었습니다.
- 확실히 닫혔습니다. 포트로 패킷을 전송하면 대상 시스템에서 “ICMP Destination Unreachable”메시지가 나타납니다.
- 열거 나 필터링했습니다. 포트로 패킷을 전송해도 아무런 응답이 없습니다. 패킷을 삭제하는 방화벽이있을 수 있습니다. 어쩌면 듣고있는 프로그램
nmap
이 있고 응답을 얻는 방법을 찾지 못했을 수도 있습니다 . 어쩌면 사용자가 운이 좋지 않아 모든 패킷이 전송 중에 손실되었을 수 있습니다.