C# 如何判断某个tcp端口是否被占用?
nanshan 2024-10-18 07:25 32 浏览 0 评论
在C#中使用TcpClient或者其他通用的方式建立的Socket,该如何判断这个端口是否被占用?比如下面的代码:
TcpClient tc = new TcpClient(ip,port);
在C#中,可以使用System.Net.NetworkInformation命名空间下的IPGlobalProperties类和TcpConnectionInformation类来判断某个TCP端口是否被占用:
using System.Net.NetworkInformation;
int port = 80;
if(IsPortInUse(port)){
Console.WriteLine(#34;{port} 端口被占用!");
}else{
Console.WriteLine(#34;{port} 端口未被占用!");
}
Console.ReadLine();
bool IsPortInUse(int port)
{
IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
TcpConnectionInformation[] connections = properties.GetActiveTcpConnections();
foreach (TcpConnectionInformation connection in connections)
{
if (connection.LocalEndPoint.Port == port)
{
// 端口已被占用
return true;
}
}
// 端口未被占用
return false;
}
80 端口未被占用!
在上述示例中,IsPortInUse方法接收一个整数参数表示端口号。它通过IPGlobalProperties.GetIPGlobalProperties方法获取当前计算机的网络连接信息,然后使用GetActiveTcpConnections方法获取所有活动的TCP连接信息。接着,使用循环遍历每个TCP连接信息,判断本地端点的端口号是否与传入的端口号相同。如果找到匹配的端口号,则表示端口已被占用;否则,表示端口未被占用。
需要注意的是,为了执行此操作,可能需要管理员权限或运行在适当的操作系统上。此外,还要确保没有其他进程在占用同一端口,因为TCP连接仅能检测到已建立的连接而无法检测到监听状态的端口。
想要检测监听状态的端口,可以使用System.Net.NetworkInformation命名空间下的IPGlobalProperties类和IPEndPoint类来获取所有监听的TCP端口
using System.Net;
using System.Net.NetworkInformation;
public void GetListeningPorts()
{
IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[] endpoints = properties.GetActiveTcpListeners();
foreach (IPEndPoint endpoint in endpoints)
{
Console.WriteLine(#34;监听状态的端口:{endpoint.Port}");
}
}
监听状态的端口:80
监听状态的端口:135
监听状态的端口:445
监听状态的端口:1433
监听状态的端口:2383
监听状态的端口:3306
监听状态的端口:3389
监听状态的端口:5040
....
在命令提示符(cmd)中,可以使用 netstat 命令来列出占用的端口
netstat -ano | findstr LISTENING
这个命令会列出所有正在监听(被占用)的端口,并显示与每个端口关联的进程标识符(PID)。
这个命令的部分:
- netstat:用于显示网络状态和连接信息的命令。
- -ano:参数选项,a 用于显示所有连接和侦听端口,n 用于以数字格式显示端口和地址,o 用于显示关联的进程标识符。
- |:管道操作符,将 netstat 的输出结果传递给下一个命令。
- findstr:用于搜索指定的字符串或文本的命令。
- LISTENING:要搜索的字符串,表示只搜索正在监听的端口。
执行上述命令后,将看到正在监听的端口列表以及与它们关联的进程的 PID。可以根据需要查找特定的端口或进一步处理输出结果
C:\Users\Admin>netstat -ano | findstr LISTENING
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 848
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING 4956
TCP 0.0.0.0:2383 0.0.0.0:0 LISTENING 5200
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 4280
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 1204
TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 6424
TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING 8344
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 308
TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING 932
TCP 0.0.0.0:49666 0.0.0.0:0 LISTENING 1512
TCP 0.0.0.0:49667 0.0.0.0:0 LISTENING 1364
TCP 0.0.0.0:49668 0.0.0.0:0 LISTENING 2484
TCP 0.0.0.0:49669 0.0.0.0:0 LISTENING 3440
TCP 0.0.0.0:49673 0.0.0.0:0 LISTENING 68
TCP 0.0.0.0:49706 0.0.0.0:0 LISTENING 4956
TCP 0.0.0.0:50128 0.0.0.0:0 LISTENING 4
TCP 127.0.0.1:22 0.0.0.0:0 LISTENING 8960
TCP 127.0.0.1:81 0.0.0.0:0 LISTENING 8960
TCP 127.0.0.1:443 0.0.0.0:0 LISTENING 8960
TCP 127.0.0.1:1434 0.0.0.0:0 LISTENING 4956
TCP 127.0.0.1:4012 0.0.0.0:0 LISTENING 4180
TCP 127.0.0.1:4013 0.0.0.0:0 LISTENING 4180
TCP 127.0.0.1:4301 0.0.0.0:0 LISTENING 8008
TCP 127.0.0.1:5533 0.0.0.0:0 LISTENING 18928
TCP 127.0.0.1:9210 0.0.0.0:0 LISTENING 6924
TCP 127.0.0.1:9418 0.0.0.0:0 LISTENING 8960
TCP 127.0.0.1:49672 0.0.0.0:0 LISTENING 3804
TCP 127.0.0.1:57178 0.0.0.0:0 LISTENING 2600
TCP 127.0.0.1:57335 0.0.0.0:0 LISTENING 17900
TCP 192.168.1.108:139 0.0.0.0:0 LISTENING 4
TCP [::]:80 [::]:0 LISTENING 4
TCP [::]:135 [::]:0 LISTENING 848
TCP [::]:445 [::]:0 LISTENING 4
TCP [::]:1433 [::]:0 LISTENING 4956
TCP [::]:2383 [::]:0 LISTENING 5200
TCP [::]:3306 [::]:0 LISTENING 4280
TCP [::]:3389 [::]:0 LISTENING 1204
TCP [::]:7680 [::]:0 LISTENING 8344
TCP [::]:49664 [::]:0 LISTENING 308
TCP [::]:49665 [::]:0 LISTENING 932
TCP [::]:49666 [::]:0 LISTENING 1512
TCP [::]:49667 [::]:0 LISTENING 1364
TCP [::]:49668 [::]:0 LISTENING 2484
TCP [::]:49669 [::]:0 LISTENING 3440
TCP [::]:49673 [::]:0 LISTENING 68
TCP [::]:49706 [::]:0 LISTENING 4956
TCP [::]:50128 [::]:0 LISTENING 4
TCP [::1]:22 [::]:0 LISTENING 8960
TCP [::1]:81 [::]:0 LISTENING 8960
TCP [::1]:443 [::]:0 LISTENING 8960
TCP [::1]:1434 [::]:0 LISTENING 4956
TCP [::1]:9418 [::]:0 LISTENING 8960
相关推荐
- 0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)
-
文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...
- ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes
-
为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...
- 生产环境starrocks 3.1存算一体集群部署
-
集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...
- 在CentOS上添加swap虚拟内存并设置优先级
-
现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...
- 国产深度(deepin)操作系统优化指南
-
1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...
- postgresql-15.4 多节点主从(读写分离)
-
1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...
- Docker 容器 Java 服务内存与 GC 优化实施方案
-
一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...
- 虚拟内存设置、解决linux内存不够问题
-
虚拟内存设置(解决linux内存不够情况)背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...
- Elasticsearch性能调优(5):服务器配置选择
-
在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...
- Es如何落地
-
一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...
- 针对Linux内存管理知识学习总结
-
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...
- MySQL进阶之性能优化
-
概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...
- Linux Cgroups(Control Groups)原理
-
LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...
- linux 常用性能优化参数及理解
-
1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)