You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python检测网站活跃端口?优化现有高耗时检测代码

Optimizing Your Port Scanning Code for Speed

Hey there! Your current code is running slow mainly because it checks ports one after another (serially) and doesn’t set a timeout for unresponsive ports—those can hang for ages and drag down the whole process. Let’s fix that with parallel processing and smarter timeout handling.

Key Issues in the Original Code

  • Serial Execution: It waits for each port check to finish before moving to the next. With 10,000 ports, this adds up fast.
  • No Timeout: urlopen has a long default timeout, so unresponsive ports will make your code stall unnecessarily.
  • Verbose Error Output: Printing every failed port clutters your output and adds minor overhead.

Optimized Code Using Thread Pooling

We’ll use concurrent.futures.ThreadPoolExecutor to check multiple ports at once, plus set a short timeout to skip unresponsive ports quickly:

from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
from concurrent.futures import ThreadPoolExecutor

def check_port(port):
    url = f"http://college.edu.in:{port}"
    req = Request(url)
    try:
        # Set a short timeout (adjust based on your network stability)
        response = urlopen(req, timeout=2)
        print(f"✅ Active port found: {port}")
    except (URLError, HTTPError, TimeoutError) as e:
        # Optional: Uncomment below to log errors for debugging
        # print(f"❌ Port {port} failed: {str(e)}")
        pass

if __name__ == "__main__":
    # Adjust max_workers based on your network capacity (20-50 is a safe start)
    with ThreadPoolExecutor(max_workers=30) as executor:
        # Map all ports to the check_port function for parallel processing
        executor.map(check_port, range(1, 10000))

What’s Improved Here?

  • Parallel Processing: The thread pool lets us check 30 ports simultaneously (tweak max_workers—too many threads can overwhelm your network, so start moderate).
  • Timeout: The timeout=2 parameter ensures we move on from unresponsive ports after 2 seconds, eliminating long waits.
  • Cleaner Output: We only print ports that are active, so you don’t have to sift through thousands of error messages (enable error logging if you need debug details).

Extra Tips

  • Always ensure you have explicit permission to scan the target server—unauthorized scanning may violate security policies or laws.
  • If scanning a massive port range, split it into smaller chunks to avoid overwhelming the server.
  • For even faster results, you could use asynchronous code with asyncio and aiohttp, but thread pooling is simpler for this use case.

内容的提问来源于stack exchange,提问作者regretter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:14:58