基于python的端口扫描(升级版)

今天给大家带来一个用python写的端口扫描小程序,需要借助一个python的库

Scapy是一个强大的Python库,用于构建和发送网络数据包,以及对网络进行各种类型的分析和操作。

pip install scapy

通过Scapy,您可以方便地构造各种类型的网络数据包,包括IP数据包、TCP/UDP数据包、ICMP消息等。您可以设置数据包的各个字段,如源IP地址、目的IP地址、端口号等。

此外,Scapy还提供了很多网络分析和操作的功能。您可以捕获网络流量并分析数据包,进行网络扫描、探测和嗅探,执行网络攻击和防御,以及进行定制化的网络协议开发等等。

下面是扫描全端口的python脚本

import socket,time,threading,os

from scapy.layers.inet import TCP, IP
from scapy.layers.l2 import ARP
from scapy.sendrecv import sr1

#配置日志记录的级别为ERROR
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

# 对目标IP进行端口扫描,尝试连接目标IP和端口,如果连接成功,说明端口开放,否则未开放。
#单线程进行端口扫描
def socket_port_single(ip):
    for port in range(1,65536):
        try:
            s = socket.socket()
            s.settimeout(0.5)
            s.connect((ip, port))
            print(f"端口: {port} 可用.")
            s.close()
        except ConnectionRefusedError:
            pass
            #print(f" {ip} 地址不可用。")
        except socket.timeout:
            pass
        finally:
            s.close()

if __name__ == '__main__':
    socket_port_single('192.168.21.133')#单线程

此程序因为是单线程,在扫描过程中运行速度较慢,接下来对代码进行了改进

import socket,time,threading,os

from scapy.layers.inet import TCP, IP
from scapy.layers.l2 import ARP
from scapy.sendrecv import sr1

#配置日志记录的级别为ERROR
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

def socket_port_thread(ip, start):
    for port in range(start,start+50):#50个为一组扫描
        try:
            s = socket.socket()
            s.settimeout(0.5)#设置无法连接情况下超时时间,提升扫描效率
            s.connect((ip,port))
            print(f"端口: {port} 可用.")
            s.close()
        except:
            pass

if __name__ == '__main__':

    for i in range(1,5000,50):#多线程
       threading.Thread(target=socket_port_thread,args=('192.168.21.133',i)).start()

此程序可用与绝大多数情况,为了追求更快的速度,我们可以扫描常用的端口

import socket,time,threading,os

from scapy.layers.inet import TCP, IP
from scapy.layers.l2 import ARP
from scapy.sendrecv import sr1

#配置日志记录的级别为ERROR
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

def socket_port_normal(ip):
    list = [7, 21, 22, 23, 25, 43, 53, 67, 68, 69, 79, 80, 81, 88, 3306, 110, 113, 119,
            123, 135, 135,137, 138, 139, 143, 161, 162, 179, 194, 220, 389, 443, 445,
            465, 513, 520, 521, 546, 547,554, 563, 631, 636, 991, 993, 995, 1080, 1194,
            1433, 1434, 1494, 1521, 1701, 1723, 1755,1812, 1813, 1863, 3269,109 , 3307,
            3389, 3544, 4369, 5060, 5061, 5355, 5432, 5671, 5672, 6379,7001, 8080, 8081,
            8088, 8443, 8883, 8888, 9443,9988, 9988, 15672, 27017,50389, 50636, 61614]
    for port in list:
        try:
            s = socket.socket()
            s.settimeout(1)#设置无法连接情况下超时时间,提升扫描效率
            s.connect((ip,port))
            print(f"端口: {port} 可用.")
            s.close()
        except:
            pass
        time.sleep(3)#设置休眠时间,防止防火墙封禁

if __name__ == '__main__':

    socket_port_normal('192.168.21.133')#固定端口扫描

tips:在进行端口扫描的时候,需要装一个插件,这个是wireshark自带的插件

Npcap是一个Windows平台上的网络数据包捕获库和驱动程序。

Npcap的主要特点包括:

  1. 数据包捕获:Npcap提供了高性能的网络数据包捕获功能,可以捕获来自各种网络接口的数据包。它支持混杂模式,可以捕获整个网络流量,而不仅仅是目标主机的流量。

  2. 高级功能:Npcap提供了许多高级功能,如数据包过滤、统计信息收集、数据包注入和回放等。用户可以使用这些功能来进行网络流量分析、安全审计和测试等任务。

猜你喜欢

转载自blog.csdn.net/qq_56698744/article/details/131680373