前言

准确的说,他是一个网络连接端口查看器,可以根据进程查端口,也可以根据端口查进程。期初是因在使用Fiddler的时候发现无法启动,提示端口被占用,但是由不知道用什么方法才能找到是哪个程序占用的Fiddler的端口,遂使用命令行的netstat命令配合find命令才找到,遂想写这样一个类似的工具帮助我们速度定位类似端口问题的所在。

PS:可预见很多人会说为什么不用360网络链接查看器,或是其他类似软件,功能更强大界面更美观巴拉巴拉…?

答:因为我喜欢bat批处理,我喜欢命令行,喜欢能用几句命令搞定的事就不用一个别的软件来搞,更重要的是享受编写代码这其中的过程。

使用方法

主要功能就两个:

1、查询某个进程都在使用哪些端口号,包含同进程名的所有实例,以及他们分别所占用的TCP和UDP端口。

2、查看某个端口被哪个进程使用,包括远程IP和本地IP,以及TCP和UDP的所有端口

如何看懂显示列表

程序界面:

本程序返回值使用的windows命令行下的netstat命令。

什么是netstat命令?

Netstat,在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

具体的关于netstat命令的用法可以参见:netstat百度百科,WIKI,如何用netstat命令查看端口占用问题等

什么是PID?

PID(ProcessID)操作系统里指进程ID号。操作系统里每打开一个程序都会创建一个进程ID,即PID。
PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收,可能会被继续分配给新运行的程序。
PID一列代表了各进程的进程ID,也就是说,PID就是各进程的身份标识。

“状态”字段有哪些类型及含义?

连接状态。在原模式中没有状态,在用户数据报协议中也经常没有状态,于是状态列可以空出来。若有状态,通常取值为:
LISTEN
侦听来自远方的TCP端口的连接请求
SYN-SENT
在发送连接请求后等待匹配的连接请求
SYN-RECEIVED
在收到和发送一个连接请求后等待对方对连接请求的确
ESTABLISHED
代表一个打开的连接
FIN-WAIT-1
等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2
从远程TCP等待连接中断请求
CLOSE-WAIT
等待从本地用户发来的连接中断请求
CLOSING
等待远程TCP对连接中断的确认
LAST-ACK
等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT
等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED
没有任何连接状态

什么是本地地址,外部地址?

简单的讲,本地地址即当前这个链接到你本机通信的IP地址和端口,外部地址即当前这个链接到的远程服务器地址和端口。

当然本地和外部地址都有可能是本地地址,一般端口不一样而已。一个典型的应用就是代理服务软件

具体的可以参见:端口百科 中相关地址的解释,或是参见:NAT概念中的四类地址概念,也有助于理解。

查询某进程占用的端口号

这里我们查询Fiddler.exe所占用的端口号,在主界面选择1,回车。再输入Fiddler回车

可以看到红框内,Fiddler占用了本地IPv4和IPv6的8888端口,并且一直处于监听(LISTENING)状态。

注意:最后一行的[::]表示IPv6的所有地址,等同于IPv4的0.0.0.0地址

此地址在不同环境有不同名称,若在路由表中他表示默认路由。在网络编程中,若监听此地址的端口,则可相当于同时监听本地回环地址127.0.0.1以及localhost地址以及本机所有网卡的本地地址(如192.168.1.100)的端口。

反之,若只监听当前网卡本地地址192.168.1.100的端口,则使用127.0.0.1地址就访问不到

关于什么是0.0.0.0地址可以参考:WIKI,这里

关于0.0.0.0和127.0.0.1的区别可以参考:红黑,文库,stackoverflow,以及 知乎的讨论等

好了扯远了,继续说bat用法,看到本地全零地址,以及监听状态,就可以判断此程序Fiddler在占用8888端口,此时若有其他程序如IIS,汤姆猫之类的程序要启动同端口就会报错了。

再看看QQ的占用情况:

可以看到当前有两个进程叫QQ.exe,他们的分别的链接情况及TCP、UDP链接如图所示。

查询某端口被哪个进程所占用

这里我们依旧测试Fiddler的8888端口,这里输入2回车,输入端口号8888回车,查看结果:

可以看到8888端口在IPv4和IPv6上都由Fiddler.exe在占用(监听)

帮助信息:

注意:若无法使用或查询无响应,请使用管理员权限启用本批处理,方法可以参照我之前写的文章:如何创建管理员权限的CMD命令提示符窗口

程序源码下载

源码已经托管至Github:

https://github.com/xxcanghai/cnblogsFiles/blob/master/NetstatFilter网络连接查看器.bat

或是直接复制下述所有代码保存到.bat文件后,直接运行即可。

批处理代码:

