DNS 端口侦听器未接收到连接

DNS port listener not receiving connections

我的 objective 是建立一个服务器套接字,监听 DNS 端口的连接,不响应任何内容,以收集有关正在寻找 DNS 服务器的 IP 地址的一些信息。我唯一需要收集的是源 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()

不幸的是,我必须 运行 在使用 VirtualBox 的 VirtualMachine 上执行此操作。我在我的路由器上为端口 53 创建了一个端口转发规则,我认为我做对了,因为站点“https://canyouseeme.org/”告诉我我的 ISP 没有阻止端口。我在 VirtualMachine 上创建了端口转发规则,以便主机端口 53 上的所有流量都将重定向到来宾(我的程序所在的位置)。这是我至少希望的。我什至在 Windows 防火墙中创建了一个允许端口 53 连接的规则。最后,我使用 iptables 允许我的 VirtualMachine 的端口 53 上的传入流量。我仍然没有得到任何东西。可能我遗漏了一些东西,也许我必须在 python 中使用 dnslib 才能 "attract" 连接。或者我需要在 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

调试此问题的标准方法是使用 wireshark (https://www.wireshark.org/#download) 或其他数据包嗅探器。您可以在 windows 主机和来宾实例上安装它。假设你的网络是这样的:

                                ---------------------------
------------      --------      |         |---------------|
|dns client| ---- |router| ---- |win host | guest instance| 
------------      --------      ---------------------------
  1. 在 windows 主机的局域网适配器 (192.168.1.11) 上侦听 tcp 53 数据包。如果那里没有显示数据包,则端口 forwarding/firewall 或 win host 防火墙有问题。请记住,您的家庭路由器可能充当 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
> 

如果一切正常,我想人们根本就没有探测您的网络,或者您的 ISP 具有智能入侵防御功能,它不会阻止 canyouseme,但会阻止 netcat 的 dns 扫描。