Nasıl UDP paketi oluşturabilirim?


15

Aşağıdaki Netcat komutunu gerçekleştirip paketleri Wireshark ile görüntülediğimde , UDP paketinin hatalı biçimlendirildiğini söylüyor.

$ echo "this is a test" | nc -u 127.0.0.1 53

Benzer şekilde, $ echo "this is a test" > /dev/udp/127.0.0.1/53Wireshark'ta "hatalı biçimlendirilmiş paket" hataları üretir.

Resim açıklamasını buraya girin

Echo komutu Netcat sunucusuna hatasız olarak gönderilir / gönderilir. Ama bu beni meraklandırdı: yankı veya başka bir yerel Unix aracıyla uygun bir UDP paketi manuel olarak oluşturmak mümkün mü?

Debian ve macOS kullanıyorum.


10
Ekran görüntünüze göre, hatalı biçimlendirilmiş udp paketinin kendisi değil, içeriği 53 numaralı bağlantı noktası DNS için kullanıldığından ve paketiniz geçerli bir DNS isteği içermediğinden içeriği.
tkausl

@tkausl kesinlikle haklısın. 53 dışında bağlantı noktaları kullanılırken "hatalı biçimlendirilmiş" hata yoktur. Belirttiğiniz için teşekkür ederiz.
user322500

1
Standart protokolleri kullanmıyorsanız 49152 ila 65535 aralığındaki bağlantı noktalarını kullanmanız gerekir. Linux varsayılan olarak geçici bağlantı noktaları olarak 32768 ila 60999 aralığını kullandığından, standart olmayan protokoller için de bu seçenekleri seçmemenizi öneririz. Ancak 61000 ila 65535, standart olmayan protokoller için adil bir oyundur. Genellikle echo $[61002+RANDOM%4532]bu aralıkta rasgele bir bağlantı noktası numarası seçmek için kullanılır .
kasperd

1
Kök olarak oturum açmayın. Faaliyetinizin çoğunu root olmayan bir kullanıcı olarak yapmalısınız. Kök olarak bir şeyler yaparsanız, buraya geri dönüp makinenizi nasıl tamir edeceğinizi soracaksınız ve size yardımcı olamayacağız (yeniden kurulum önermek hariç).
ctrl-alt-delor

1
@tkausl Yorumunuzu cevap olarak göndermediğiniz için neyi kaybettiğinize bakın ....
George Vasiliou

Yanıtlar:


41

Paketiniz IP ve UDP açısından tamamen geçerlidir. Wireshark'ın alt bölmesinde Ethernet / IP / UDP için protokol ayrıntılarını genişletirseniz, paketin başarıyla ayrıştırıldığını göreceksiniz.

Bununla birlikte, bağlantı noktası 53 için hedeflendiği için, Wireshark bunu bir DNS paketi olarak ayrıştırmaya çalışır, bunu yapamaz ("bu bir testtir" dizesi RFC 1035 spesifikasyonu için geçerli bir DNS isteği değildir ).

Bu bağlantıdaki teknik özellikleri izlerseniz, bir DNS isteği olarak ayrıştırıldığında geçerli olan bir paket oluşturabilirsiniz. Paketi başka bir bağlantı noktasına gönderirseniz, Wireshark'ın artık bir DNS isteği olarak ayrıştırmayacağını ve dolayısıyla bu uyarıyı göstermeyeceğini fark edeceksiniz.


15

Onları yeniden yönlendirmeli Bash özel takma adlarına gönderebilirsiniz.

Bash sayfalarından:

/ dev / tcp / host / port Ana bilgisayar geçerli bir ana bilgisayar adı veya Internet adresiyse ve bağlantı noktası bir tamsayı bağlantı noktası numarası veya hizmet adı ise, bash ilgili TCP soketini açmaya çalışır.

/ dev / udp / host / port Ana makine geçerli bir ana bilgisayar adı veya Internet adresiyse ve bağlantı noktası bir tamsayı bağlantı noktası numarası veya hizmet adı ise, bash ilgili UDP soketini açmaya çalışır.

Bu, 192.168.2.11'e 8080 numaralı bağlantı noktasına bir UDP paketi gönderir:

echo "This is a test" > /dev/udp/192.168.2.11/8080

Bu cevap için teşekkürler. Sorumu güncelledim. Metodunuzu kullanmak maalesef bir "hatalı biçimlendirilmiş paket" hata mesajı verir.
user322500

-1

Burada birden fazla soru var; "hatalı biçimlendirilmiş bir paket" iddiası, sağlama toplamının boşaltılmasından kaynaklanıyor olabilir ve bu durumda paket yakalamanın tam bir görünüme sahip olmadığını yansıttığı için yanlış bir hata olabilir - bunun yerine çalışmaların bazıları ağ donanımı üzerinde yapılmıştır. WireShark'ın bu konuda belgeleri olmalıdır.

Aksi takdirde, (gibi çeşitli araçlar socat, ncya netcat, ya gibi kabuklarda son derece benzer özellikler üzerinden ksh93ya bash) standart girdiden bayt alıp bir UDP paket olur ne onları boşaltabilir. Bunun "uygun" olup olmadığı protokole bağlıdır; teorik olarak bir DNS veya DHCP paketi oluşturabilir ve gönderebilir, ancak daha sık insanlar (umarım) söz konusu protokolü doğru bir şekilde uygulayan bir kütüphane veya özel bir yazılım kullanırlar, çünkü genellikle birkaç bit koymaktan çok daha fazla ilgili bir paket gövdesi ve bunu kablo üzerinden gönderme, özellikle yanıtları işleme, zaman aşımı veya hatadan sonra yeniden deneme, paket başlık alanları vb. protokoller genellikle RFC'de çok iyi belgelenmiştir veya "TCP / IP Illustrated" kitap serisine bakın. daha fazla dokümantasyon için Stevens tarafından.

nmapPaket yapımı ile çok özel şeyler yapmak gibi özel araçlar . Aksi takdirde manuel paket yapımı için genellikle bir programlama dili kullanılır, ancak yine de çoğu yazılım, bir ham işçiyi elle hazırlamaktan çok daha az çalışma ve çok daha az hataya eğilimli olduğundan, DNS veya DHCP veya diğer UDP paketleri göndermek için mevcut kitaplıkları veya sistem hizmetlerini kullanır. sıfırdan paket.

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.