쉘 명령을 사용하여 (서버와 클라이언트 사이에) 소켓 세션을 설정할 수 있습니까?

쉘 명령을 사용하여 (서버와 클라이언트 사이에) 소켓 세션을 설정할 수 있습니까?

내가 읽은 바에 따르면(개요일 뿐이고 C는 모릅니다) 특정 순서로 함수를 호출하여 서버와 클라이언트 사이에 소켓 세션이 설정됩니다.

It starts with the Server:
socket()     #creates communication point
bind()       #gives this communication point an address
listen()     #tells it to be ready for some signal

then the Client:
socket()
connect()    #establishes a line between himself and the listening Server

now both can talk with each other by using read() and write().

글쎄, 이것은 C 프로그래밍 언어로 구현되지만 Shell에서도 구현될 수 있습니까? 그렇다면 이렇게 하는 것이 합리적일까요?

답변1

명령줄에서(또는 쉘 스크립트를 통해) 소켓 연결을 설정하는 데 사용할 수 있는 여러 프로그램이 있습니다. 가장 일반적인 것은 아마도 netcat일 것이며, 그 중 적어도 세 가지 구현이 있습니다:

  • 원본 ©1995-1996 Avian Research(호빗의 웹캣). 내가 아는 한 좋은 업스트림 링크는 없으므로 여기 데비안 패키지 추적기에 있습니다:https://tracker.debian.org/pkg/netcat

  • Netcat6, 재작성. 이제 버려진 것으로 선언되었습니다.http://www.deepspace6.net/projects/netcat6.html

  • netcat-openbsd, OpenBSD 프로젝트에 의해 재작성되었습니다.어쩌면 그것이 당신이 원하는 것일 수도 있습니다.코드는 다음에서 찾을 수 있습니다.http://bxr.su/openbsd/usr.bin/nc/

  • socat은 재작성이 아니지만 많은 추가 기능을 갖춘 동일한 아이디어입니다.또 다른 좋은 옵션모든 기능이 필요하고 추가 복잡성에 신경 쓰지 않는 경우.http://www.dest-unreach.org/socat/

bc매뉴얼 페이지는 많은 예를 제공합니다. 예를 들어 다음은 소켓에서 실행하는 방법입니다(맨 페이지의 더 무서운 예를 기반으로 함).

mkfifo /tmp/f && cat /tmp/f | bc -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

bc그런 다음 다음 명령을 사용하여 해당 네트워크에 연결할 수 있습니다 .

nc localhost 1234

또는 을 사용하면 socat다음과 같습니다.

socat EXEC:'bc -i' TCP4-LISTEN:1234,bind=127.0.0.1   # server
socat - TCP4:127.0.0.1:1234                          # client

관련 정보