Sanırım bu linux'a yakın - Netcat UDP trafiğini dinlemeyi bıraktı - Süper Kullanıcı , ama yine de sormam gerektiğini düşündüm
Bildiğim kadarıyla netcat sürümleri Ubuntu 11.04 kullanıyorum ve varsayılan netcat
tahmin ediyorum üzerinde olduğu openbsd
tek:
$ nc
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [hostname] [port[s]]
Garip bulduğum şey bu: ilk vaka beklendiği gibi çalışıyor - bir terminalde bir UDP sunucusu açıyorum:
$ sudo nc -ul 5000
... ve başka bir terminalde yeni bir UDP istemci bağlantısı başlattım - ve hello
her biri ardından ENTER tuşuna basarak üç kez yazdım :
$ nc -u 127.0.0.1 5000
hello
hello
hello
^C
... ve sunucu terminaline geri dönüldüğünde, hello
beklendiği gibi üç kez yazdırıldı :
$ sudo nc -ul 5000
hello
hello
hello
^C
Şimdiye kadar iyi, hepsi beklendiği gibi çalışıyor. Bununla birlikte, müşteriye girdiler ekleyerek şimdi aynı şeyi deneyeyim diyelim; bu yüzden ilk önce bir terminalde bir UDP sunucusu kurun:
$ sudo nc -ul 5000
... ve diğerinde, bazı verileri nc
UDP istemcisi olarak aktarın:
$ echo hello | nc -u 127.0.0.1 5000
hello
hello
^C
... istemci komutundan sonra, kabuk sanki girdi bekliyormuş gibi donuyor - bu yüzden orada hello
iki kez daha yazıyorum ; ancak sunucu yalnızca ilkini kaydetti hello
(üzerinden yayınlandı echo
). Ayrıca, Ctrl-C tuşlarına basıp istemci echo hello | nc -u 127.0.0.1 5000
komutunu tekrarlamaya çalışsanız bile , sunucu ilk başta rapor vermeye devam edecektir hello
:
$ sudo nc -ul 57130
hello
^C
... ve sadece sunucuyu Ctrl-C ile durdurduktan ve yeniden başlattıktan sonra müşteri echo hello | nc -u 127.0.0.1 5000
komutunu tekrarlayabilir ve çalıştığını gözlemleyebilir.
Bu şekilde nc
davranması mı gerekiyor? En azından tekrarlanan aramaların kaydedilmesini beklerdim echo hello | nc -u 127.0.0.1 5000
- sunucuyu yeniden başlatmak zorunda kalmadan? Ya da belki bu tür davranışlar için özel bir komut satırı anahtarı vardır?
EDIT: Bu güzel PDF sunumunu buldum: socat - Aşağıdaki netcat
ve socat
notları içeren her çeşit Soket'i kullanma :
netcat - Sınırlamalar
● sadece bir atış (soket kapattıktan sonra sona erer)
...
Örnek 1: netcat Değiştirme
...
● Kaynak bağlantı noktasına sahip UDP istemcisi:
nc -u -p 500 1.2.3.4 500
socat - udp: 1.2.3.4: 500, sp = 500
● TCP sunucusu:
nc
-lp- 8080 socat - tcp-l: 8080, yeniden denetle
...
Ben "ile sunucu komutu yerine eğer ... Ancak, hemen hemen yukarıdaki gibi aynı davranışı alıyorum socat - udp4-listen:5000,reuseaddr
" - ve istemci hattını " socat - udp:127.0.0.1:5000
" "borulu girişi ile ... echo hello | socat - udp:127.0.0.1:5000
, tek fark olmasıdır" burada komut en azından sözcük hello
gönderildikten sonra mevcuttur - ancak, yine de, bu komutun ardışık olarak çalıştırılması, sunucu yeniden başlatılıncaya kadar sunucuda alım yapılmasına neden olmaz.
cat $(echo -e "hello\nhello\nhello\n" > tmpf; echo tmpf) | nc -u 127.0.0.1 5000
"), ancak, üçhello
saniye görsem de, hala ne gibi bulmacalar mevcut: bu komut da, "giriş" için yazılan girişi bekler gibi kullanıcı, ve Ctrl-C ve yeniden çalıştırdıktan sonra, sunucu yeniden başlatılıncaya kadar hiçbir veri göremez !? Daha iyi bilmek istediğim şey bu - şerefe!