Yanıtlar:
nc
( netcat
) Kullanılarak .
Sunucu:
$ nc -l localhost 3000
Müşteri:
$ nc localhost 3000
Hem sunucu hem de istemci standart çıktı / girdiyi okuyacak ve yazacaktır.
Bu, hem sunucu hem de istemci aynı makinede olduğunda çalışır. Aksi takdirde localhost
sunucunun dış adına geçin.
Biraz daha ilginç, ona bağlanır ve gönderirseniz günün saatini veren ve gönderirseniz d
bırakan bir "sunucu" q
:
Sunucu (in 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"
Müşteri oturumu:
$ nc localhost 3000 d Perşembe 12 Oca 18:04:21 CET 2017 Merhaba? Ne? q
(sunucu sonra çıkar q
, ancak istemci siz düğmesine basıncaya kadar gittiğini algılamaz Enter).
Genel tavsiye ile netcat
daha iyi bir yoldur.
Ama içeri bash
ve ksh
bunu da yapabilirsiniz:
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
1>&3
? Bunun neyi temsil ettiğinden emin değilim
echo "request" >&3
, sanırım 1 sadece gereksiz
netcat'i deneyin (örn. 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
yerel http sunucuma bir GET ( ) gönderiyorumBirçok durumda netcat / socat'a erişimim olmadı. Ayrıca bash'ın exec
dağıtılmış bilgi işlem ortamında kullanılmasıyla ilgili sorunlar yaşadım .
Yaygınlığı nedeniyle, alternatif bir çözüm GNU AWK'nın TCP / IP yeteneklerini kullanmaktır. "İki yönlü boru" operatörü temelinde basit bir sözdizimi sağlar.
İşte bu kaynaktan bir soket üzerinden bir TCP mesajı gönderecek değiştirilmiş bir örnek :
BEGIN {
NetService = "/inet/tcp/0/cs.wisc.edu/finger"
print "coke" |& NetService
close(NetService)
}
Adresi için tam sözdizimi: /net-type/protocol/local-port/remote-host/remote-port
. Ne zaman local-port
0 olarak ayarlanır yerel konak istediğini tipik olan otomatik bağlantı noktası seçer. Daha okuyabilirsiniz gawk
bireyin TCP / IP ağ yetenekleri burada:
ctrl+c
gösterilmez. Echo kullanılıyorsa, örneğinecho "cookie" | nc localhost 9090
, istemcinin çıkış akışı kapatılacaktır (gönderilen) ancak istemci yine de sunucunun sonucunu bekleyecektir.