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.pswp.cn/bicheng/80908.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80908.shtml
英文地址,請注明出處:http://en.pswp.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 的類型都是字符…