다음 스크립트를 사용하여 간단한 CGI 서버 (http://www.jfranken.de/homepages/johannes/vortraege/netcat_inhalt.en.html)를 만들려고했습니다. 이게 좋은 아이디어인지 아닌지 기술적 이유에 대한 자세한 내용입니다.netcat을 간단한 CGI 서버로 사용
#!/bin/bash
export port=${port:-$1} # inherit $1 as $port
/usr/local/bin/nc -l -p $port -e $0 & # await further connections on this port
echo "hi"
왜 이것이 제대로 작동하지 않는지 알고 계십니까? 첫 번째 실행시 터미널에 "hi"를 출력합니다. 그런 다음 netcat이 지정된 포트에서 대기 중이므로 (-e 플래그로 인해) 네트워크 소켓과 연관된 STDOUT을 사용하여이 스크립트의 새 사본을 생성 할 준비가됩니다. 따라서 지정된 포트에 대한 HTTP GET 요청은 "hi"텍스트를 수신합니다.
실제로 어떤 일이 발생하는지는 각 GET 요청이 새로운 netcat 프로세스를 생성하여 한 번에 하나씩 (예상 한대로) 발생 시키지만 모든 netcat 프로세스를 죽일 때까지 GET 요청이 완료되지 않습니다. 이 시점에서 내가 발행 한 첫 번째 GET 요청은 "hi"로 응답하고 다른 모든 요청은 실패한 연결 시도로 돌아옵니다. 나는 이것이 STDOUT 리다이렉션의 세부 사항에 대한 나의 혼란과 관련이 있다고 생각하지만 나의 이해는이 스크립트는 누군가가 연결될 때마다 새로운 버전의 스크립트를 생성 할 것이고 스크립트의 STDIN/OUT은 네트워크 소켓이어야한다는 것이다. -e netcat 플래그 때문에.
-DGAPING_SECURITY_HOLE 옵션을 사용하여 컴파일했습니다. 커맨드 라인 자체에서 실행할 때 작동하지만 내가 언급 한 스크립트는 예상대로 수행되지 않습니다. – jeffmax
FWIW, 귀하의 코드가 나를 위해 작동하는 것 같습니다. 예외적으로 나는 그것을 시작하는 터미널에서 'hi'를 얻습니다. 그러나 나는 또한 그것을 테스트하기 위해 연결하는 클라이언트 (netcat)에게 배달을 받는다 - 이것은 아마도 목표이다. 그러나 가능하다면, 뭔가를 집행하기 위해 그것을 사용하는 것보다 netcat으로 파이핑 입력을 장려 할 것입니다. –