本文目录导读:

检测端口是否开放有多种方法,以下是几种常见脚本实现方案:
Python 脚本(推荐)
#!/usr/bin/env python3
import socket
import sys
def check_port(host, port, timeout=2):
"""检测端口是否开放"""
try:
# 创建socket对象
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
# 尝试连接
result = sock.connect_ex((host, port))
sock.close()
if result == 0:
return True
else:
return False
except Exception as e:
print(f"错误: {e}")
return False
if __name__ == "__main__":
if len(sys.argv) != 3:
print(f"用法: {sys.argv[0]} <主机> <端口>")
sys.exit(1)
host = sys.argv[1]
port = int(sys.argv[2])
if check_port(host, port):
print(f"端口 {port} 在 {host} 上是开放的")
else:
print(f"端口 {port} 在 {host} 上未开放")
批量端口扫描脚本
#!/usr/bin/env python3
import socket
import concurrent.futures
import sys
def scan_port(host, port):
"""扫描单个端口"""
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
result = sock.connect_ex((host, port))
sock.close()
if result == 0:
return port
return None
except:
return None
def scan_ports(host, start_port, end_port, max_workers=50):
"""扫描端口范围"""
open_ports = []
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = []
for port in range(start_port, end_port + 1):
futures.append(executor.submit(scan_port, host, port))
for future in concurrent.futures.as_completed(futures):
result = future.result()
if result:
open_ports.append(result)
return sorted(open_ports)
if __name__ == "__main__":
# 示例:扫描常见端口
host = "127.0.0.1"
open_ports = scan_ports(host, 1, 1000)
print(f"主机 {host} 开放端口:")
for port in open_ports:
print(f" {port}")
Bash Shell 脚本
#!/bin/bash
# 检测单个端口
check_port() {
local host=$1
local port=$2
local timeout=$3
# 使用 /dev/tcp 特殊文件 (Bash 内置)
if timeout $timeout bash -c "echo >/dev/tcp/$host/$port" 2>/dev/null; then
return 0
else
return 1
fi
}
# 使用 netcat
check_port_nc() {
local host=$1
local port=$2
if nc -zv $host $port 2>&1 | grep -q "succeeded"; then
return 0
else
return 1
fi
}
# 主函数
host="127.0.0.1"
port=80
if check_port $host $port 2; then
echo "端口 $port 在 $host 上开放"
else
echo "端口 $port 在 $host 上未开放"
fi
使用 nmap 工具
#!/bin/bash # 需要先安装 nmap # apt-get install nmap # Ubuntu/Debian # yum install nmap # CentOS/RHEL nmap -p 22,80,443 192.168.1.1 # 检测特定端口 nmap -p 1-1000 192.168.1.1 # 检测端口范围 nmap -p 80 --open 192.168.1.1 # 只显示开放端口
Go 语言脚本
package main
import (
"fmt"
"net"
"os"
"strconv"
"time"
)
func checkPort(host string, port int) bool {
address := net.JoinHostPort(host, strconv.Itoa(port))
conn, err := net.DialTimeout("tcp", address, 2*time.Second)
if err != nil {
return false
}
conn.Close()
return true
}
func main() {
if len(os.Args) != 3 {
fmt.Printf("Usage: %s <host> <port>\n", os.Args[0])
os.Exit(1)
}
host := os.Args[1]
port, err := strconv.Atoi(os.Args[2])
if err != nil {
fmt.Println("Invalid port number")
os.Exit(1)
}
if checkPort(host, port) {
fmt.Printf("Port %d on %s is open\n", port, host)
} else {
fmt.Printf("Port %d on %s is closed\n", port, host)
}
}
注意事项
- 网络权限:某些环境可能限制端口扫描
- 防火墙影响:防火墙可能阻止连接或返回误导信息
- 超时设置:根据网络状况调整超时时间
- 并发控制:批量扫描时注意不要过度占用资源
- 法律合规:只扫描自己有权限的主机
选择建议
- 简单检测:使用 Python 或 Bash 脚本
- 批量扫描:使用 Python 多线程或 nmap
- 性能要求高:使用 Go 或 C 语言
- 集成到系统:使用 Python 脚本更方便
根据具体需求选择合适的方案即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播