테스트 목적으로 원격 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
더 나은 접근 방식입니다.
하지만 bash
And 에서는 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"}