You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何查找TCP/UDP监听程序?System.Net程序集加载后类型找不到问题

问题1:如何使用netstat查找TCP/UDP监听程序?

不管你用Windows还是类Unix系统(Linux/macOS),netstat都是查找监听端口的实用工具,我分系统给你说具体用法:

Windows平台

  • 想一次性查看所有TCP/UDP监听端口,还附带程序名和PID的话,直接执行:
    netstat -ano
    
    参数拆解:
    • -a:显示所有连接和监听端口,不会遗漏
    • -n:以数字形式显示地址和端口,避免DNS解析,速度更快
    • -o:列出每个连接对应的进程ID(PID),方便定位占用端口的程序
  • 只想筛选TCP的监听端口?加个过滤:
    netstat -ano | findstr "LISTENING" | findstr "TCP"
    
  • 要查找特定端口(比如8080):
    netstat -ano | findstr ":8080"
    

Linux/macOS平台

  • 查看全量TCP/UDP监听端口+程序名+PID,用这条命令:
    netstat -tulpn
    
    参数解释:
    • -t:仅显示TCP端口
    • -u:仅显示UDP端口
    • -l:仅展示处于监听状态的端口
    • -p:显示对应的程序名和PID(需要root权限执行,否则可能显示-
    • -n:以数字形式显示地址和端口,跳过DNS解析
  • 过滤TCP监听端口:
    netstat -tulpn | grep LISTEN
    
  • 查找特定端口:
    netstat -tulpn | grep ":8080"
    

另外提一嘴,现在很多Linux系统更推荐用ss替代netstat,效率更高,用法类似:

ss -tulpn

问题2:加载System.Net程序集后仍提示找不到类型的解决办法

兄弟,你踩了个常见的小误区:[net]根本不是PowerShell里的有效类型别名,而[System.Net]命名空间,不是具体的类型——这就是你报错的核心原因!

你之前的加载命令其实都成功了,但你混淆了命名空间和类型的区别:System.Net.dll是承载System.Net命名空间下各类类型的程序集,但你不能直接引用命名空间,得调用命名空间下的具体类型,比如[System.Net.IPAddress][System.Net.WebClient]这些。

先确认程序集真的加载成功

你可以执行这条命令查看已加载的程序集,确认System.Net在列表中:

[AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.FullName -match "System.Net" }

正确使用System.Net下的类型

举个实际例子,你想创建WebClient对象或者调用静态方法,得这么写:

# 创建WebClient实例
$webClient = New-Object System.Net.WebClient
# 调用静态方法获取主机名
[System.Net.Dns]::GetHostName()

PowerShell没有默认的[net]类型别名,所以必须写完整的「命名空间+类型名」。

关于加载方式的小优化

你之前用了好几种加载命令,其实在PowerShell 3.0及以上版本,大部分.NET程序集会自动加载,完全不需要手动执行Add-TypeLoadWithPartialName(而且LoadWithPartialName已经被弃用了,别再用了)。如果确实需要手动加载,这一条就够了:

Add-Type -AssemblyName System.Net

PowerShell会自动从全局程序集缓存(GAC)里找到对应程序集,不用你手动指定本地路径。

为啥[net]不行?

PowerShell里的类型别名比如[xml][regex]是系统预定义的,[net]并不是默认别名。如果你非要自定义别名,也只能针对单个类型,比如:

New-Alias -Name net -Value System.Net.IPAddress

但这意义不大,不如直接写完整类型名来得清晰。

总结一下:你加载程序集的操作没毛病,就是误解了命名空间和类型的区别——直接用[System.Net.具体类型]就能正常调用了,试试上面的例子肯定没问题。


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

火山引擎 最新活动