NC'nin bir dosyayı aktarma işleminin ne zaman yapıldığını öğrenme


11

Netcat'in makineler arasında dosya aktarımının ne zaman yapıldığını bilmenin bir yolu var mı?

Geçerli komutlar:

Makine # 2: nc -lp 5555 > test.txt

Makine # 1: nc MachineIP Port < test.txt

Aktarım gerçekleşir, ancak tamamlandığına dair görsel bir gösterge yoktur.

Yanıtlar:


19

Ö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 netcato (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. 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

ncDosya 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

ncEOF 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, nckullanan işletim sistemi çekirdeği tarafından sağlanan TCP protokolünün amacıdır . Bunu yapmayan UDP protokolünü isteyebilirsiniz, nc -uancak durum böyle değildir.

2

Yukarıda belirtilen README.gz, -wzaman aşımına dayanan ve -quygulamanı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.


Bunun işe yaramasını sağlayamıyorum. -Q yaptığımda komutun mevcut olmadığını söylüyor. Görüyorum -w benzer görünüyorum ama bu bağlantıyı kesmiyor
Anthony Russell

Senin nedir ncversiyonu? Kontrol etmek için:, nc -hilk satır.

ehh evet oldukça eski. Ben linux eski bir görüntü üzerinde. Bunu güncelleyeceğim ve başka bir yol vereceğim
Anthony Russell

Cevabımı güncelledim.

1
Tüm paketler karşılaşmadığında, işletim sistemi bunu algılar ve uygulama fark etmeden yeniden iletir (veya yine de başarısız olursa, uygulama zaman aşımı hatası alır). Güvenilir teslimat, nc'nin kullandığı OS çekirdeği tarafından sağlanan TCP protokolünün amacıdır. Bunu yapmayan UDP protokolünü nc -u kullanarak isteyebilirsiniz, ancak durum böyle değildir.
Juraj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.