Bir metin dosyasının içeriğini telnet komutu olarak besleme


10

Komutla telnet docs.python.org 80, ben bir manuel HTTP isteği yapabilir http://docs.python.org/2/license.htmlgerçek istekle yazarak.

Şimdi, canlı olarak yazmak yerine, bir metin dosyasından isteği beslemek istiyorum.

Bunu denedim:

cat request.txt|telnet docs.python.org 80


request.txt :

GET /2/license.html HTTP/1.1 
Host: docs.python.org

(Dosyayı boş bir satırla bitirmeniz gerekir, aksi takdirde kötü bir istek alırsınız!)


Ancak sunucu bağlantısı derhal kapatılır.

Request.txt dosyasını doğru şekilde nasıl yönlendirmeliyim telnet docs.python.org 80?


Düzenle:

Bunu bilmek güzel; HEADBunun yerine kullanırsanız , ileti gövdesi dışında GETbir GETistekte yaptığınız yanıtın aynısını alırsınız.
Bu nedenle, HEADsadece HTTP üstbilgilerini incelemek istiyorsanız kullanın. (Yani, yanıtın içeriği kabuk çıktınızı engellemez.)


Karşılaştırma yapabilmemiz için manuel olarak çalıştırdığınız gerçek komutu ekleyebilir misiniz? Ben çalıştırdığımda, GETyayınladım, bir 408 Request Time-outhata alıyorum. Ayrıca, wget http://docs.python.org/2/license.htmlbir seçenek değil mi?
terdon

Komutlar doğrudur. Sanırım girdiğiniz anda sunucuyla bağlantı telnet docs.python.org 80kuruyorsunuz, bu yüzden birkaç saniye içinde acele edip bu iki satırı (necc ise kopyala yapıştır) yazmanız gerekecek veya sunucu bir zaman aşımı hatası döndürecektir.
Bentley4

Bunlar kesin komutlardır:telnet docs.python.org 80 <ENTER> GET /2/license.html HTTP/1.1 <ENTER> Host: docs.python.org <ENTER> <ENTER>
Bentley4

1
<ENTER>Sonunda ikinci kez yazmanızın nedeni, HTTP protokolünün istek başlıklarından sonra fazladan boş bir satır gerektirmesinin nedeni olduğunu düşünüyorum . Bkz istek mesajı bölümüne ait HTTP wiki makalesi
Bentley4

1
Lanet olsun, teorik olarak, yapabilmelisin, telnet < request.txtama GETçalışma emrini alamıyorum .
terdon

Yanıtlar:


21

"Telnet" yerine netcat (nc komutu) kullanın,

cat request.txt | nc docs.python.org 80

Telnet hızlı ve kolay bir saldırıdır, ancak netcat görünüşe göre iş için doğru araçtır.


Telnet netcap'tan 'daha hızlı' ve 'daha kolay' nasıl olur? Bu durumda bu konuda herhangi bir kullanım farkı görmüyorum.
Bentley4

Kesinlikle bu durum için değil, ama bence insanlar (Beni oku ve görünüşte sen !!!) telnet kullanma eğilimindedir çünkü öğrendiğimiz ilk şey ve tabii ki netcat'e inandığım Windows ve Linux'ta mevcut Windows altında önceden yüklenmiş olarak gelmez.
davidgo

5

Gerçekten ile hiçbir deneyimim telnetyok ama dosya yeniden yönlendirmeden girdi alır:

telnet < abc.txt

Sunucuya doğru şekilde bağlanmak için aşağıdaki gibi alabilirim:

$ cat abc.txt
open docs.python.org 80
$ telnet < abc.txt
telnet> Trying 82.94.164.162...
Connected to dinsdale.python.org.
Escape character is '^]'.
Connection closed by foreign host.

Belki de GETkomutu kabul etmesini nasıl sağlayacağınızı anlayabilirsiniz ama yapamadım. Alternatif bir expectkomut dosyası kullanmaktır :

#!/usr/bin/expect

spawn telnet docs.python.org 80
expect "Escape character is '^]'." { 
     send "GET /2/license.html HTTP/1.1\nHost: docs.python.org\n\n" 
}
interact

Daha sonra komut dosyasını şu şekilde kaydedebilir, telnet.expyürütülebilir hale getirebilir ve çalıştırabilirsiniz:

./telnet.exp > output.html

Harika, bilmiyordum expect! Davidgo'nun cevabını seçtim çünkü bu dava için en iyi çözüm. Netcap ve telnet arasında elde etmek istediğim şey için herhangi bir kullanım farkı görmüyorum. Yine de çabalarınız için teşekkürler Terdon, eğer cevabınızı daha fazla oylayabilirsem, yapardım.
Bentley4

1
@ Bentley4 sorun değil, kullanmak ncdaha iyi bir çözümdür, kabul etmelisiniz .
terdon

interactBu expectbetiği sonlandırmanın doğru yolunun nasıl olduğunu göremiyorum .
2rs2ts

@ 2rs2ts Beklemek hakkında çok az şey biliyorum, haklı olabilirsin ama yorumun bana neden yanlış olduğunu düşündüğünü söylemediğinden söyleyemem. Anladığım kadarıyla, interact"geçerli işlemin denetimini kullanıcıya verir, böylece tuş vuruşları geçerli işleme gönderilir ve geçerli işlemin stdout ve stderr'i döndürülür" (bundan itibaren man expect). Yani, interactkullanıcıya telnet bağlantısını gerçekten kullanmanın bir yoludur.
terdon

Asıl soru, bir dosyanın içeriğini telnetonunla etkileşimden ziyade beslemekle ilgili olduğundan, bununla bitmesi gerektiğini düşünüyorum close -i $spawn_id. Sonra komut dosyası çıkacaktır. İle interactben çıkmak için aslında edemedi telnethiç ve benim terminali kapatmak zorunda kaldı. Oldukça sefil (kısmen benim hatam olmuş olabilir.)
2rs2ts
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.