基于python的端口扫描
前言
端口扫描,就是逐个对一段端口或指定的端口进行扫描。通过扫描结果可以知道一台计算机上都提供了哪些服务,然后就可以通过所提供的这些服务的己知漏洞就可进行攻击。其原理是当一个主机向远端一个服务器的某一个端口提出建立一个连接的请求,如果对方有此项服务,就会应答,如果对方未安装此项服务时,即使你向相应的端口发出请求,对方仍无应答,利用这个原理,如果对所有熟知端口或自己选定的某个范围内的熟知端口分别建立连接,并记录下远端服务器所给予的应答,通过查看一记录就可以知道目标服务器上都安装了哪些服务,这就是端口扫描,通过端口扫描,就可以搜集到很多关于目标主机的各种很有参考价值的信息。例如,对方是否提供FTP服务、WWW服务或其它服务。
端口扫描的工具:
Nmap
Nmap -p -sV ip 通过nmap 进行端口扫描
如上图所示,开放端口 22 80 111 57695
如果不是内网靶机,推荐在线端口扫描工具
在线扫描不会暴露自己的IP地址安全。
Python是实现端口扫描
基于python-nmap模块的端口扫描
注意:如果采用windows系统,安装nmap模块 安装 python-nmap模块

import nmap def NmapScan(targetIP, targetPort): nm = nmap.PortScanner() try: result = nm.scan(hosts=targetIP, arguments='-p'+targetPort) for i in targetPort.split(','): i=int(i.strip()) port_infor = result['scan'][targetIP]['tcp'][i] print("[{}] : [{}]".format(i, port_infor['state'] )) except Exception as e: print(e) NmapScan("192.168.159.130",'80,48,445,20')
基于socket的端口扫描
加入了线程

from os import name import threading from socket import * import tqdm # 进度条,可自行加上 lock = threading.Lock() # 确保 多个线程在共享资源的时候不会出现脏数据 openNum=0 # 端口开放数量统计 threads=[] # 线程池 def portscanner(host,port): global openNum try: s=socket(AF_INET,SOCK_STREAM) s.connect((host,port)) lock.acquire() openNum+=1 print(f"{port} open") lock.release() s.close() except: pass def main(ip,ports=range(65535)): # 设置 端口缺省值0-65535 setdefaulttimeout(1) for port in ports: t=threading.Thread(target=portscanner,args=(ip,port)) threads.append(t) t.start() for t in threads: t.join() print(f"PortScan is Finish ,OpenNum is {openNum}") if __name__ == '__main__': ip='10.0.11.11' # main(ip,[22,101,8080,8000]) # 输入端口扫描 main(ip) # 全端口扫描
人的痛苦源于对自己无能的愤怒!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