Linux netstat命令详解

简介

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

输出信息含义

执行netstat后,其输出结果为

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE

Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000df

从整体上看,netstat的输出结果可以分为两个部分:

一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

常见参数

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

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

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

 

实用命令实例

 

1. 列出所有端口 (包括监听和未监听的)

  列出所有端口 netstat -a

# netstat -a | more
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp               localhost:         *:*                     LISTEN
 udp               *:bootpc                *:*
 
Active UNIX domain sockets (servers and established)
 Proto RefCnt Flags       Type       State         I-Node   Path
 unix        [ ACC ]     STREAM     LISTENING          /tmp/.X11-unix/X0
 unix        [ ACC ]     STREAM     LISTENING          //run/acpid.socket

  列出所有 tcp 端口 netstat -at

# netstat -at
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp               localhost:         *:*                     LISTEN
 tcp               localhost:ipp           *:*                     LISTEN
 tcp               *:smtp                  *:*                     LISTEN
 tcp6              localhost:ipp           [::]:*                  LISTEN

  列出所有 udp 端口 netstat -au

# netstat -au
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 udp               *:bootpc                *:*
 udp               *:                 *:*
 udp               *:mdns                  *:*

 

2. 列出所有处于监听状态的 Sockets

  只显示监听端口 netstat -l

# netstat -l
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp               localhost:ipp           *:*                     LISTEN
 tcp6              localhost:ipp           [::]:*                  LISTEN
 udp               *:                 *:*

  只列出所有监听 tcp 端口 netstat -lt

# netstat -lt
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp               localhost:         *:*                     LISTEN
 tcp               *:smtp                  *:*                     LISTEN
 tcp6              localhost:ipp           [::]:*                  LISTEN

  只列出所有监听 udp 端口 netstat -lu

# netstat -lu
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 udp               *:                 *:*
 udp               *:mdns                  *:*

  只列出所有监听 UNIX 端口 netstat -lx

# netstat -lx
 Active UNIX domain sockets (only servers)
 Proto RefCnt Flags       Type       State         I-Node   Path
 unix        [ ACC ]     STREAM     LISTENING          /maildrop
 unix        [ ACC ]     STREAM     LISTENING          /cleanup
 unix        [ ACC ]     STREAM     LISTENING          /ifmail
 unix        [ ACC ]     STREAM     LISTENING          /bsmtp

3. 显示每个协议的统计信息

  显示所有端口的统计信息 netstat -s

# netstat -s
 Ip:
  total packets received
  with invalid addresses
  forwarded
  incoming packets discarded
  incoming packets delivered
  requests sent 
 Icmp:
  ICMP messages received
  input ICMP message failed.
 Tcp:
  active connections openings
  failed connection attempts
  connection resets received
 Udp:
  packets received
  packets to unknown port received.
 .....

  显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su

# netstat -st 
# netstat -su

 

4. 在 netstat 输出中显示 PID 和进程名称 netstat -p

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

# netstat -pt
 Active Internet connections (w/o servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
 tcp               ramesh-laptop.loc: .:www        CLOSE_WAIT  /firefox
 tcp               ramesh-laptop.loc: lax:www ESTABLISHED /firefox

5. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)

当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。

同样可以加速输出,因为不用进行比对查询。

# netstat -an

如果只是不想让这三个名称中的一个被显示,使用以下命令

# netsat -a --numeric-ports
# netsat -a --numeric-hosts
# netsat -a --numeric-users

 

6. 持续输出 netstat 信息

netstat 将每隔一秒输出网络信息。

# netstat -c
 Active Internet connections (w/o servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp               ramesh-laptop.loc: ---.ama:www ESTABLISHED
 tcp               ramesh-laptop.loc: .:www      CLOSING
 tcp               ramesh-laptop.loc: server----:www ESTABLISHED
 tcp               ramesh-laptop.loc: .:www      CLOSING
 ^C

 

7. 显示系统不支持的地址族 (Address Families)

netstat --verbose

在输出的末尾,会有如下的信息

netstat: no support  `AF IPXnetstat: no support  `AF AX25netstat: no support  `AF X25netstat: no support  `AF NETROM

 

8. 显示核心路由信息 netstat -r

# netstat -r
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
 .     *               .   U                     eth2
 link-local      *               .     U                     eth2
          .     .         UG                    eth2

注意: 使用 netstat -rn 显示数字格式,不查询主机名称。

 

9. 找出程序运行的端口

并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

# netstat -ap | grep ssh
 tcp               dev-db:ssh           .:        CLOSE_WAIT  -
 tcp               dev-db:ssh           .:        CLOSE_WAIT  -

  找出运行在指定端口的进程

# netstat -an | grep ':80'

 

10. 显示网络接口列表

# netstat -i
 Kernel Interface table
 Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
 eth0                                                              BMU
 eth2                                                      BMRU
 lo                                                               LRU

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

# netstat -ie
 Kernel Interface table
 eth0      Link encap:Ethernet  HWaddr :::::
 UP BROADCAST MULTICAST  MTU:  Metric:
 RX packets: errors: dropped: overruns: frame:
 TX packets: errors: dropped: overruns: carrier:
 collisions: txqueuelen:
 RX bytes: ( B)  TX bytes: ( B)
 Memory:f6ae0000-f6b00000

11. IP和TCP分析

  查看连接某服务端口最多的的IP地址

wss8848@ubuntu:~$ netstat -nat | grep  |awk |awk -F: |sort|uniq -c|sort -nr|head -

  TCP各种状态列表

wss8848@ubuntu:~$ netstat -nat |awk 
established)
Foreign
LISTEN
TIME_WAIT
ESTABLISHED
TIME_WAIT
SYN_SENT

  先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。

