判断445端口是否已经关闭的方法

本文介绍了一个简单的方法来检测445端口是否已关闭:通过命令提示符使用netstat命令。同时提供了netstat命令的详细解释及其参数说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们按照某个关闭445端口的教程操作完之后,我们如何去检测是否真的已经关闭了445端口呢?本文给你介绍一个常用的又是最简单的方法。

按 WIN+R 组合键打开运行对话框(不知道哪个是WIN键?),输入 cmd ,按回车键,打开 dos 窗口。

然后输入如下命令:

netstat -ano -p tcp | find "445"

如果没有返回任何记录,则说明已经成功关闭了445端口。如图:

检测是否关闭445端口

检测是否关闭445端口

不过如果是从防火墙关闭445端口的(参考此文:win7在防火墙入站规则关闭445端口的教程【也适用其他端口如3389】),那么这个命令就不能准确反映是否关闭445端口了,我的理解是,因为从“入站规则”关闭445端口,设置“何时应用该规则”时,说是“计算机连接到公网位置时应用”、“计算机连接到其企业域时应用”和“计算机连接到专用网络位置时应用”,因此,刚才的检测命令是不在“应用”范围内的,但是此防火墙一样是可以防止外部通过445端口进行入侵的。

关闭445端口,我推荐的方法是从组策略关闭端口(445/135/137/138/139/3389等),这个方法适用于所以windows系统,是一个最常用又是最有效的关闭任何一个端口的方法。

知识扩展

netstat 命令简介

Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的 Web 服务有没有起来,你可以查看80端口有没有打开。以上功能使 netstat 成为网管和系统管理员的必备利器。下面教大家如何使用 netstat 去查找网络连接信息和系统开启的端口号。

netstat 各参数及含义:

C:\Users\Administrator>netstat /?

显示协议统计和当前 TCP/IP 网络连接。

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [interval]

-a            显示所有连接和侦听端口。
-b            显示在创建每个连接或侦听端口时涉及的可执行程序。
               在某些情况下,已知可执行程序承载多个独立的
               组件,这些情况下,显示创建连接或侦听端口时涉
               及的组件序列。此情况下,可执行程序的名称
               位于底部[]中,它调用的组件位于顶部,直至达
               到 TCP/IP。注意,此选项可能很耗时,并且在您没有
               足够权限时可能失败。
-e            显示以太网统计。此选项可以与 -s 选项结合使用。
-f            显示外部地址的完全限定域名(FQDN)。
-n            以数字形式显示地址和端口号。
-o            显示拥有的与每个连接关联的进程 ID。
-p proto    显示 proto 指定的协议的连接;proto 可以是下列任
               何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s 选
               项一起用来显示每个协议的统计,proto 可以是下列任
               何一个: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP
               或 UDPv6。
-r            显示路由表。
-s            显示每个协议的统计。默认情况下,显示
              IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6
              的统计;-p 选项可用于指定默认的子网。
-t            显示当前连接卸载状态。
interval    重新显示选定的统计,各个显示间暂停的间隔秒数。
              按 CTRL+C 停止重新显示统计。如果省略,则 netstat
              将打印当前的配置信息一次。
 

1、查看所有的端口占用情况

C:\>netstat -ano

协议 本地地址 外部地址 状态 PID

TCP 127.0.0.1:1434 0.0.0.0:0 LISTENING 3236
TCP 127.0.0.1:5679 0.0.0.0:0 LISTENING 4168
TCP 127.0.0.1:7438 0.0.0.0:0 LISTENING 4168
TCP 127.0.0.1:8015 0.0.0.0:0 LISTENING 1456
TCP 192.168.3.230:139 0.0.0.0:0 LISTENING 4
TCP 192.168.3.230:1957 220.181.31.225:443 ESTABLISHED 3068
TCP 192.168.3.230:2020 183.62.96.189:1522 ESTABLISHED 1456
TCP 192.168.3.230:2927 117.79.91.18:80 ESTABLISHED 4732
TCP 192.168.3.230:2929 117.79.91.18:80 ESTABLISHED 4732
TCP 192.168.3.230:2930 117.79.91.18:80 ESTABLISHED 4732
TCP 192.168.3.230:2931 117.79.91.18:80 ESTABLISHED 4732

