Netcat berhenti mendengarkan lalu lintas UDP

8

Saya menggunakan netcat pada beberapa mesin Linux (lihat pertanyaan lain ini ), tetapi melihat beberapa perilaku yang tidak terduga.

Tidak seperti panduan dalam jawaban yang diterima, saya tidak menggunakan tunneling UDP untuk melakukan query DNS. Saya memiliki server jarak jauh yang dapat saya masuki, tetapi tidak menginstal perangkat lunak, dan saya mencoba untuk mengalirkan lalu lintas UDP dari komputer saya ke server, dan kemudian menyiapkan terowongan terpisah untuk mengirim respons UDP kembali dari server ke mesin saya. .

Terowongan yang pergi dari mesin saya ke server berfungsi dengan baik, namun di sisi server, instance dari netcat yang mendengarkan respons dari server UDP akan menutup pendengar setelah menerima respons pertama. Jadi saya dapat mengirim permintaan dan mendapatkan 1 tanggapan kembali, tetapi permintaan berikutnya membuatnya ke server baik-baik saja tetapi tanggapan tidak diterima. Menggunakan netstat saya dapat melihat bahwa sebelum respons diterima netcat mendengarkan, tetapi port kemudian ditutup setelah respons diterima.

Contoh netcat di komputer saya tampaknya menangani semuanya dengan baik. Kedua mesin menjalankan netcat v1.10-38. apa yang sedang terjadi?

astaga
sumber

Jawaban:

2

Jadi ada beberapa hal yang disebut netcat; ubuntu bahkan memiliki / etc / alternative symbolic-link-hackery untuk itu.

Saya pikir bagian dari masalah Anda adalah bahwa UDP tidak melakukan sesi; Saya telah menyalin sebagian file /usr/share/doc/netcat-traditional/README.gz di bawah ini yang menjelaskan pekerjaan dengan cukup baik.

Koneksi UDP dibuka alih-alih TCP ketika -u ditentukan. Ini sebenarnya bukan "koneksi" per se karena UDP adalah protokol tanpa koneksi, meskipun netcat secara internal menggunakan mekanisme "socket UDP yang terhubung" yang didukung sebagian besar kernel. Meskipun netcat mengklaim bahwa koneksi UDP keluar "terbuka" dengan segera, tidak ada data yang dikirim sampai ada sesuatu yang dibaca dari input standar. Hanya setelah itu dimungkinkan untuk menentukan apakah benar-benar ada server UDP di ujung yang lain, dan sering kali Anda tidak tahu. Sebagian besar protokol UDP menggunakan batas waktu dan coba lagi untuk melakukan tugasnya dan dalam banyak kasus tidak akan repot-repot menjawab, jadi Anda harus menentukan batas waktu dan berharap yang terbaik.

OK jadi mungkin itu bukan penjelasan yang hebat, tapi itulah yang bisa saya temukan.

Jika Anda belum melakukannya, Anda mungkin ingin bereksperimen dengan opsi netcat yang dapat Anda temukan yang harus dilakukan dengan menunggu ... apakah Anda telah bereksperimen dengan:

  • menggunakan -l dan -u untuk memastikan Anda dalam mode "mendengarkan"

  • -vv untuk melihat apa yang terjadi

  • -q -1 ... yang mana yang harus "menunggu selamanya" bahkan setelah menerima EOF (mudah-mudahan, mendengarkan lagi?)

pbr
sumber
5
jadi ini adalah jawaban yang diterima sekarang, tetapi kita tidak tahu tips mana yang terbukti bermanfaat :(
törzsmókus
2

Anda bisa menggunakannya socatuntuk itu. Ini memiliki opsi yang sangat bagus fork:

fork Setelah membuat koneksi, menangani salurannya dalam proses anak dan membuat proses induk berusaha untuk menghasilkan lebih banyak koneksi, baik dengan mendengarkan atau dengan menghubungkan dalam satu lingkaran (contoh).

Klien (ya ini Anda jalankan dari klien):

$ ssh -L 7753:localhost:7753 YourServer.com "/usr/bin/socat tcp4-listen:7753,reuseaddr,fork UDP:8.8.8.8:53"

Klien:

$ sudo socat udp4-listen:53,reuseaddr,fork tcp:localhost:7753
$ dig @127.0.0.1 google.com
Andrey Arapov
sumber