Python程序,输入IP,扫描该IP哪些端口对外是开放的,输出端口列表

#!/usr/bin/env python
# -*- coding: utf-8 -*-"""
IP端口扫描程序
输入IP地址,扫描该IP哪些端口对外是开放的,输出端口列表
"""import socket
import sys
import concurrent.futures
import ipaddress
from tabulate import tabulate
import timedef is_valid_ip(ip):"""验证IP地址是否有效"""try:ipaddress.ip_address(ip)return Trueexcept ValueError:return Falsedef scan_port(ip, port, timeout=1):"""扫描单个端口是否开放参数:ip (str): 目标IP地址port (int): 要扫描的端口timeout (float): 连接超时时间(秒)返回:bool: 如果端口开放返回True,否则返回False"""try:# 创建TCP套接字sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(timeout)# 尝试连接result = sock.connect_ex((ip, port))# 关闭套接字sock.close()# 如果连接成功,端口是开放的return result == 0except (socket.error, socket.timeout, OSError):return Falsedef scan_ports(ip, port_range=None, max_workers=100):"""扫描IP地址的多个端口参数:ip (str): 目标IP地址port_range (tuple): 端口范围,格式为(起始端口, 结束端口)max_workers (int): 最大并发线程数返回:list: 开放端口列表"""if port_range is None:# 默认扫描常见端口port_range = (1, 1024)start_port, end_port = port_rangeopen_ports = []total_ports = end_port - start_port + 1print(f"开始扫描 {ip} 的端口 {start_port}-{end_port}...")start_time = time.time()# 使用线程池进行并发扫描with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:# 创建扫描任务future_to_port = {executor.submit(scan_port, ip, port): port for port in range(start_port, end_port + 1)}# 处理完成的任务completed = 0for future in concurrent.futures.as_completed(future_to_port):port = future_to_port[future]completed += 1# 显示进度if completed % 100 == 0 or completed == total_ports:progress = (completed / total_ports) * 100elapsed = time.time() - start_timeprint(f"进度: {completed}/{total_ports} ({progress:.1f}%) - 已用时间: {elapsed:.1f}秒", end="\r")try:if future.result():open_ports.append(port)print(f"\n发现开放端口: {port}")except Exception as e:print(f"\n扫描端口 {port} 时出错: {e}")print(f"\n扫描完成! 总用时: {time.time() - start_time:.1f}秒")return open_portsdef display_open_ports(ip, open_ports):"""显示开放端口列表"""if not open_ports:print(f"\n{ip} 没有发现开放的端口")return# 尝试获取常见端口的服务名称port_info = []for port in sorted(open_ports):try:service = socket.getservbyport(port)except (socket.error, OSError):service = "未知"port_info.append([port, service])# 显示表格print(f"\n{ip} 的开放端口:")headers = ["端口", "可能的服务"]print(tabulate(port_info, headers=headers, tablefmt="grid"))def main():"""主函数"""# 获取用户输入if len(sys.argv) > 1:target_ip = sys.argv[1]else:target_ip = input("请输入要扫描的IP地址: ")# 验证IP地址if not is_valid_ip(target_ip):print(f"错误: '{target_ip}' 不是有效的IP地址")sys.exit(1)# 获取端口范围try:custom_range = input("请输入要扫描的端口范围 (格式: 起始端口-结束端口) [默认: 1-1024]: ")if custom_range:start, end = map(int, custom_range.split('-'))if start < 1 or end > 65535 or start > end:raise ValueErrorport_range = (start, end)else:port_range = (1, 1024)except ValueError:print("错误: 无效的端口范围,使用默认范围 1-1024")port_range = (1, 1024)# 扫描端口open_ports = scan_ports(target_ip, port_range)# 显示结果display_open_ports(target_ip, open_ports)if __name__ == "__main__":try:main()except KeyboardInterrupt:print("\n\n扫描被用户中断")sys.exit(0)except Exception as e:print(f"\n程序执行出错: {e}")sys.exit(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python----神经网络(《Inverted Residuals and Linear Bottlenecks》论文概括和MobileNetV2网络)

一、论文 MobileNetV2 论文提出了一种新的移动架构&#xff0c;该架构提高了移动模型在多个任务和基准测试中的性能&#xff0c;以及在各种不同模型大小范围内的性能. 该架构基于倒残差结构&#xff0c;其中 shortcut 连接在 thin bottleneck 层之间. 中间的 expansion 层使用轻…

Maven私服搭建与登录全攻略

目录 1.背景2.简介3.安装4.启动总结参考文献 1.背景 回顾下maven的构建流程&#xff0c;如果没有私服&#xff0c;我们所需的所有jar包都需要通过maven的中央仓库或者第三方的maven仓库下载到本地&#xff0c;当一个公司或者一个团队所有人都重复的从maven仓库下载jar包&#…

EF Core 数据库迁移命令参考

在使用 Entity Framework Core 时&#xff0c;若你希望通过 Package Manager Console (PMC) 执行迁移相关命令&#xff0c;以下是常用的 EF Core 迁移命令&#xff1a; PMC 方式 ✅ 常用 EF Core PMC 命令&#xff08;适用于迁移&#xff09; 操作PMC 命令添加迁移Add-Migra…

商业 |阿里云又丢出了核弹

行业翘首以盼的DeepSeek-R2没等到&#xff0c;阿里云却先一步丢出了核弹。 4月29日凌晨&#xff0c;阿里云正式上线了Qwen3系列模型“全家桶”&#xff0c;包含2个MoE模型、6个稠密模型。 八个模型&#xff0c;小到0.6B大到235B&#xff0c;既能在手机使用&#xff0c;也有旗…

《Python星球日记》 第66天:序列建模与语言模型

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、传统语言模型1. n-gram 模型基础2. n-gram 模型的局限性二、RNN 在语言建模中的应用1. 语言模型的基本原理2. RNN 构建语言模型的优势3. 实…

20250510解决NanoPi NEO core开发板在Ubuntu core22.04.3系统下适配移远的4G模块EC200A-CN的问题

1、h3-eflasher-friendlycore-jammy-4.14-armhf-20250402.img.gz 在WIN10下使用7-ZIP解压缩/ubuntu20.04下使用tar 2、Win32DiskImager.exe 写如32GB的TF卡。【以管理员身份运行】 3、TF卡如果已经做过会有3个磁盘分区&#xff0c;可以使用SD Card Formatter/SDCardFormatterv5…

C# 的异步任务中, 如何暂停, 继续,停止任务

namespace taskTest {using System;using System.Threading;using System.Threading.Tasks;public class MyService{private Task? workTask;private readonly SemaphoreSlim semaphore new SemaphoreSlim(0, 1); // 初始为 0&#xff0c;Start() 启动时手动放行private read…

关于nextjs中next-sitemap插件生成文件样式丢失问题及自定义样式处理

现象没有默认样式 修改后 代码配置如下 next-sitemap.config.js如下 // const { routing } require(./src/i18n/routing) ;const { flatten } require(lodash) const fs require(fs); const path require(path);// 改为硬编码locales值&#xff0c;与routing.ts保持一…

图片的require问题

问题 <template><!--第一种方式--><img :src"require(/assets/${imageName})" style"width:100px;" /><!--第二种方式--><img :src"require(imageUrl)" style"width:100px;" /> </template><…

【官方题解】StarryCoding 入门教育赛 2 | acm | 蓝桥杯 | 新手入门

比赛传送门&#xff1a; 本场比赛开始时题面存在一些问题&#xff0c;私密马赛&#xff01; A.池化【入门教育赛】 根据题目所给公式计算即可。 #include "bits/stdc.h"signed main() {int t; std::cin >> t;while (t --) {int l, k, s, p; std::cin >&…

课题推荐——低成本地磁导航入门,附公式推导和MATLAB例程运行演示

地磁导航利用地球磁场的自然特性&#xff0c;通过感知磁场变化&#xff0c;帮助机器人或无人设备实现定位和导航。相比于 GPS、激光雷达等导航方法&#xff0c;地磁导航具有以下优势&#xff1a; 低成本&#xff1a;使用地磁传感器&#xff08;如电子罗盘&#xff09;&#xff…

【人工智能】自然语言编程革命:腾讯云CodeBuddy实战5步搭建客户管理系统,效率飙升90%

CodeBuddy 导读一、产品介绍1.1 **什么是腾讯云代码助手&#xff1f;**1.2 插件安装1.2.1 IDE版本要求1.2.2 注意事项1.2.4 插件安装1.2.4.1 环境安装1.2.4.2 安装腾讯云AI代码助手** 1.2.5 功能介绍1.2.5.1 Craft&#xff08;智能代码生成&#xff09;1.2.5.2 Chat&#xff08…

游戏引擎学习第270天:生成可行走的点

回顾并为今天的内容定下基调 今天的计划虽然还不完全确定&#xff0c;可能会做一些内存分析&#xff0c;也有可能暂时不做&#xff0c;因为目前并没有特别迫切的需求。最终我们会根据当下的状态随性决定&#xff0c;重点是持续推动项目的进展&#xff0c;无论是 memory 方面还…

Java反射详细介绍

的反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时动态获取类的信息、操作类的成员&#xff08;属性、方法、构造器&#xff09;&#xff0c;甚至修改类的行为。它是框架开发&#xff08;如 Spring、MyBatis&#xff09;、单元测试工具&a…

c语言第一个小游戏:贪吃蛇小游戏05

贪吃蛇脱缰自动向右走&#xff1a;脱缰的野蛇 #include <curses.h> #include <stdlib.h> struct snake{ int hang; int lie; struct snake *next; }; struct snake *head; struct snake *tail; void initNcurse() { initscr(); keypad(stdscr,1); } int …

react-diff-viewer 如何实现语法高亮

前言 react-diff-viewer 是一个很好的 diff 展示库&#xff0c;但是也有一些坑点和不完善的地方&#xff0c;本文旨在描述如何在这个库中实现自定义语法高亮。 Syntax highlighting is a bit tricky when combined with diff. Here, React Diff Viewer provides a simple rend…

coco数据集mAP评估

0 coco数据集划分说明 1 用yolo自带的评估 from ultralytics import YOLOmodel YOLO("../spatial-perception/checkpoints/yolo11n.pt")metrics model.val(data"./coco.yaml", save_jsonTrue) ## save_json为True,可以把预测结果存成json文件&#xff…

sensitive-word-admin v2.0.0 全新 ui 版本发布!vue+前后端分离

前言 sensitive-word-admin 最初的定位是让大家知道如何使用 sensitive-word&#xff0c;所以开始想做个简单的例子。 不过秉持着把一个工具做好的原则&#xff0c;也收到很多小伙伴的建议。 v2.0.0 在 ruoyi-vue&#xff08;也非常感谢若依作者多年来的无私奉献&#xff09…

好消息!PyCharm 社区版现已支持直接选择 WSL 终端为默认终端

在过去&#xff0c;PyCharm 社区版虽然提供了链接 Windows 子系统 Linux&#xff08;WSL&#xff09;终端的能力&#xff0c;但用户无法在设置中直接指定 WSL 为默认终端&#xff0c;这一功能仅限于专业版使用者。 而现在&#xff0c;在 PyCharm 2025.1.1 版本中&#xff0c;Je…

【Redis】string 字符串

文章目录 string 字符串常用命令设置和获取setgetmget & mset 计数操作incr & incrbydecr & decrbyincrbyfloat 字符串操作appendstrlengetrangesetrange 应用场景 string 字符串 关于 Redis 的字符串&#xff0c;有几点需要注意 Redis 所有的 key 的类型都是字符…