2014-06-16 3 views
4

학습 목적으로 bash (4.0.33) 네트워크 지원을 사용하고 bash에서 포트 스캐너를 만들려고했습니다. TCP를 들어 나는bash에서 UDP 패킷을 반환하는 것을 수신합니다.

exec 3<>/dev/tcp/192.0.2.1/80

와 TCP/IP 소켓을 열고 연결이 거부되었습니다 또는 시스템 호출이 시간 초과 연결하는 경우 적절한 조치를 취한다. 그러나, UDP와 난 쉽게 올바른 소켓에서 패킷을 반환 읽을

echo > /dev/udp/192.0.2.1/53

하지만 방법으로 패킷을 보낼 수 있어요? 192.0.2.1로 보내진 UDP 데이터 그램이 임시 포트 범위에서 소스 포트를 가지고 있으므로 어떤 소켓을 /dev/udp/192.0.2.1/ 디렉토리에서 읽어야하는지 알지 못합니다. 아니면 tcpdump과 같은 외부 유틸리티없이이 행할 수 있습니까?

+0

불쾌감은 없지만 학습 목적으로 사용한다고해도 사용하지 않으려는 경우 학습의 요지는 무엇입니까? bash는 확실히이 선택에 적합하지 않습니다. –

답변

4

배쉬의 UDP 지원은별로 좋지 않으며 많은 배포판 (데비안/우분투 및 파생물 특히)에서 컴파일됩니다. 권장 도구는 netcat :

nc -u 192.0.2.1 53 

참고 : 동일한 netcat 프로세스에서 읽고 쓰려면 coproc 또는 명명 된 파이프를 사용하십시오. 먼저 패킷을 보내지 말고 응답 netcat을 잡으려고하십시오.

배쉬는 실제로 잘못된 언어입니다. 몇 줄의 코드만으로 UDP와 바이너리 데이터를 더 잘 처리하는 Python을 사용해보십시오.

+0

이 경우 명명 된 파이프의 사용법을 설명해 주시겠습니까? 명명 된 파이프에 UDP 패킷을 작성한 다음 명명 된 파이프를'nc'의 stdin으로 사용 하시겠습니까? 만약 그렇다면, 왜이 접근법이 UDP 패킷을'nc'로 직접 재지향하는 것보다 낫지는 않습니까? – Martin

+0

프로세스와 양방향 통신을 위해 coprocs 또는 명명 된 파이프를 사용할 수 있습니다. 하나의 패킷을 보내고 하나의 응답 만 받으려면 필요하지 않습니다. –

관련 문제