2、查看指定端口的占用情况

C:\>netstat -aon|findstr "9050"

协议 本地地址 外部地址 状态 PID

TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 2016

看到了吗,端口被进程号为2016的进程占用,继续执行下面命令: (也可以去任务管理器中查看pid对应的进程)

3、查看PID对应的进程

C:\>tasklist|findstr "2016"

映像名称 PID 会话名 会话# 内存使用
========================= ======== ================
nf.exe 2016 Console 0 16,064 K

很清楚吧,nf占用了你的端口。

4、结束该进程

C:\>taskkill /f /t /im nf.exe

netstat 命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。

转载于:https://www.cnblogs.com/lj820403/p/7543597.html

<think>首先,用户的问题是:“我想检网络端口是否开放的方法 请问如何判断网络端口是否被打开”。我需要根据系统级指令来回答。 系统级指令: - 所有行内数学表达式使用 $...$ 格式。 - 独立公式使用 $$...$$ 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如: [^1]。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考站内引用: - 引用[1]: 关于在线工具端口是否打开。 - 引用[2]: 关于获取系统端口使用信息。 - 引用[3]: 关于C++检测端口是否被占用。 用户的问题是关于如何判断网络端口是否开放。我需要提供方法,并参考这些引用。 关键点: - 端口“开放”通常意味着端口正在监听连接,可能被服务占用。 - 用户可能指的是从本地或远程检端口。 步骤: 1. **理解问题**:用户想检网络端口是否开放,即端口是否在监听。 2. **结构化回答**:回答应该清晰,分步骤解释方法。 3. **使用引用**:自然地引用提供的参考内容。 4. **生成相关问题**:在回答后添加相关问题。 方法总结: - **本地检**:检端口是否被本地服务占用。 - 使用命令行工具(如Windows的netstat,Linux的netstat或ss)。 - 编程方法(如引用[2]和[3])。 - **远程检**:从另一台机器检端口是否开放。 - 使用telnet、nc(netcat)或在线工具(如引用[1])。 - 编程方法使用socket连接。 回答结构: 1. **介绍**:简要解释端口开放的含义。 2. **本地检方法**: - 命令行工具。 - 编程方法(参考引用)。 3. **远程检方法**: - 命令行工具。 - 在线工具(参考引用)。 - 编程方法。 4. **总结**:推荐简单方法。 5. **相关问题**:生成2-3个相关问题。 生成相关问题: - 基于主题,如: 1. 如何防止端口被占用? 2. 端口扫描工具的原理是什么? 3. 常见端口的用途? 确保中文回答。 LaTeX:用户问题中没有数学表达式,但如果有,我会用$...$或$$...$$。这里可能不需要,除非涉及计算。 引用: - 在相关段落末尾添加引用标识,如[^1]。 最终回答框架: - 标题或开头:直接回应问题。 - 步骤: a. 本地检:使用netstat命令。 b. 编程检:引用[2]和[3]。 c. 远程检:使用telnet或在线工具。 d. 在线工具:引用[1]。 - 相关问题列表。</think>### 如何判断网络端口是否开放 判断网络端口是否开放(即端口是否在监听连接)是网络管理和开发中的常见任务。端口开放通常意味着有服务正在监听该端口,允许外部连接。下面我将分步骤介绍几种实用方法,包括本地检和远程检,确保回答清晰可靠。方法基于常见操作系统(如Windows和Linux),并参考了站内引用内容。 #### 1. **本地检端口是否开放(检端口是否被占用)** 本地检用于确定本机是否有服务占用了指定端口。以下是简单有效的方法: - **使用命令行工具**: - **Windows系统**:打开命令提示符(cmd),运行 `netstat -ano | findstr :端口号`。例如,检端口80: ```bash netstat -ano | findstr :80 ``` 如果输出显示 `LISTENING`,表示端口开放;无输出则表示未占用[^2]。 - **Linux系统**:使用终端运行 `netstat -tuln | grep :端口号` 或 `ss -tuln | grep :端口号`。例如: ```bash netstat -tuln | grep :80 ``` 如果状态为 `LISTEN`,端口开放。 - **编程方法(C++示例)**: 通过尝试绑定socket来判断端口是否被占用。参考引用[3],使用以下代码: ```cpp #include <winsock2.h> #include <ws2tcpip.h> #pragma comment(lib, "ws2_32.lib") BOOL IsPortOpen(int port) { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { return FALSE; // 初始化失败 } SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (s == INVALID_SOCKET) { WSACleanup(); return FALSE; } sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(port); // 端口号 addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(s, (SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR) { if (WSAGetLastError() == WSAEADDRINUSE) { closesocket(s); WSACleanup(); return TRUE; // 端口已被占用(开放) } } closesocket(s); WSACleanup(); return FALSE; // 端口未占用 } ``` 此代码尝试绑定到指定端口:如果错误码为 `WSAEADDRINUSE`,表示端口开放[^3]。 #### 2. **远程检端口是否开放(从外部机器检测)** 远程检用于确认目标服务器(如Web服务器)的端口是否可连接。适用于网络诊断: - **使用命令行工具**: - **Telnet或Netcat(推荐)**:在终端运行: ```bash telnet 目标IP 端口号 # 例如 telnet 192.168.1.1 80 ``` 如果连接成功(显示空白或服务响应),端口开放;失败则关闭。 - **Linux专用工具**:使用 `nc -zv 目标IP 端口号`,如: ```bash nc -zv example.com 443 ``` 输出 `succeeded` 表示开放。 - **在线端口检测工具**: 对于临时需求,访问在线工具如 **Port Checker** 或 **YouGetSignal**。输入目标IP和端口号,工具会返回状态(开放/关闭)。这些工具基于TCP握手原理,但可能受网络延迟影响准确性[^1]。 - **编程方法(Python示例)**: 使用socket尝试连接远程端口: ```python import socket def is_port_open(ip, port, timeout=2): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(timeout) result = sock.connect_ex((ip, port)) sock.close() return result == 0 # 返回0表示端口开放 except Exception as e: return False # 示例:检192.168.1.1的80端口 print(is_port_open("192.168.1.1", 80)) # 输出 True 或 False ``` 此方法模拟TCP连接:成功连接则端口开放。 #### 3. **总结与建议** - **首选方法**:对于日常使用,命令行工具(如 `netstat` 或 `telnet`)最快捷;编程方法适合自动化脚本。 - **注意事项**: - 本地检仅确认端口是否被占用,不保证远程可访问。 - 远程检需确保防火墙未阻止连接(如关闭Windows防火墙或配置Linux iptables)。 - 在线工具方便但依赖外部服务器,可能不适用于敏感环境[^1]。 - **可靠性**:所有方法基于TCP/IP协议栈,引用[2]和[3]提供了系统级API实现,确保结果真实[^2][^3]。 ### 相关问题 1. 如何防止端口被恶意扫描或占用? 2. 端口扫描工具(如Nmap)的工作原理是什么? 3. 常见网络端口(如80、443)的用途和安全风险有哪些? [^1]: 看服务器端口是否打开,如何看服务器端口是否打开。另外,一些在线的端口检测工具也可以帮助你快速看服务器端口是否打开。这些工具通常提供一个简单的界面,你只需要输入目标服务器的IP地址和要检测的端口号,即可获取端口状态信息。虽然在线工具可能存在一定的延迟或准确性问题,但对于一些临时或简单的需求来说,它们是非常方便的选择。 [^2]: 获取系统TCP、UDP端口使用信息,并判断端口是否被占用(附源码)。 有时候我们需要判断端口有没有被系统或者其他占用,代码该如何实现呢?其实很简单,我们可以调用系统API函数GetExtendedTcpTable和GetExtendedUdpTable,分别获取TCP和UDP端口信息,其中的信息包括与端口关联的本端IP和远端IP,占用该端口的进程id等。 [^3]: C++检测网络端口是否被占用。方法二:通过socket绑定的方法判断端口是否被占用 BOOL GetSocketPortState(ULONG nPort) { unsigned short usPort = (unsigned short)nPort; SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(usPort); addr.sin_addr.s_addr = htonl(INADDR_ANY); bind(s, (LPSOCKADDR)&addr, sizeof(addr)); if (WSAGetLastError() == WSAEADDRINUSE) { //端口已被占用 return TRUE; } else { return FALSE; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值