UDP bağlantı noktasının açık olup olmadığını netcat nasıl biliyor?


49

Bu yüzden bir UDP portunun açık olup olmadığını kontrol etmek için bu netcat komutunu kullanabilirim:

$  nc -vz -u 10.1.0.100 53
Connection to 10.1.0.100 53 port [udp/domain] succeeded!

TCP'den farklı olarak, UDP bağlantısızdır (ateş ve unut). Peki, Netcat'in UDP limanının açık olduğunu nasıl bildiğini bilen var mı? Cevap mı istiyor, öyle bir şey mi var?

Yanıtlar:


17

Belirli çıktılara bakılırsa, Connection to Connection to 10.1.0.100 53 port [udp/domain] succeeded!openbsd-netcat kullanıyorsunuz.

Baktığımızda bunun için kod testi UDP yuvasına bağlamak için, yani açık bir bağlantı vardır:

              if (vflag || zflag) {
                            /* For UDP, make sure we are connected. */
                            if (uflag) {
                                    if (udptest(s) == -1) {
                                            ret = 1;
                                            continue;
                                    }
                            }

                            /* Don't look up port if -n. */
                            if (nflag)
                                    sv = NULL;
                            else {
                                    sv = getservbyport(
                                        ntohs(atoi(portlist[i])),
                                        uflag ? "udp" : "tcp");
                            }

                            fprintf(stderr,
                                "Connection to %s %s port [%s/%s] "
                                "succeeded!\n", host, portlist[i],
                                uflag ? "udp" : "tcp",
                                sv ? sv->s_name : "*");

3 civarında udptest sorunları açık sokete yazar. Bunun IPv6 için çalışmadığını ve yaklaşık 100 bağlantı noktasının kontrol edilmesinden sonra başarısız olduğunu belirten bir not var.

Bu yüzden diğer öneri geçerli olsa da, bu özel durumda bunun olduğunu sanmıyorum.


udptestaradığım işlev de bu , sorumu cevaplıyor. Sağladığınız bağlantıdan "* udptest () * UDP limanının olup olmadığını görmek için birkaç yazı yaz"
Patrick McMahon

Evet, kontrol ettim ve yazılarını da gördüm. Cevap tekrarı.
kayalık

@PatrickMcMahon - bu sorunuza cevap veriyorsa, büyük onay işaretine tıklayarak kabul edin.
kas

17

Aslında, öyle değil. Yaparak kontrol edebilirsiniz:

$ nc -vz -u 8.8.8.8 53 
Connection to 8.8.8.8 53 port [udp/domain] succeeded!
$ nc -vz -u 8.8.8.8 54
Connection to 8.8.8.8 54 port [udp/*] succeeded!
$ nc -vz -u 8.8.8.8 59
Connection to 8.8.8.8 59 port [udp/*] succeeded!
$ 

Yani UDP ile size geri bilgi vermeyecekse, gerçekten kontrol edebileceğiniz bir şey değil.


9

Bir UDP olanı bile olsa bir portun kapalı olduğunu gösteren bir ICMP mesajı var. Böylece bir ana bilgisayar bu mesajı gönderirse, portun kapalı olduğu varsayılabilir.

https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Destination_unreachable


4
UDP'nin bağlantısız olması nedeniyle, açık bir bağlantı noktasını güvenlik duvarı olan bir bağlantı noktasından kayıp bir paketten güvenilir bir şekilde ayıramayacağınızı unutmayın.
Mark

Çok doğru. Teorik olarak, paketi almanız da mümkün olacak ve liman gerçekten kapalı değil.
phk

9

Benim farklı düşüncelerim var:

a:~# nc -luk 10.12.0.12 667 // listen on UDP port 667
b:~# nc -uv 10.12.0.12 667  // check if port is open 
nc: 10.12.0.12 (10.12.0.12) 667 [667] open
I love stackexchange // send a message
a:~# nc -luk 10.12.0.12 667
I love stackexchange // receive the message.

Buna dayanarak, udp portundaki a ve b arasındaki bağlantının mümkün olup olmadığını kontrol edebilirsiniz. Daha sonra tcpdump kullanarak kontrol etmeye devam edebilirsiniz.


1
Ah evet bunu beğendim. Her iki düğüme de erişiminiz olup olmadığını test etmek için iyi bir yoldur. Sanırım soruyu sorduğumda "kara kutuyu nasıl test edeceğimi" yönlendiriyordum ya da harici bir düğümü araştırıyordum. Bunu yapmanın sonucu netcat garanti edemez.
Patrick McMahon

IP adresini genişletebilir misiniz 10.12.0.12? Neden her iki bilgisayarda da kullanılıyor?
Sopalajo de Arrierez
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.