两者的区别如下:
l netstat:在本机上面以自己的程序监测自己的 port;
l nmap:透过网络的侦测软件辅助,可侦测非本机上的其他网络主机。
1、 netstat的常规用法:
1.1 列出正在监听的网络端口:
[root@www ~]# netstat -tunl ctive Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN ....(底下省略).... |
上面说明我的主机至少启动了111、22和25等端口,而25端口只针对 lo 内部循环测试网络提供服务,因特网是连不到该埠口的。
1.2 列出已经连接的网络端口:
[root@www ~]# netstat -tun Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 52 192.168.1.100:22 192.168.1.101: 56746 ESTABLISHED |
从上面的数据来看,我的本地端服务器 (Local Address, 192.168.1.100) 目前仅有一条已建立的联机,那就是与 192.168.1.101 那部主机连接的联机,并且联机方线是由对方连接到我主机的 port 22 来取用我服务器的服务吶!
1.3 删除已建立连接或监听中的连接:
如果想要将已经建立,或者是正在监听当中的网络服务关闭的话,最简单的方法当然就是找出该联机的 PID, 然后将他 kill 掉即可啊!例如下面的范例:
[root@www ~]# netstat -tunp Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/P name tcp 0 52 192.168.1.100:22 192.168.1.101:56746 ESTABLISHED 1342/0 |
如上面的范例,我们可以找出来该联机是由 sshd 这个程序来启用的,并且他的 PID 是 1342, 希望你不要心急的用 killall 这个指令,否则容易删错人 (因为你的主机里面可能会有多个 sshd 存在), 应该要使用 kill 这个指令才对喔!
2、 NMAP的使用:
如果你要侦测的设备并没有可让你登入的操作系统时,那该怎么办?举例来说,你想要了解一下公司的网络打印机是否有开放某些协议时, 那该如何处理啊?现在你知道 netstat 可以用来查阅本机上面的许多监听中的通讯协议, 那例如网络打印机这样的非本机的设备,要如何查询啊?呵呵!用 nmap 就对了!
[root@www ~]# nmap [扫瞄类型] [扫瞄参数] [hosts 地址与范围] 选项与参数: [扫瞄类型]:主要的扫瞄类型有底下几种: -sT:扫瞄 TCP 封包已建立的联机 connect() ! -sS:扫瞄 TCP 封包带有 SYN 卷标的数据 -sP:以 ping 的方式进行扫瞄 -sU:以 UDP 的封包格式进行扫瞄 -sO:以 IP 的协议 (protocol) 进行主机的扫瞄 [扫瞄参数]:主要的扫瞄参数有几种: -PT:使用 TCP 里头的 ping 的方式来进行扫瞄,可以获知目前有几部计算机存活(较常用) -PI:使用实际的 ping (带有 ICMP 封包的) 来进行扫瞄 -p :这个是 port range ,例如 1024-, 80-1023, 30000-60000 等等的使用方式 [Hosts 地址与范围]:这个有趣多了,有几种类似的类型 192.168.1.100 :直接写入 HOST IP 而已,仅检查一部; 192.168.1.0/24 :为 C Class 的型态, 192.168.*.* :嘿嘿!则变为 B Class 的型态了!扫瞄的范围变广了! 192.168.1.0-50,60-100,103,200 :这种是变形的主机范围啦!很好用吧!
# 范例一:使用预设参数扫瞄本机所启用的 port (只会扫瞄 TCP) [root@www ~]# yum install nmap [root@www ~]# nmap localhost PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 111/tcp open rpcbind # 在预设的情况下,nmap 仅会扫瞄 TCP 的协议喔! |
nmap 的用法很简单吶!就直接在指令后面接上 IP 或者是主机名即可。不过,在预设的情况下 nmap 仅会帮你分析 TCP 这个通讯协议而已,像上面这个例子的输出结果。但优点是顺道也将开启该埠口的服务也列出来了, 真是好! ^_^!那如果想要同时分析 TCP/UDP 这两个常见的通讯协议呢?可以这样做:
# 范例二:同时扫瞄本机的 TCP/UDP 埠口 [root@www ~]# nmap -sTU localhost Starting Nmap 5.51 ( http://nmap.org ) at 2013-02-23 14:39 CST Nmap scan report for localhost (127.0.0.1) Host is up (0.00098s latency). Other addresses for localhost (not scanned): 127.0.0.1 Not shown: 1990 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http 111/tcp open rpcbind 631/tcp open ipp 3306/tcp open mysql 9000/tcp open cslistener 111/udp open rpcbind 631/udp open|filtered ipp 5353/udp open|filtered zeroconf |
与前面的范例比较一下,你会发现这次多了几个 UDP 的埠口,这样分析好多了!然后, 如果你想要了解一下到底有几部主机活在你的网络当中时,则可以这样做:
# 范例三:透过 ICMP 封包的检测,分析区网内有几部主机是启动的 [root@www ~]# nmap -sP 192.168.1.0/24 Starting Nmap 5.21 ( http://nmap.org ) at 2011-07-20 17:05 CST Nmap scan report for www.centos.vbird (192.168.1.100) Host is up. Nmap scan report for 192.168.1.101 <==这三行讲的是 192.168.101 的范例! Host is up (0.00024s latency). MAC Address: 00:1B:FC:58:9A:BB (Asustek Computer) Nmap scan report for 192.168.1.254 Host is up (0.00026s latency). MAC Address: 00:0C:6E:85:D5:69 (Asustek Computer) Nmap done: 256 IP addresses (3 hosts up) scanned in 3.81 seconds |
看到否?我的环境当中有三部主机活着 (Host is up)!并且该 IP 所对应的 MAC 也会被记录下来