Bash'ın / dev / udp`ini kullanarak bağlantı noktasının açık olup olmadığını nasıl bilebilirim?


14

Ben erişimi yok netcatya da nmapöylesine kullanmaya çalışıyorum bashve /dev/udp/bağlantı noktalarını test etmek için özel dosyaları.

Gibi bir şey yapabilirdi:

echo "" > /dev/udp/example.com/8000

Ama $?her 0zaman UDP kullanırken. Ben çünkü bu echo ""komutun dönüş değeri doğru olduğunu varsayalım?

Temelde ne yapabilirim çoğaltmak çalışıyorum nmapve netcat:

nmap -sU -p 8000 example.com | grep open >/dev/null && echo 'open'
nc -z -u example.com 8000 && echo 'open'

Bunu nasıl yapabilirim /dev/udp?


1
UDP teslimatı garanti etmez, bu nedenle bash mesajın gönderilmesinde başarılı olduğunu düşünse bile, mesaj yolda imha olmuş olabilir. Başarısız bir gönderimi nasıl test ettiniz (başarısız bir bağlantı değil: UDP bir bağlantı değil)?
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


13

TCP için, sadece kontrol ediyorum $?. Bağlantı başarısız olursa, $?olmayacak 0:

$ >/dev/tcp/google.com/81
bash: connect: Network is unreachable
bash: /dev/tcp/google.com/81: Network is unreachable
$ echo $?
1

bashBağlantının başarısız olduğunu fark etmek zaman alacaktır . Tetiklemek için zaman aşımını kullanabilirsiniz bash:

$ timeout 1 bash -c '>/dev/tcp/google.com/80' &&
  echo Port open ||
  echo Port close
Port open

Udp portunu test etmek daha karmaşıktır.

Açıkçası , udp ile açık bir durum yoktur (tabii ki udp vatansız protokoldür). Udp sadece iki devlet vardır konum dinleme veya değil . Durum böyle değilse , ICMP Hedefine Ulaşılamaz .

Ne yazık ki, güvenlik duvarı veya yönlendirici genellikle bu ICMP paketlerini düşürür, bu nedenle hangi udp bağlantı noktasının durumundan emin olmazsınız.


UDP'ye odaklanmak için sorumu yeniden düzenledi. Ninja düzenleme için özür dilerim. Benzer olacağını düşündüm, bu yüzden ayrım yapmadım. Temizlediğiniz için teşekkürler.
Belmin Fernandez

10

Genel olarak yapamazsınız.

TCP'den farklı olarak, UDP bağlantısızdır. TCP ile yaptığınız gibi hiçbir şey yapmadan bağlantı kurarak bir bağlantı noktasının açık olduğunu algılayamazsınız. Bunun yerine, limana veri göndermeniz ve ne olduğunu görmeniz gerekir ve gerçek dünyada uygulanan UDP'nin detayları sonuçları yorumlamayı zorlaştırır. Gibi karmaşık paket düzeyindeki araçlar bile nmapbelirli bir UDP bağlantı noktasını dinleyen bir program olup olmadığını kesin olarak söyleyemez. nmapUDP bağlantı noktalarını üç gruba ayırır:

  1. Kesinlikle açık. Bağlantı noktasına bir paket göndermek, hedef makineden bir veri yanıtı ortaya çıkardı.
  2. Kesinlikle kapalı. Bağlantı noktasına bir paket göndermek, hedef makineden bir "ICMP Hedefe Ulaşılamıyor" mesajı verdi.
  3. Açık veya filtrelenmiş. Limana bir paket göndermek hiçbir yanıt vermedi. Belki paketleri düşüren bir güvenlik duvarı vardır; belki dinleyen bir program vardır ve nmapnasıl bir yanıt alacağınızı henüz çözememiştir; belki kullanıcı şanssız kaldı ve tüm paketler transit olarak kayboldu.

Hakkında harika bilgiler nmap. Teşekkürler, bu çok fazla karışıklığa neden oluyor.
Belmin Fernandez
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.