查看端口使用情况

查看端口使用情况,使用netstat命令。
netstat命令
1 简介
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

2 输出信息含义
从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中”Recv-Q”和”Send-Q”指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

3 常见参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

4 实用命令实例
4.1 列出所有端口 (包括监听和未监听的)
4.1.1 列出所有端口 netstat -a
4.1.2 列出所有 tcp 端口 netstat -at
4.1.3 列出所有 udp 端口 netstat -au

4.2 列出所有处于监听状态的 Sockets
4.2.1 只显示监听端口 netstat -l
4.2.2 只列出所有监听 tcp 端口 netstat -lt
4.2.3 只列出所有监听 udp 端口 netstat -lu
4.2.4 只列出所有监听 udp 端口 netstat -lu

4.3 显示每个协议的统计信息
4.3.1 显示所有端口的统计信息 netstat -s
4.3.2 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su

4.4 在 netstat 输出中显示 PID 和进程名称 netstat -p
netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
# netstat -pt

4.5 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)
当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
同样可以加速输出,因为不用进行比对查询。
# netstat -an

如果只是不想让这三个名称中的一个被显示,使用以下命令
# netsat -a –numeric-ports
# netsat -a –numeric-hosts
# netsat -a –numeric-users

4.6 持续输出 netstat 信息
netstat 将每隔一秒输出网络信息。
# netstat -c

4.7 显示系统不支持的地址族 (Address Families)
#netstat –verbose

4.8 显示核心路由信息 netstat -r
# netstat -r
注意: 使用 netstat -rn 显示数字格式,不查询主机名称。

4.9 找出程序运行的端口
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
# netstat -ap | grep ssh

找出运行在指定端口的进程
# netstat -an | grep ‘:80’

4.10 显示网络接口列表
# netstat -i

显示详细信息,像是 ifconfig 使用 netstat -ie:
# netstat -ie

4.11 IP和TCP分析
4.11.1 查看连接某服务端口最多的的IP地址
netstat -nat | grep “192.168.1.15:22” |awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -20

4.11.2 TCP各种状态列表
netstat -nat |awk ‘{print $6}’
先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
netstat -nat |awk ‘{print $6}’|sort|uniq -c
最后的命令如下:
netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn

4.11.3 分析access.log获得访问前10位的ip地址
awk ‘{print $1}’ access.log |sort|uniq -c|sort -nr|head -10

[[参考: http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316661.html ]]

查看已经连接的服务端口(ESTABLISHED
 
  netstat -a
 
查看所有的服务端口(LISTEN,ESTABLISHED)
 
netstat -ap

查看8080端口,则可以结合grep命令:

netstat -ap | grep 8080

如查看8888端口,则在终端中输入:

lsof -i:8888

若要停止使用这个端口的程序,使用kill +对应的pid即可

# 查看端口号对应的系统服务名称
cat /etc/services

UNIX Domain Socket
UNIX Domain Socket IPC
socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。UNIX Domain Socket也提供面向流和面向数据包两种API接口,类似于TCP和UDP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。
UNIX Domain Socket是全双工的,API接口语义丰富,相比其它IPC机制有明显的优越性,目前已成为使用最广泛的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的。
使用UNIX Domain Socket的过程和网络socket十分相似,也要先调用socket()创建一个socket文件描述符,address family指定为AF_UNIX,type可以选择SOCK_DGRAM或SOCK_STREAM,protocol参数仍然指定为0即可。
UNIX Domain Socket与网络socket编程最明显的不同在于地址格式不同,用结构体sockaddr_un表示,网络编程的socket地址是IP地址加端口号,而UNIX Domain Socket的地址是一个socket类型的文件在文件系统中的路径,这个socket文件由bind()调用创建,如果调用bind()时该文件已存在,则bind()错误返回。

Leave a comment

Your email address will not be published. Required fields are marked *