Önce biraz arka plan
Nc (1) - Linux kılavuz sayfasında veya nc (1) BSD Genel Komutlar Kılavuzundanc
bulabileceğiniz gibi farklı versiyonlar vardır , aktarımdan hemen sonra bağlantı kapanmalıdır. Bağlantılı sitelerin her ikisinde de bir örnek verilmiştir:
Belirli bir bağlantı noktasını dinlemek için çıktıyı bir dosyaya kaydedilmiş olarak nc kullanarak başlayın:
$ nc -l 1234 > filename.out
İkinci bir makine kullanarak, aktarılacak dosyayı besleyerek dinleme nc işlemine bağlanın:
$ nc host.example.com 1234 < filename.in
Dosya aktarıldıktan sonra bağlantı otomatik olarak kapanır.
Sizin netcat
o (ler) yukarıda anlatılan birinden farklıdır bu yüzden, transfer sonra bağlantıyı kapatmaz. Debian Jessie'de Netcat 1.10 benimki gibi davranıyor. Bu davranış /usr/share/doc/netcat-traditional/README.gz
(makinemde) belgelenmiştir , boldening benimdir:
En basit kullanımda, "nc ana makine bağlantı noktası", belirtilen hedef ana bilgisayarda verilen bağlantı noktasına bir TCP bağlantısı oluşturur. Ardından standart girdiniz ana bilgisayara gönderilir ve bağlantı üzerinden geri gelen her şey standart çıktınıza gönderilir. Bu, bağlantının ağ tarafı kapanana kadar süresiz olarak devam eder. Bu davranışın, standart girdideki bir dosya sonundan sonra her şeyi kapatan ve çıkan diğer uygulamalardan farklı olduğunu unutmayın.
İşte bu davranışın ardındaki neden:
"Neden sadece rastgele bağlantı noktalarına bağlanmak için telnet kullanmıyorsunuz?" Geçerli soru ve işte bazı nedenler. Telnet "standart giriş EOF" sorununa sahiptir, bu nedenle ağ çıktısının bitmesine izin vermek için sürüş komut dosyalarında hesaplanan gecikmeler uygulanmalıdır. Ağ tarafı kapanana kadar netcat'in çalışmaya devam etmesinin ana nedeni budur .
Wikipedia'nın farklı uygulamaları var . Farklılıkları isimlendiremiyorum. Belki başka biri yapabilir?
Şimdi, çözümler
1
nc
Dosya okunduktan sonra bırakmayı söyleyebilirsiniz . Bu seçenek kullanışlıdır:
-q seconds after EOF on stdin, wait the specified number of seconds
and then quit. If seconds is negative, wait forever.
Bu komutu gönderici ucunda kullanırsanız:
nc -q 0 MachineIP Port < test.txt
nc
EOF okunduktan 0 saniye sonra dosya biter bitmez. Ardından çıkacak ve alıcı sonlanacaktır nc
.
Eğer paketler karşılaşmazsa ne olacağını merak ediyorsanız, Juraj'ın bir yorumu.
Tüm paketler karşılaşmadığında, sistem bunu algılar ve uygulama farkında olmadan yeniden iletir (veya mümkün değilse uygulama zaman aşımı hatası alır). Güvenilir teslimat, nc
kullanan işletim sistemi çekirdeği tarafından sağlanan TCP protokolünün amacıdır . Bunu yapmayan UDP protokolünü isteyebilirsiniz, nc -u
ancak durum böyle değildir.
2
Yukarıda belirtilen README.gz
, -w
zaman aşımına dayanan ve -q
uygulamanızda bulunma seçeneğini gerektirmeyen orijinal bir örnek var .
Netcat basit bir veri aktarım aracısı olarak kullanılabilir ve hangi ucun dinleyici olduğu ve hangi tarafın istemci olduğu önemli değildir - bir taraftaki girdi diğer tarafa çıktı olarak ulaşır. Dinleyiciyi herhangi bir zaman aşımı belirtilmeksizin alıcı tarafta başlatmak ve ardından gönderen tarafa küçük bir zaman aşımı vermek yararlıdır. Bu şekilde dinleyici, sizinle iletişim kurana kadar dinlemeye devam eder ve veri akışı durduktan sonra istemci zaman aşımına uğrar, kapanır ve dinleyiciyi yanına alır. Araya giren ağ problemlerle dolmazsa, bu tamamen güvenilir olmalıdır ve zaman aşımını her zaman artırabilirsiniz. "Rsh" kelimesinin tipik bir örneği genellikle aşağıdakiler için kullanılır: bir tarafta,
nc -l -p 1234 | uncompress -c | tar xvfp -
ve sonra diğer tarafta
tar cfp - /some/dir | compress -c | nc -w 3 othermachine 1234
her iki uçtaki .rhosts dosyaları, kullanıcı hesapları veya inetd yapılandırmaları hakkında endişelenmenize gerek kalmadan bir dizinin içeriğini bir makineden diğerine aktaracaktır.