📜  Python中的网络扫描仪

📅  最后修改于: 2022-05-13 01:55:20.288000             🧑  作者: Mango

Python中的网络扫描仪

网络扫描仪是分析网络上可用主机的一种主要工具。网络扫描仪是一种 IP 扫描仪,用于扫描连接到多台计算机的网络。

要获取网络上可用主机的列表,有两种基本方法 -

  • ICMP 回显请求

    也可以通过使用“ping 命令”来了解。使用 IP 地址将 ICMP 数据包发送到主机,如果收到 ICMP 回显,则表示主机在线并正在接收信号。为此,有必要获取您希望测试主机是否连接的所有 IP 地址。此方法的工作原理是假设网络设备启用了 ICMP。

    import subprocess
      
    for ping in range(1,10):
        address = "127.0.0." + str(ping)
        res = subprocess.call(['ping', '-c', '3', address])
        if res == 0:
            print( "ping to", address, "OK")
        elif res == 2:
            print("no response from", address)
        else:
            print("ping to", address, "failed!")
    

    输出:

    此代码遍历所有可用的 IP 地址,ping 它们并检查回复。如果收到回声,则意味着主机已连接,如果没有收到回声,则看起来主机已关闭。
    注意:个人防火墙或通用防火墙通常设置为所谓的“隐身模式”,用于不对 ICMP 回显请求做出反应。

  • TCP 扫描

    为了克服回声请求方法的缺点,引入了TCP扫描方法,该方法适用于三次握手方法。这种方法有一个预先假设,即网络上的主机是开放的端口,我们必须猜测哪个端口是开放的。端口因您使用的操作系统而异。不同的操作系统具有下面列出的开放依赖端口。

    • linux:[20、21、22、23、25、80、111、443、445、631、993、995]
    • 窗户:[135、137、138、139、445]
    • 麦克:[22、445、548、631]

    3 次握手方法

    三向握手是 TCP/IP 网络中用于在本地主机/客户端和服务器之间创建连接的方法。这是一个三步方法,要求客户端和服务器在实际数据通信开始之前交换 SYN 和 ACK(确认)数据包。
    三向握手主要用于创建 TCP 套接字连接。它在以下情况下起作用:

    • 客户端节点通过 IP 网络将 SYN 数据包发送到同一网络或外部网络上的服务器。此数据包的目的是询问/推断服务器是否为新连接打开。
    • 目标服务器必须具有可以接受和启动新连接的开放端口。当服务器收到来自客户端节点的 SYN 数据包时,它会做出响应并返回一个确认回执——ACK 数据包或 SYN/ACK 数据包。
    • 客户端节点接收来自服务器的 SYN/ACK 并以 ACK 数据包进行响应。

    完成此过程后,将创建连接并且主机和服务器可以通信。

    #importing socket module
    import socket
      
    #creates a new socket using the given address family.
    socket_obj = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
      
    #setting up the default timeout in seconds for new socket object
    socket.setdefaulttimeout(1)
      
    #returns 0 if connection succeeds else raises error
    result = socket_obj.connect_ex((addr,port)) #address and port in the tuple format
      
    #closes te object
    socket_obj.close()