소켓 메시지를 보내는 간단한 쉘 스크립트 IP> 포트와

테스트 목적으로 원격 IP> 포트와 연결하고 간단한 텍스트 TCPIP 소켓 메시지를 보내는 쉘 스크립트를 작성해야합니다.



답변

nc( netcat) 사용

섬기는 사람:

$ nc -l localhost 3000

고객:

$ nc localhost 3000

서버와 클라이언트 모두 표준 출력 / 입력을 읽고 씁니다.

서버와 클라이언트가 같은 컴퓨터에있을 때 작동합니다. 그렇지 않으면 localhost서버의 외부 이름으로 변경 하십시오.

약간 더 흥미로운 “서버”는 연결하여 시간을 보내면 시간을 알려주고 다음 d을 보내면 종료됩니다 q.

서버 ( bash) :

#!/bin/bash

coproc nc -l localhost 3000

while read -r cmd; do
  case $cmd in
    d) date ;;
    q) break ;;
    *) echo 'What?'
  esac
done <&"${COPROC[0]}" >&"${COPROC[1]}"

kill "$COPROC_PID"

고객 세션 :

$ nc localhost 3000
디
목 1 월 12 일 18:04:21 CET 2017
여보세요?
뭐?

서버는 이후 q에 종료 되지만 클라이언트는를 누를 때까지 서버가 종료 되었음을 감지하지 못합니다 Enter.


답변

일반적으로 조언 netcat이 더 좋습니다.

그러나에 bash그리고 ksh당신은 또한이 작업을 수행 할 수 있습니다

exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"

답변

netcat 시도 (예 : nc)

echo GET / HTTP/1.0 | nc 0 80
HTTP/1.1 400 Bad Request
Date: Thu, 12 Jan 2017 13:44:23 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 311
Connection: close
Content-Type: text/html; charset=iso-8859-1
  • 위의 샘플에서 echo GET / HTTP/1.0로컬 HTTP 서버에 GET ( )을 보냅니다.
  • 복잡한 프로토콜을 원하지 않으면이 작업을 수행 할 수 있습니다.

답변

많은 경우에 netcat / socat에 액세스 할 수 없었습니다. exec분산 컴퓨팅 환경에서 bash를 사용하는 데 문제가있었습니다 .

그 보급으로 인해 대안 솔루션은 GNU AWK의 TCP / IP 기능을 사용하는 것입니다. “양방향 파이프”연산자를 기반으로하는 간단한 구문을 제공합니다.

다음은 이 소스 에서 소켓을 통해 TCP 메시지를 보내는 수정 된 예입니다 .

BEGIN {
 NetService = "/inet/tcp/0/cs.wisc.edu/finger"
 print "coke" |& NetService
 close(NetService)
}

주소의 전체 구문은 다음과 같습니다 /net-type/protocol/local-port/remote-host/remote-port.. 이 local-port0으로 설정 되면 로컬 호스트는 일반적으로 원하는 포트를 자동으로 선택합니다. gawkTCP / IP 네트워킹 기능 에 대한 자세한 내용은 다음 참조하십시오.