Прослушиватель порта DNS не принимает соединения - PullRequest
0 голосов
/ 27 мая 2020

Моя цель - создать сокет сервера, который будет прослушивать DNS-порт для соединений, ничего не отвечая, чтобы собрать некоторую информацию об IP-адресах, которые ищут DNS-серверы. Единственное, что мне нужно собрать, это исходный IP. Я написал этот код:

import socket


def create_socket():
    global host
    global port
    global s
    try:
        host = ''
        port = 53
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    except socket.error as msg:
        print('Socekt creation error:' + str(msg))

def bind_socket():
    try:
        print('Binding socket to port: ' + str(port) + ', Host: ' + str(host))
        s.bind((host, port))
    except socket.error as msg:
        print('Socket Binding error: ' + str(msg))


def socket_receive():
    while True:
        msg = s.recvfrom(1024)
        print('IP: ' + str(msg[1]) + ',   DATA: ' + msg[0].decode(encoding='cp1252', errors='ignore'))  

def main():
    create_socket()
    bind_socket()
    socket_receive()

main()

К сожалению, мне приходится запускать его на VirtualMachine с помощью VirtualBox. Я создал правило переадресации порта для порта 53 на моем маршрутизаторе, и я думаю, что сделал это правильно, потому что сайт «https://canyouseeme.org/» сообщает мне, что мой интернет-провайдер не блокирует порт. Я создал правило переадресации портов на VirtualMachine, так что весь трафик c на порте 53 хоста будет перенаправлен на гостя (где находится моя программа). По крайней мере, я на это надеюсь. Я создал правило даже в брандмауэре Windows, разрешающее соединения для порта 53. Наконец, я использовал iptables , чтобы разрешить входящий трафик c на порт 53 моей VirtualMachine. Я по-прежнему ничего не понимаю. Наверное что-то упускаю, может надо использовать dnslib в python, чтобы "привлекать" соединения. Или мне нужно еще что-то настроить на Windows или на роутере. Может, мне не хватает важных понятий. Почему у меня нет подключений?

PS C:\WINDOWS\system32> ipconfig

Windows IP Configuration


Ethernet adapter Ethernet 2:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter Ethernet 3:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::e0ce:c8f6:a594:f24d%17
   IPv4 Address. . . . . . . . . . . : 192.168.56.1
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

Wireless LAN adapter Connessione alla rete locale (LAN)* 2:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Connessione alla rete locale (LAN)* 3:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter Ethernet:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . : domain.name
   Link-local IPv6 Address . . . . . : fe80::d03d:c2c9:163e:3eb6%6
   IPv4 Address. . . . . . . . . . . : 192.168.1.11
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : fe80::b239:56ff:fea9:f35e%6
                                       192.168.1.1

Ethernet adapter Connessione di rete Bluetooth 2:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
PS C:\WINDOWS\system32> netstat -na|findstr 53
  TCP    0.0.0.0:53             0.0.0.0:0              LISTENING
  TCP    0.0.0.0:5353           0.0.0.0:0              LISTENING
  TCP    127.0.0.1:5354         0.0.0.0:0              LISTENING
  UDP    0.0.0.0:53             *:*
  UDP    0.0.0.0:5353           *:*
  UDP    0.0.0.0:5353           *:*
  UDP    0.0.0.0:5353           *:*
  UDP    0.0.0.0:5353           *:*
  UDP    0.0.0.0:5353           *:*
  UDP    0.0.0.0:5355           *:*
  UDP    192.168.1.11:5353      *:*
  UDP    192.168.56.1:5353      *:*
  UDP    [::]:5353              *:*
  UDP    [::]:5353              *:*
  UDP    [::]:5353              *:*
  UDP    [::]:5355              *:*
  UDP    [::1]:5353             *:*

UFW на гостевой системе:

diego@diego-VirtualBox:~$ sudo ufw status
[sudo] password di diego: 
Stato: attivo

A                          Azione      Da
-                          ------      --
53                         ALLOW       Anywhere                  
19                         ALLOW       Anywhere                  
5353                       ALLOW       Anywhere                  
123                        ALLOW       Anywhere                  
53 (v6)                    ALLOW       Anywhere (v6)             
19 (v6)                    ALLOW       Anywhere (v6)             
5353 (v6)                  ALLOW       Anywhere (v6)             
123 (v6)                   ALLOW       Anywhere (v6)

ifconfig на гостевой системе

diego@diego-VirtualBox:~$ sudo ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::7059:da6f:6a4a:8f4e  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:34:d5:6d  txqueuelen 1000  (Ethernet)
        RX packets 395  bytes 307669 (307.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 278  bytes 33866 (33.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Loopback locale)
        RX packets 35  bytes 3215 (3.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 35  bytes 3215 (3.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

iptables в гостевой системе:

diego@diego-VirtualBox:~$ sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ufw-before-logging-input  all  --  anywhere             anywhere            
ufw-before-input  all  --  anywhere             anywhere            
ufw-after-input  all  --  anywhere             anywhere            
ufw-after-logging-input  all  --  anywhere             anywhere            
ufw-reject-input  all  --  anywhere             anywhere            
ufw-track-input  all  --  anywhere             anywhere            
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain

1 Ответ

0 голосов
/ 28 мая 2020

Стандартный способ отладки - использовать wirehark (https://www.wireshark.org/#download) или другой сниффер пакетов. Вы можете установить его как на свой windows хост, так и на гостевой экземпляр. Предположим, ваша сеть выглядит так:

                                ---------------------------
------------      --------      |         |---------------|
|dns client| ---- |router| ---- |win host | guest instance| 
------------      --------      ---------------------------
  1. Слушайте пакеты tcp 53 на сетевом адаптере windows хоста (192.168.1.11). Если там нет пакетов, у вас проблема с переадресацией портов / брандмауэром или брандмауэром хоста. Имейте в виду, что ваш домашний маршрутизатор может действовать как DNS-сервер и принимать пакеты.
  2. Слушайте пакеты tcp 53 на гостевом экземпляре. (enp0s3) Если вы видите пакеты на уровне хоста windows, но не на гостевом уровне, вы можете попробовать переключить тип используемого адаптера как мостовой вместо NAT или наоборот.

Кроме того, лучше сначала выполнить отладку с помощью вашего DNS-клиента внутри маршрутизатора, чтобы убедиться, что он действительно отправляет запросы к вашей приманке. Если вы используете nslookup или другой стандартный клиент, вам необходимо убедиться, что вы установили свой хост windows в качестве контроллера домена. например,

% nslookup 
> server 192.168.1.1
Default server: 192.168.1.1
Address: 192.168.1.1#53
> 

Если все это работает, я полагаю, что люди просто не проверяют вашу сеть или у вашего провайдера есть интеллектуальная система предотвращения вторжений, которая не останавливает canyouseme, но останавливает сканирование DNS ala netcat.

...