展开全部

常常看到有些人想要知道自己的Linux主机到底开放了多少Port?要如何来检测呢。通常32313133353236313431303231363533e4b893e5b19e31333365633935我们知道的Port有下面这几个:

* ftp:21
* telnet:23
* smtp:25
* http:80
* pop-3:110
* netbios-ssn:139
* squid:3128
* mysql:3306

端口当然不只这些个,如何知道Port是否被开启呢?

检测你开启的服务有哪些?使用功能强大的 netstat 指令。

在做为服务器的Linux系统中,服务项目是越少越好!这样可以减少避免不必要的入侵通道。要了解自己的系统当中的服务项目,最简便的方法就是使用nestat 了!这个命令不但简单(是每一个Linux系统都会安装的套件!),而且功能也是很不错的,例如我们在检查WWW使用者的人数时,就很需要这个命令!好了,我们来看一下netstat 的使用方法:

复制内容到剪贴板

代码:

[root@localhost ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             Stat                                                                                                 e
tcp        0      0 ::ffff:192.168.1.178:ssh    ::ffff:192.168.1.175:4235   ESTA                                                                                                 BLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  10     [ ]         DGRAM                    4701   /dev/log
unix  2      [ ]         DGRAM                    5846   @/var/run/hal/hotplug_s                                                                                                 ocket
unix  2      [ ]         DGRAM                    2901   @udevd
unix  3      [ ]         STREAM     CONNECTED     5845   /var/run/dbus/system_bu                                                                                                 s_socket
unix  3      [ ]         STREAM     CONNECTED     5844
unix  3      [ ]         STREAM     CONNECTED     5792   /var/run/dbus/system_bu                                                                                                 s_socket
unix  3      [ ]         STREAM     CONNECTED     5791
unix  3      [ ]         STREAM     CONNECTED     5724
unix  3      [ ]         STREAM     CONNECTED     5723

如上所示,单纯使用 netstat 的时候,仅 列出目前已经连通的服务与服务名称。所以你可以看到,由于目前仅有一个ssh连接成功,所有就只显示出一个 ESTABLISHED(连接中的意思)。 上面的 :

复制内容到剪贴板

代码:

tcp        0      0 ::ffff:192.168.1.178:ssh    ::ffff:192.168.1.175:4235

这一行表示有一个SSH的服务开放,是由远端的 192.168.1.175这个IP连接到 192.168.1.178 的。而连接的端口是4235。那如果我需要将所有的项目列出来呢?

复制内容到剪贴板

代码:

[root@localhost ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             Stat                                                                                                 e
tcp        0      0 *:32768                     *:*                         LIST                                                                                                 EN
tcp        0      0 *:sunrpc                    *:*                         LIST                                                                                                 EN
tcp        0      0 *:auth                      *:*                         LIST                                                                                                 EN
tcp        0      0 localhost.localdomain:ipp   *:*                         LIST                                                                                                 EN
tcp        0      0 localhost.localdomain:smtp  *:*                         LIST                                                                                                 EN
tcp        0      0 *:ssh                       *:*                         LIST                                                                                                 EN
tcp        0      0 ::ffff:192.168.1.178:ssh    ::ffff:192.168.1.175:1237   ESTA                                                                                                 BLISHED
udp        0      0 *:32768                 *:*
udp        0      0 *:955                   *:*
udp        0      0 *:sunrpc                *:*
udp        0      0 *:ipp                   *:*

如上所示,加入 -a(all)就可以了。将所有在机器上 (监听 Listem)或者是(已建立连接的)的服务通通列出的意思。不过,服务的名称已经使用 /etc/services 里面的名称了,而不是使用 port 的数字!目前我主机上面的服务共开放了:sunrpc、auth、ssh、ipp、smtp.等服务(就是 Listen的那几个服务)至于已经建立的服务就只有 SSH 这一个!那如果我想知道开放了哪些端口号呢?呵呵,就使用下面的命令吧!

复制内容到剪贴板

代码:

[root@localhost ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:32768               0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:113                 0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0      0 :::22                       :::*                        LISTEN
tcp        0     52 ::ffff:192.168.1.178:22     ::ffff:192.168.1.175:1237   ESTABLISHED
udp        0      0 0.0.0.0:32768           0.0.0.0:*
udp        0      0 0.0.0.0:955             0.0.0.0:*
udp        0      0 0.0.0.0:111             0.0.0.0:*
udp        0      0 0.0.0.0:631             0.0.0.0:*

如上所示,我接通的服务只有22这一个,而其它的你可以参照上面的命令输出结果来对照,所以你就可以知道:smtp为25端口。因此,通过使用此命令,就可以轻易的子解目前主机的运作状况与服务状态了。当然了,netstat的用途不止于此,你可以使用 man netstat 来查阅一番喔!相信对你的主机会有更大的了解。

相信有不少的朋友都会有这个困扰,就是要怎样删除已经建立的联机呢?因为总有些不速之客会连到您的主机来进行一些破坏的工作!或者是您根本不想让对方联机过来!呵呵!还记得 鸟哥的 Linux 私房菜--基础学习篇内的资源管理 里面提到的几个常用的指令吧!?那就是找出那个联机程序的 PID ,然后给他 kill 掉就是了!简单呀!不过,大问题是『我要怎样找出联机的 PID 呀!?』呵呵!由于 PID 的管理与整体的系统资源有关,这个时候,虽然可以使用 netstat 来观察 PID ,不过只有 root 可以观察到联机状态的 PID 号码呦!( 注:还记得资源管理提及的 PID 概念吗?就是说,在 Linux 系统之内,每个『程序』系统都会给予一个号码来管理!这个就是 PID 啰!)

复制内容到剪贴板

代码:

[root@test root]# netstat -ap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:ssh                   *:*                     LISTEN      32149/sshd
tcp        0    284 140.116.141.19:ssh      192.168.1.11:1391       ESTABLISHED 24751/sshd
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  7      [ ]         DGRAM                    944    509/syslogd         /dev/log
unix  2      [ ]         DGRAM                    3035915 16648/xinetd
unix  2      [ ]         DGRAM                    739227 5951/pppoe
unix  2      [ ]         DGRAM                    739189 5949/pppd
unix  2      [ ]         DGRAM                    1070   628/crond
unix  2      [ ]         DGRAM                    953    514/klogd
unix  2      [ ]         STREAM     CONNECTED     690    1/init [3]

看到上面那个斜体字的联机建立的网络状态了吗?嘿嘿!最后面一栏就是显示那个 PID/Program name ,那个 PID ( 上面是 24751 )也就是我们要来砍掉的啦!这个时候,如果要将该联机砍掉时,就直接以 kill 来做吧!

复制内容到剪贴板

代码:

[root@test root]# kill -9 24751

这样就能将该联机给他『踢出去』您的主机啦!! ^_^""