在日常开发或者运维的过程中,需要了解当前系统开放了哪些端口,要查看开放这些端口的具体流程和用户,只需通过netstat命令进行查询即可。
netstat命令的一些常见参数描述如下:
-a或-all显示连接中的所有插座。
-A lt;网络类型>:或–<网络类型>:列出该网络类型连接中的相关地址。
-c或–- continuous连续列出网络状态。
-C或–cache显示路由器配置的缓存信息。
-e或–- extend显示网络的其他信息。
-F或-FIB显示纤维。
-g或–- groups显示多播功能组的成员列表。
-h或–help在线帮助。
-i或–- interfaces显示web界面信息表单。
-l或–- listening显示受监视的服务器的套接字。
-M或–- masqueue显示伪装的网络连接。
-n或–- numeric直接使用IP地址,不通过域名服务器。
-N或–- netlink或–symbolic显示网络硬件外围设备的符号连接名称。
-o或–- timers显示计时器。
-p或–- programs显示正在使用的套接字的程序ID和程序名。
-r或–- route显示路由表。
-s或–- statistice显示网络工作信息的统计表。
-t或–TCP显示TCP传输协议的连接状态。
-u或–UDP显示UDP传输协议的连接状态。
-v或–- verbose显示指令执行过程。
-V或-version显示版本信息。
-w或–RAW显示原始传输协议的连接状态。
-x或–UNIX该参数与指定“-A unix”参数的效果相同。
–IP或–inet此参数与指定“-A inet”参数的效果相同。
您可以显示当前服务器上的所有端口和进程服务,并且可以使用pipeline和grep的组合来查看特定的端口和服务:
[root@localhost ~]# netstat -ntlp //查看当前所有tcp端口· [root@localhost ~]# netstat -ntulp |grep 80 //查看所有80端口使用情况· [root@localhost ~]# netstat -an | grep 3306 //查看所有3306端口使用情况· [root@localhost ~]# netstat -nlp |grep LISTEN //查看当前所有监听端口·检查所有tcp端口的当前使用情况:
这里有一个解释:
1,0.0.0.0代表这台机器上任何可用的地址。比如0.0.0: 135表示本机所有地址的135端口,这样就不用重复显示多台ip计算机了。
2.TCP 0.0.0.0:80表示监听所有可用接口上的TCP80端口。
3.0.0.0.0是默认路由,即所有想要到达不再在路由表中的网段的数据包都遵循0.0.0.0的规则。
那么127.0.0.1就是你的本地ip地址。
然后[::]:21这又是什么鬼?
这意味着ipv6的端口21。
还有为什么UDP的外部链接都是*: *?
*: *是URL的通配符,是192.168.15.12,该类型的整体描述。
说明状态,可以结合TCP连接建立和关闭过程。
听:(听一个连接。)监听来自远程TCP端口的连接请求。
SYN-SENT:(主动;发送syn。在发送连接请求后等待匹配的连接请求。)发送连接请求后等待匹配的连接请求。
Syn-received:(发送和接收Syn。在接收和发送连接请求之后,等待确认连接请求的确认。)接收并发送连接请求后,等待对方对连接请求的确认。
已建立:(连接已建立。)表示打开的连接。
FIN-WAIT-1:(关闭;派FIN去。)等待远程TCP连接中断请求或先前连接中断请求的确认。
FIN-WAIT-2:(关闭;FIN已确认;等待发现。)等待来自远程TCP的连接中断请求。
CLOSE-WAIT:(收到FIN等待接收关闭。)等待本地用户的连接中断请求。
关闭:(关闭;交换鳍;等待FIN。)等待远程TCP确认断开。
LAST-ACK:(收到FIN并关闭;等待FIN ACK。)等待发送到远程TCP的原始连接中断请求的确认。
Time-wait: (in2msl(最大段长度的两倍)关闭后安静等待。)等待足够的时间,以确保远程TCP接收到连接中断请求的确认。
关闭:(连接已关闭。)没有连接状态。
例如,要检查当前Mysql默认端口80是否已启动,您可以执行以下操作
Netstat -ano显示协议统计和TCP/IP网络连接。
TAT-T/-U/-l/-r/-n[显示网络相关信息,-t:TCP协议,-u:UDP协议,-L:监控,-R:路由,-N:显示IP地址和端口号]
netstat-tlun[查看该机器侦听的端口]
netstat-an[查看该机器的所有网络]
netstat-rn[查看本地路由表]
列出所有端口:netstat -a
列出所有TCP端口:netstat -at
列出了所有UDP端口:netstat -au
列出所有处于监听状态的套接字
列出所有监听TCP端口的套接字:netstat-lt
列出所有监听UDP端口的套接字:netstat-lu
找出程序运行的端口:netstat-ap | grepsh
查找在指定端口上运行的进程:netstat-an | grep': 80 '
几个有用的搜索:
1.查找请求数量前20位的IP(常用于查找攻击源):
netstat-anlp | grep 80 | grep TCP | awk“{ print $ 5 }”| awk-F:“{ print $ 1 }”| sort | uniq-c | sort-NR | head-n20
netstat-ant | awk '/:80/{ split $ 5,ip,":);++ A[IP[1]]} END { for(I in A)print A[I],i}' |sort -rn|head -n20
2.用tcpdump嗅探端口80的访问,看看谁是最高的
tcpdump -i eth0 -tnn dst端口80 -c 1000 | awk -F。{打印"。"″."″." $ 4 } ' | sort | uniq-c | sort-NR | head-20
3.查找更多time_wait连接
netstat-n | grep TIME _ WAIT | awk“{ print $ 5 }”| sort | uniq-c | sort-rn | head-n20
4.寻找更多的SYN连接
netstat-an | grep SYN | awk“{ print $ 5 }”| awk-F:“{ print $ 1 }”| sort | uniq-c | sort-NR | more
5.根据端口列流程
netstat-ntlp | grep 80 | awk“{ print $ 7 }”| cut-d/-f1
如有不妥之处,请指正,互相学习,共同进步。