멀티 스레드 서버로서의 netcat


12

netcat을 사용하여 다음과 같은 간단한 서버를 실행합니다.

while true; do nc -l -p 2468 -e ./my_exe; done

이렇게하면 누구나 2468 포트에서 호스트에 연결하고 "my_exe"와 대화 할 수 있습니다.
불행히도, 공개 세션 중에 다른 누군가가 연결을 원하면 netcat이 다음 "while"루프까지 수신 대기하지 않기 때문에 "연결 거부"오류가 발생합니다.

netcat을 멀티 스레드 서버처럼 작동시키는 방법이 있습니까? 그렇지 않은 경우 이에 대한 해결 방법이 있습니까?


socat을 사용할 수 있습니다
sivann

답변:


18

작업에 잘못된 도구를 사용하고 있습니다 : ucspi-tcp 와 같은 것을 사용하십시오 . 특히 tcpserver :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.

2
이게 내 평생 어디 있었어?!
Sridhar Sarnobat가

감사합니다 @ akira, 당신은 예제를 제공 할 수 있습니까?
Sabrina

3

사용중인 운영 체제는 언급하지 않았지만 쉘 명령 예제의 구문을 기반으로 Linux 또는 Unix라고 가정합니다.

시스템에서 xinetd (또는 그 이전 버전 inetd )를 실행중인 경우 해당 소프트웨어를 사용하여 선택한 포트에서 연결을 수신하고 실행 파일을 실행하여 응답 할 수 있습니다. xinetd / inetd를 사용하면 각각 별도의 실행 파일 인스턴스가 제공하는 여러 동시 연결을 허용 할 수 있습니다.


-2

다음과 같은 '&'를 사용하여 프로세스를 백그라운드로 설정 한 다음 (다음 루프로 넘어 가기 전에 리턴을 기다리지 않음) 다음과 같이 할 수 있습니다.

while true; do nc -l -p 2468 -e ./my_exe &; done

7
즉 .... 서브 프로세스의 산란 부하에가는 시스템을 충돌거야
jackweirdy

5
그리고 첫 번째 호출 만 작동합니다. 포트 2468에 이미 서버 소켓이 있기 때문에 모든 후속 포트가 실패합니다.
Daniel Griscom
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.