美文网首页
20 行代码编写一个简单的端口扫描器

20 行代码编写一个简单的端口扫描器

作者: 程序员小西 | 来源:发表于2022-04-09 14:06 被阅读0次

    端口扫描是非常实用的,不止用在信息安全方面,日常的运维也用得到。这方面的工具也不要太多,搞过 CTF 的朋友会告诉你有多少端口扫描工具,那为什么还要用 Python 再自己实现一遍?这个问题就像饭店里的菜已经很好吃了,为什么还要自己烧菜一样,主要还是为了适合自己的口味,添加自己需要的个性功能。

    今天我们将用 20 行代码编写一个简单的端口扫描器。让我们开始吧!

    1、需要的库

    都是标准库,因此内网环境也不影响:

    import socket
    import argparse
    import sys
    import time
    

    套接字库是一个低级网络接口库,它允许我们在脚本中创建网络连接。argparse 库用于解释传递给我们脚本的参数。sys 库允许我们与系统交互。最后,time 库用来统计耗时。

    2、获取一个 host 地址

    parser = argparse.ArgumentParser()
    parser.add_argument('host')
    args = parser.parse_args()
    

    这样脚本在运行的时候,第一个参数就可以传入一个主机名或 ip 地址,下文就可以通过 args.host 来使用。

    3、循环所有的端口

    端口占用 2 个字节,因此其范围是 1-65535

    start = time.time()
    try:
        for port in range(1, 65536):
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(1)
            result = sock.connect_ex((args.host, port))
            if result == 0:
                print("Port: {} Open".format(port))
            sock.close()
    except KeyboardInterrupt:
        sys.exit()
    end = time.time()
    

    如果 sock.connect_ex 返回了 0 说明端口开放,为了让程序正常退出,我们加上 try except 来捕获键盘发起的中断。

    4、完整脚本

    一旦 for 循环完成并扫描了所有端口,我们将获取时间并打印出脚本运行的时间:

    import socket
    import argparse
    import sys
    import time
    
    parser = argparse.ArgumentParser()
    parser.add_argument('host')
    args = parser.parse_args()
    start = time.time()
    
    try:
        for port in range(1, 65536):
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(1)
            result = sock.connect_ex((args.host, port))
            if result == 0:
                print("Port: {} Open".format(port))
            sock.close()
    except KeyboardInterrupt:
        sys.exit()
    
    end = time.time()
    print(f"Scanning completed in: {end-start:.3f}s")
    

    除去空行,代码一共 20 行,运行效果如下:

    图片.png

    最后

    本文分享了端口扫描的简单代码,建议收藏,有帮助还请点赞、收藏、关注。

    相关文章

      网友评论

          本文标题:20 行代码编写一个简单的端口扫描器

          本文链接:https://www.haomeiwen.com/subject/exepsrtx.html