wss8848@ubuntu:~$ netstat -nat |awk |sort|uniq -c
 ESTABLISHED
 FIN_WAIT1
 Foreign
 LAST_ACK
 LISTEN
 SYN_SENT
 TIME_WAIT
 established)

  最后的命令如下:
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
分析access.log获得访问前10位的ip地址
awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10

参考资料:http://blog.maxiang.net/10-netstat-command-examples/139/

            http://www.ipcpu.com/2011/07/netstat-linux/

http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316661.html

linux cut 命令

cut:以某种方式按照文件的行进行分割

参数列表:
 -b 按字节选取 忽略多字节字符边界,除非也指定了 -n 标志
 -c    按字符选取
 -d 自定义分隔符,默认为制表符。
 -f 与-d一起使用,指定显示哪个区域。
                            that contains no delimiter character, unless
                            the -s option is specified
      --complement              补全选中的字节、字符或域
 -s, --only-delimited          不打印没有包含分界符的行
      --output-delimiter=字符串 使用指定的字符串作为输出分界符,默认采用输入
                                的分界符
范围控制:
    n:只有第n项
    n-:从第n项一直到行尾
    n-m:从第n项到第m项(包括m)
    -m:从一行的开始到第m项(包括m)
    -:从一行的开始到结束的所有项

cat /etc/passwd | cut -b1-3 #取每行的第1-3字字节

cat /etc/passwd | cut -b1-3,5-7,8 #取每行的第1-3,5-7,8的字节(后面的数字会先进行从小到大的排列) 需要事先知道具体字节,很容易出错

cat song.txt |cut -nb 1,2,3#当 -b 添加 -n 后则不会分割多字节 (我的系统是utf-8,所以需要用三个字节来表示一个汉字)

cat /etc/passwd | cut -c1,3 #适用于中文 

cat /etc/passwd | cut -d : -f 3 #以:分割,取第三段
cat /etc/passwd | cut -d '' #以空格进行分割,且是一个空格

缺点: 有的时候分隔符很难确定

crontab 启动 、运行 和编辑 查看

cron服务是Linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务:

/sbin/service crond start
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload

以上1-4行分别为启动、停止、重启服务和重新加载配置。

要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可

查看当前用户的crontab,输入 crontab -l;

编辑crontab,输入 crontab -e;

删除crontab,输入 crontab -r

iptraf:一个实用的TCP/UDP网络监控工具

iptraf是一个基于ncurses的IP局域网监控器,用来生成包括TCP信息、UDP计数、ICMP和OSPF信息、以太网负载信息、节点状态信息、IP校验和错误等等统计数据。

它基于ncurses的用户界面可以使用户免于记忆繁琐的命令行开关。

特征

  • IP流量监控器,用来显示你的网络中的IP流量变化信息。包括TCP标识信息、包以及字节计数,ICMP细节,OSPF包类型。

  • 简单的和详细的接口统计数据,包括IP、TCP、UDP、ICMP、非IP以及其他的IP包计数、IP校验和错误,接口活动、包大小计数。

  • TCP和UDP服务监控器,能够显示常见的TCP和UDP应用端口上发送的和接收的包的数量。

  • 局域网数据统计模块,能够发现在线的主机,并显示其上的数据活动统计信息。

  • TCP、UDP、及其他协议的显示过滤器,允许你只查看感兴趣的流量。

  • 日志功能。

  • 支持以太网、FDDI、ISDN、SLIP、PPP以及本地回环接口类型。

  • 利用Linux内核内置的原始套接字接口,允许它(指iptraf)能够用于各种支持的网卡上

  • 全屏,菜单式驱动的操作。

安装方法

Ubuntu以及其衍生版本

sudo apt-get install iptraf

Arch Linux以及其衍生版本

sudo pacman -S iptra

Fedora以及其衍生版本

sudo yum install iptraf

用法

如果不加任何命令行选项地运行iptraf命令,程序将进入一种交互模式,通过主菜单可以访问多种功能。

简易的上手导航菜单。

选择要监控的接口。

接口ppp0处的流量。

http://os.51cto.com/art/201505/476216.htm

CentOS 7.0,启用iptables防火墙

今天在测试的时候安装了apache但是外部访问不到

我关闭了防火墙外部就可以访问到了

CentOS 7.0默认使用的是firewall作为防火墙

我在这里改为iptables防火墙

1、关闭firewall:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

2、安装iptables防火墙

yum install iptables-services #安装
vi /etc/sysconfig/iptables #编辑防火墙配置文件
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INP

UT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT

-A INPUT -j REJECT –reject-with icmp-host-prohibited

-A FORWARD -j REJECT –reject-with icmp-host-prohibited

COMMIT

:wq! #保存退出

systemctl restart iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

linux中的at命令,启动atd服务

查看了多个资料,并没有在 /etc/init.d/ 这个目录下发现 atd 文件,所以命令

[root@localhost ~]# /etc/init.d/atd status11
 /etc/init.d/atd start 11

并不起作用。 
使用命令:

[root@localhost ~]# systemctl start atd11
[root@localhost ~]# ps -ef |grep atdroot      4717     1  0 14:36 ?        00:00:00 /usr/sbin/atd -f
root      4733  4429  0 14:36 pts/1    00:00:00 grep --color=auto atd123123

这样就可以看到atd的进程了,然后重新启动任务

[root@tev137 ~]# at 14:40at> date > /root/datetest.logat> <EOT>
job 6 at Wed Feb  8 14:40:00 201712341234

搞定!