::NetstatFilter网络连接查看器 @小小沧海 xxcanghai.cnblogs.com By:2015年6月29日
@echo off
:start
title NetstatFilter By:xxcanghai
SETLOCAL ENABLEEXTENSIONS&SETLOCAL ENABLEDELAYEDEXPANSION
cls::######config######
set PCENAME=
set PID=
set PORT=::inner config
set ERRORCODE=0:menu
cls&echo ----------NetstatFilter----------
echo [1]查询指定进程名使用的端口号
echo [2]查看指定端口被哪个进程使用
echo [3]帮助信息
echo.
set /p=请输入对应数字:<nul
set select=3&set /p select=
if /i "%select%"=="q" exit /b
if /i "%select%"=="exit" exit /b
if "%select%"=="1" goto :menuitem1
if "%select%"=="2" goto :menuitem2
if "%select%"=="3" goto :help
cls&goto :menu:menuitem1
set /p=请输入要查询的进程名称:<nul
set PCENAME=&set /p PCENAME=
if /i "%PCENAME%"=="q" goto :menu
if "%PCENAME%"=="" goto :menuitem1
if "%PCENAME:.=%"=="%PCENAME%" set PCENAME=%PCENAME%.exe
call :getpid "%PCENAME%" PID
echo Process:%PCENAME%,PID:%PID%
call :getnetbypid "%PID%"
echo @1END&pause>nul&goto start:menuitem2
set /p=请输入要查询的端口号:<nul
set PORT=&set/p PORT=
if /i "%PORT%"=="q" goto :menu
if "%PORT%"=="" goto :menuitem2
call :getnetbyport "%PORT%"
echo @2END&pause>nul&goto start:help
cls
echo ┏━━━━━━━━━━━━━━NetstatFilter ━━━━━━━━━━━━━━━━┓
echo ┃           netstat命令的辅助工具 @小小沧海 xxcanghai.cnblogs.com          ┃
echo ┃                                                                          ┃
echo ┃1.可查询某个进程在使用哪些端口,包含同名进程的多个实例及所有TCP和UDP端口  ┃
echo ┃2.可查询指定端口正在被哪些进程使用,以及本地/远程IP端口和当前连接状态     ┃
echo ┃                                =注意=                                    ┃
echo ┃※1.若无法使用或查询无反应请用管理员权限执行本批处理,方法参照上述博客文章┃
echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛echo 按任意键返回主菜单&pause>nul&goto start::#####get pid by process#####
::[tasklist] example
::cmd.exe                      11132 Console                    1      3,000 K
::cmd.exe                       8204 Console                    1      2,728 K
::cmd.exe                      10060 Console                    1      2,996 K
:getpid
if not "%~1"=="" (set PID=for /f "tokens=2 delims= " %%i in ('tasklist /fi "imagename eq %~1" /nh /fo table^|find /i "%~1"') do (set PID=!PID!%%i,)if "!PID!"=="" (set ERRORCODE=101echo [ERROR]ProcessName "%~1" is not foundpause>nul&goto start) else (set PID=!PID:~0,-1!)set %2=!PID!goto :eof
)::#####get netstat by pid#####
::[netstat] example:
::  Proto  Local Address          Foreign Address        State           PID
::   TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
::   UDP    [::1]:50575            *:*                                    5108
:getnetbypid
if not "%~1"=="" (set PID=%~1for /f "tokens=1,* delims=," %%a in ("!PID!") do (set subpid=%%aset PID=%%b::get TCPecho [PID-!subpid!]:for /f "delims=" %%z in ('netstat -a -n -o^|find ":"') do (set tLine=%%z::netstat的IPv6结果中含有%符号,%符号在call传递中会发生错误,遂将%替换为$后再传递set tLine=!tLine:%%=$!call :getNetInfo "!tLine!" tProto tLocalAdd tForeignAdd tState tPIDset tLine=!tLine:$=%%!::call使用完成后将$符号替换回%符号if "!tPID!"=="!subpid!" (echo !tLine!)))if not "!PID!"=="" (call %0 "!PID!")goto :eof
)::#####get netstat by port#####
:getnetbyport
if not "%~1"=="" (set PORT=%~1for /f "tokens=1,* delims=," %%a in ("!PORT!") do (set myport=%%aset PORT=%%b::PORT==8888for /f "delims=" %%z in ('netstat -a -n -o^|find /i ":!myport! "') do (set tLine=%%z            set tLine=!tLine:%%=$!call :getNetInfo "!tLine!" tProto tLocalAdd tForeignAdd tState tPIDset tLine=!tLine:$=%%!            echo !tLine!for /f "tokens=1 delims= " %%j in ('tasklist /nh /fi "PID eq !tPID!"') do (echo [%%j])))
)
goto :eofecho END.&pause>nul&goto start
exit::#####FUNCTION#####
:getNetInfo
::将netstat -ano的某一行分隔成不同的变量
::call :getNetInfo "<netstat output line>" tProto tLocalAdd tForeignAdd tState tPID
if not "%~1"=="" (for /f "tokens=1,2,3,4,5 delims= " %%i in ("%~1") do (set %2=%%iset %3=%%jset %4=%%kif "%%i"=="TCP" (set %5=%%lset %6=%%m) else (set %5=set %6=%%l))
)
goto :eof::#####FUNCTION#####
:split
::%0为函数名称自身:split,%1为传过来的值,%~1为删除变量中的双引号"
::在此子搜索函数中把过滤器按照/符号分割开,并取得分割后的第一个的值
::再把分割后的剩下的值重赋予过滤器,并调用自身,直到过滤器为空为止,返回
set subf=%~1
for /f "tokens=1,* delims=," %%j in ("%subf%") do (set subf=%%k
)
if not "!subf!"=="" (call %0 "!subf!")
goto :eof::#####FUNCTION#####
:FUN1goto :eof

