博客
关于我
端口探测
阅读量:376 次
发布时间:2019-03-05

本文共 3316 字,大约阅读时间需要 11 分钟。

端口扫描技术及其实现

前言

端口是设备与外界进行通信的重要接口。就像一栋房子的门一样,端口是服务器与外部网络进行交流的通道。不同的端口可能指向不同的服务或应用程序。如果入侵者能够掌握服务器的控制权,首先需要通过一个开放的端口进入系统,然后利用获得的权限逐步扩大影响范围。因此,了解服务器开启的端口状态以及这些端口后面所提供的服务信息,对于网络安全防护具有极其重要的意义。

传统的端口扫描技术能够帮助网络管理员识别开放的端口和潜在的安全漏洞。通过扫描可以发现哪些端口正在监听请求,哪些端口可能被恶意利用,从而采取相应的安全防护措施。

代码演示

本节将展示一个用于端口扫描的Python程序,该程序能够高效地扫描目标机器上开放的端口,并支持多线程操作以加快扫描速度。

代码结构

  • 导入必要的库

    • sys:用于标准输入输出操作
    • socket:用于socket编程
    • threading:用于多线程操作
    • queue:用于线程间的数据通信
  • 端口扫描类

    import socket
    import threading
    import queue
    class PortScanner(threading.Thread):
    def __init__(self, port_queue, ip):
    threading.Thread.__init__(self)
    self.port_queue = port_queue
    self.ip = ip
    def run(self):
    while True:
    if self.port_queue.empty():
    break
    port = self.port_queue.get(timeout=0.5)
    try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(3)
    conn = s.connect_ex((self.ip, port))
    if conn == 0:
    print(f"[{port}] OPEN")
    except Exception as e:
    print(e)
    finally:
    s.close()
  • 启动端口扫描

    def StartScan(target_ip, ports, num_threads):
    port_list = []
    if '-' in ports:
    start, end = map(int, ports.split('-'))
    port_list = list(range(start, end + 1))
    else:
    port_list.append(int(ports))
    port_queue = queue.Queue()
    for port in port_list:
    port_queue.put(port)
    threads = []
    for _ in range(num_threads):
    threads.append(PortScanner(port_queue, target_ip))
    for thread in threads:
    thread.start()
    for thread in threads:
    thread.join()
  • 主函数入口

    if __name__ == '__main__':
    parser = optparse.OptionParser('usage: %prog [options]')
    parser.add_option('-i', '--ip', dest='target_ip', default='127.0.0.1',
    type='str', help='目标IP地址')
    parser.add_option('-p', '--port', dest='target_port', default='80',
    type='str', help='要扫描的端口或端口范围')
    parser.add_option('-t', '--thread', dest='thread_num', default=100,
    type='int', help='同时扫描的线程数')
    options, args = parser.parse_args()
    StartScan(options.target_ip, options.target_port, options.thread_num)
  • 基于Nmap库的优化版本

    为了提高扫描效率和准确性,可以利用现有的Nmap库进行端口扫描。以下是基于Nmap的优化代码:

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    import nmap
    import optparse
    def NmapScan(target_ip, target_port):
    nm = nmap.PortScanner()
    try:
    result = nm.scan(hosts=target_ip, arguments='-p' + str(target_port))
    port_info = result['scan'][target_ip]['tcp'][int(target_port)]
    print(f"[{target_port}] : {port_info['state']}")
    except Exception as e:
    print(e)
    if __name__ == '__main__':
    parser = optparse.OptionParser('usage: python %prog [options]')
    parser.add_option('-i', '--ip', dest='target_ip', default='192.168.1.1',
    type='str', help='目标IP地址')
    parser.add_option('-p', '--port', dest='target_port', default='80',
    type='str', help='要扫描的端口或端口范围')
    options, args = parser.parse_args()
    for port in options.target_port.split(','):
    NmapScan(options.target_ip, port)

    运行效果

    运行上述代码后,程序会输出每个端口的状态信息。例如:

    80 : OPEN
    443 : OPEN

    从输出结果可以看出,目标服务器开放了80端口和443端口。这些端口分别对应HTTP和HTTPS服务,可能意味着服务器上运行着相应的网络服务。

    转载地址:http://bfog.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
    查看>>
    Objective-C实现euler method欧拉法算法(附完整源码)
    查看>>
    Objective-C实现eulerianPath欧拉路径算法(附完整源码)
    查看>>
    Objective-C实现eval函数功能(附完整源码)
    查看>>
    Objective-C实现Exceeding words超词(差距是ascii码的距离) 算法(附完整源码)
    查看>>
    Objective-C实现extended euclidean algorithm扩展欧几里得算法(附完整源码)
    查看>>
    Objective-C实现Factorial digit sum阶乘数字和算法(附完整源码)
    查看>>
    Objective-C实现factorial iterative阶乘迭代算法(附完整源码)
    查看>>
    Objective-C实现factorial recursive阶乘递归算法(附完整源码)
    查看>>
    Objective-C实现FigurateNumber垛积数算法(附完整源码)
    查看>>
    Objective-C实现Gale-Shapley盖尔-沙普利算法(附完整源码)
    查看>>
    Objective-C实现hamiltonianCycle哈密尔顿图算法(附完整源码)
    查看>>
    Objective-C实现hamming numbers汉明数算法(附完整源码)
    查看>>
    Objective-C实现hanning 窗(附完整源码)
    查看>>
    Objective-C实现hanoiTower汉诺塔算法(附完整源码)
    查看>>
    Objective-C实现hardy ramanujana定理算法(附完整源码)
    查看>>
    Objective-C实现highest response ratio next高响应比优先调度算法(附完整源码)
    查看>>
    Objective-C实现hill climbing爬山法用来寻找函数的最大值算法(附完整源码)
    查看>>
    Objective-C实现hornerMethod霍纳法算法(附完整源码)
    查看>>
    Objective-C实现Http Post请求(附完整源码)
    查看>>