注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

谷搜互联网应用www.iguso.com

谷搜专注企业邮箱十二年

 
 
 

日志

 
 

查看本机的网络连线与后门:netstat  

2014-11-12 09:58:09|  分类: Linux技术文章 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

如果你觉得你的某个网络服务明明就启动了,但是就是无法造成连线的话,那么应该怎么办? 首先你应该要查询一下自己的网络介面所监听的接口 (port) 来看看是否真的有启动,因为有时候荧屏上面显示的 [OK] 并不一定是 OK 啊!

  [root@www ~]# netstat -[rn] <==与路由有关的参数

  [root@www ~]# netstat -[antulpc] <==与网络介面有关的参数

  选项与参数:

  与路由 (route) 有关的参数说明:

  -r :列出路由表(route table),功能如同 route 这个指令;

  -n :不使用主机名称与服务名称,使用 IP 与 port number ,如同 route -n

  与网络介面有关的参数:

  -a :列出所有的连线状态,包括 tcp/udp/unix socket 等;

  -t :仅列出 TCP 封包的连线;

  -u :仅列出 UDP 封包的连线;

  -l :仅列出有在 Listen (监听) 的服务之网络状态;

  -p :列出 PID 与 Program 的档名;

  -c :可以设定几秒钟后自动更新一次,例如 -c 5 每五秒更新一次网络状态的显示;

  # 范例一:列出目前的路由表状态,且以 IP 及 port number 显示:

  [root@www ~]# netstat -rn

  Kernel IP routing table

  Destination Gateway Genmask Flags MSS Window irtt Iface

  192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

  169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0

  0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0

  # 其实这个参数就跟 route -n 一模一样,美国空间对吧!这不是 netstat 的主要功能啦!

  # 范例二:列出目前的所有网络连线状态,使用 IP 与 port number

  [root@www ~]# netstat -an

  Active Internet connections (servers and established)

  Proto Recv-Q Send-Q Local Address Foreign Address State

  ....(中间省略)....

  tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN

  tcp 0 52 192.168.1.100:22 192.168.1.101:1937 ESTABLISHED

  tcp 0 0 :::22 :::* LISTEN

  ....(中间省略)....

  Active UNIX domain sockets (servers and established)

  Proto RefCnt Flags Type State I-Node Path

  unix 2 [ ACC ] STREAM LISTENING 11075 @/var/run/hald/dbus-uukdg1qMPh

  unix 2 [ ACC ] STREAM LISTENING 10952 /var/run/dbus/system_bus_socket

  unix 2 [ ACC ] STREAM LISTENING 11032 /var/run/acpid.socket

  ....(底下省略)....

  netstat 的输出主要分为两大部分,分别是 TCP/IP 的网络介面部分,以及传统的 Unix socket 部分。 还记得我们在基础篇里面曾经谈到档案的类型吗?那个 socket 与 FIFO 档案还记得吧? 那就是在 Unix 介面用来做为程式资料交流的介面了,也就是上头表格内看到的 Active Unix domain sockets 的内容了~

  通常我都是建议加上『 -n 』这个参数的,因为可以避过主机名称与服务名称的反查,直接以 IP 及埠口号码 (port number) 来显示,显示的速度上会快很多!至于在输出的讯息当中, 我们先来谈一谈关于网络连线状态的输出部分,他主要是分为底下几个大项:

  Proto:该连线的封包协定,主要为 TCP/UDP 等封包;

  Recv-Q:非由使用者程式连接所复制而来的总 bytes 数;

  Send-Q:由远端主机所传送而来,但不具有 ACK 标志的总 bytes 数, 意指主动连线 SYN 或其他标志的封包所占的 bytes 数;

  Local Address:本地端的位址,可以是 IP (-n 参数存在时), 也可以是完整的主机名称。使用的格是就是『 IP:port 』只是 IP 的格式有 IPv4 及 IPv6 的差异。 如上所示,在 port 22 的介面中,使用的 :::22 就是针对 IPv6 的显示,事实上他就相同于 0.0.0.0:22 的意思。 至于 port 25 仅针对 lo 介面开放,意指 Internet 基本上是无法连接到我本机的 25 埠口啦!

  Foreign Address:远端的主机 IP 与 port number

  stat:状态列,主要的状态含有:

  ESTABLISED:已建立连线的状态;

  SYN_SENT:发出主动连线 (SYN 标志) 的连线封包;

  SYN_RECV:接收到一个要求连线的主动连线封包;

  FIN_WAIT1:该插槽服务(socket)已中断,该连线正在断线当中;

  FIN_WAIT2:该连线已挂断,但正在等待对方主机回应断线确认的封包;

  TIME_WAIT:该连线已挂断,但 socket 还在网络上等待结束;

  LISTEN:通常用在服务的监听 port !可使用『 -l 』参数查阅。

  基本上,我们常常谈到的 netstat 的功能,就是在观察网络的连线状态了,外贸企业邮箱而网络连线状态中, 又以观察『我目前开了多少的 port 在等待用户端的连线』以及 『目前我的网络连线状态中,有多少连线已建立或产生问题』最常见。 那你如何了解与观察呢?通常我是这样处理的:

  # 范例三:秀出目前已经启动的网络服务

  [root@www ~]# netstat -tulnp

  Active Internet connections (only servers)

  Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

  tcp 0 0 0.0.0.0:34796 0.0.0.0:* LISTEN 987/rpc.statd

  tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind

  tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master

  tcp 0 0 :::22 :::* LISTEN 1155/sshd

  udp 0 0 0.0.0.0:111 0.0.0.0:* 969/rpcbind

  ....(底下省略)....

  # 上面最重要的其实是那个 -l 的参数,因为可以仅列出有在 Listen 的 port

  你可以发现很多的网络服务其实仅针对本机的 lo 开放而已,网际网络是连接不到该埠口与服务的。 而由上述的资料我们也可以看到,启动 port 111 的,其实就是 rpcbind 那只程式,那如果想要关闭这个埠口, 你可以使用 kill 删除 PID 969,也可以使用 killall 删除 rpcbind 这个程序即可。如此一来, 很轻松的你就能知道哪个程式启动了哪些埠口了!

  # 范例四:观察本机上头所有的网络连线状态

  [root@www ~]# netstat -atunp

  Active Internet connections (servers and established)

  Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program

  tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind

  tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1155/sshd

  tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master

  tcp 0 52 192.168.1.100:22 192.168.1.101:1937 ESTABLISHED 4716/0

  ....(底下省略)....

  看到上头的特殊字体吧?那代表目前已经建立连线的一条网络连线,企业邮箱他是由远端主机 192.168.1.101 启动一个大于 1024 的埠口向本地端主机 192.168.1.100 的 port 22 进行的一条连线, 你必须要想起来的是:『Client 端是随机取一个大于 1024 以上的 port 进行连线』,此外『只有 root 可以启动小于 1024 以下的 port 』,那就看的懂上头那条连线了!如果这条连线你想要砍掉他的话, 看到最右边的 4716 了没? kill 会用吧!

  至于传统的 Unix socket 的资料,记得使用 man netstat 查阅一下吧! 这个 Unix socket 通常是用在一些仅在本机上运作的程式所开启的插槽介面档, 例如 X Window 不都是在本机上运作而已吗?那何必启动网络的 port 呢?当然可以使用 Unix socket 了,另外,例如 Postfix 这一类的网络服务器,由于很多动作都是在本机上头来完成的, 所以以会占用很多的 Unix socket 哦!

  例题:

  请说明服务名称与 port number 的对应在 Linux 当中,是用那个档案来设定对应的?

  答:

  /etc/services

  评论这张
 
阅读(22)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017