原文地址-小小沧海:http://www.cnblogs.com/xxcanghai/p/4958577.html

转载于:https://www.cnblogs.com/xxcanghai/p/4958577.html

[批处理]NetstatFilter快速查找端口被占用问题相关推荐

  1. windows查找端口占用并杀死端口进程

    tasklist  查看进程 netstat -ano|findstr "8080"  查找端口 8080 占用信息:  tasklist|findstr 7176  查找进程id ...

  2. 解决eclipse 端口被占用问题

    当你强制关闭eclipse的时候,但是你后台并没有关闭进程,再次打开eclipse的tomcat,会报端口被占用的问题 教你一招,快速解决端口被占用:window键+r 输入cmd 进入到dos命令下 ...

  3. (十)如何查找端口被那个程序占用

    (十)如何查找端口被那个程序占用 一.windows系统查看端口被哪个进程占用了 1.在windows命令行窗口下执行:运行--cmd C:\>netstat -aon|findstr &quo ...

  4. windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况

    windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况 参考文章: (1)windows查看端口占用 ...

  5. Windows 查找端口占用及端口范围详解

    端口范围 端口的取值范围是:0-65535. 在这个取值范围中1023以下的端口已经分配给了常用的一些应用程序,这个数字以后的端口部分被使用,所以网络编程可用的端口一般在1024之后选取. 查看端口占 ...

  6. windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况...

    windows下查询端口占用情况 ,强制结束端口占用程序 查询8080端口被那个程序占用 如何强制结束windows下端口占用情况? 下面操作在win10下 在控制台执行命令   1.列出所有端口的情 ...

  7. 强制解除占用端口,最快速方便的解除占用端口,端口占用解决方案大全

    强制解除端口占用可以使用我最新开发的新版本PHPWAMP_IN2(截止目前最新版,教程为老图) PHPWAMP最新版支持自定义Mysql版本和自定义PHP版本,是目前唯一集成了VC运行库的真正纯绿色软 ...

  8. 怎么查询jar linux占用的端口,linux 快速查询端口占用程序

    工作中经常会遇到端口占用导致服务无法启动的情况, 这时候通常需要三步来解决问题: 1. 找到占用端口的 程序pid(netstat -tunlp | grep pid) 2. 通过pid 查看并确定程 ...

  9. weblogic启动端口被占用

    问题: 端口被占用在服务器项目部署的时候是经常出现的情况. 观察日志可以看到如下图: 有很多情况能导致端口被占用, 比如强行关闭服务程序,就有可能出现进程杀不干净, 即是程序启动起来的了也可能会出现如 ...

最新文章

  1. 温控自动烘焙系统的研究与实现
  2. python免费试听-线上儿童编程免费试听-品质保障
  3. 数据库系统概论:第十一章 并发控制
  4. 搭建一个简易的https
  5. HDU2501_多米诺骨牌
  6. 前端学习(1683):前端系列实战课程之让蛇吃食物变长
  7. .NET的轻量级IOC框架芮双随笔
  8. 乾颐堂军哥HCIE9-解决BGP路由黑洞、聚合的各种参数以及RR基础
  9. AD22如何添加元器件库
  10. Java中常见的异常类型
  11. 高分三号卫星以及数据产品简介
  12. python广义矩估计_用EVIEWS进行估计时提示Near singular matrix解析
  13. 【mmdetection】测试单张图像
  14. 泰拉瑞亚无限物品服务器,泰拉瑞亚1.4.0.5.2.1无限道具版
  15. 如何更改台式计算机屏显时间,电脑屏幕熄灭时间_电脑锁屏怎么设置时间
  16. xcode 如何添加调试设备
  17. GIS地理信息科学专业有哪些高校可以选择?
  18. 锤子官方再曝新手机 暗示坚果Pro采用新后壳
  19. 对立色彩空间_复制的对立面是什么?
  20. 第六届 虚拟漫游 题目

热门文章

  1. 彩礼钱你是留给爸妈还是自己带走?
  2. 过去赚钱靠产品—买卖产品
  3. 产品泛滥的时代,如何让你的产品脱颖而出?
  4. 私域经济运营能力最关键的三个指标
  5. 如何把大咖的知识,内容、思维,瞬间变成你的知识内容思维的秘诀
  6. 抓住好资产,让你赚一辈子
  7. 小米会在芯片产业异军突起吗?
  8. 是谁开发出手机曲面屏这种“反人类设计”?
  9. It is worth noting that among the four
  10. 分布式系统领域经典论文翻译集