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

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

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

답변1

사용 nc( netcat).

섬기는 사람:

$ nc -l localhost 3000

고객:

$ nc localhost 3000

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

이는 서버와 클라이언트가 동일한 시스템에 있을 때 작동합니다. 그렇지 않으면 localhost서버의 외부 이름으로 변경하십시오. 서버에서는 0.0.0.0사용 가능한 모든 인터페이스에 서버를 바인딩하기 위해 이를 사용(또는 완전히 제거)할 수도 있습니다.

더 흥미로운 점은 "서버"에 연결하여 보내면 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"

클라이언트 세션:

$cnclocalhost3000
2017년 1월 12일 목요일 18:04:21 CET
안녕하세요?
무엇?

(서버는 를 누른 후에 종료되지만 q클라이언트는 를 누를 때까지 서버가 사라진 것을 감지하지 못합니다 Enter).

답변2

일반적으로 말하면 조언이 netcat더 나은 접근 방식입니다.

하지만 bashAnd 에서는 ksh다음과 같이 할 수도 있습니다.

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

답변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()을 보냅니다.
  • 복잡한 프로토콜이 필요하지 않은 경우 작업이 완료될 수 있습니다.

답변4

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. 0으로 설정 하면 local-port로컬 호스트가 일반적으로 필요한 포트를 자동으로 선택합니다. gawk다음에 대해 더 자세히 읽을 수 있습니다 .TCP/IP 네트워크 기능제공된 링크에서.

awk 실행당 하나의 메시지만 보내는 경우 이 시간이 단축될 수 있다는 점은 주목할 가치가 있습니다.

BEGIN {print "coke" |& "/inet/tcp/0/cs.wisc.edu/finger"}

관련 정보