命令格式为: #nmap [扫描类型] [选项] <目标主机>
扫描类型:
-sS (TCP SYN扫描半开)
-sT(TCP 连接扫描全开)
-sU (UDP扫描)
-sP (ICMP扫描)
-A //对目标主机做全面分析
选项 :
-n //不对主机名解析
-p //指定端口
选项
-c 数字 //指定抓包次数
-i 接口名称 //指定抓的网卡
-w 文件名 //将抓到的包存放到文件里
-A //转换为ACSII码显示,可读性稍强
-r 文件名 //将文件里面读出来
tcpdump -c 3 -i eth0 (默认) -w /a.txt -A
[过滤条件]
类型: host 主机
net 网络
port 端口
portrange 端口范围
方向
src : 源地址
dst : 目标地址
协议 : tcp udp ip wlan arp
条件可以由组合而成: and (并且) or(或者) not(取反)
举例: nmap -A -i eth0 tcp port 80 and host 172.40.50.123 or host 172.40.50.148
这里执行的为检测 主机172.40.50.123 的 80 端口 和 172.40.50.148 的tcp 协议 我们可以使用()来提升 or 的优先级来实现监听两台主机的80端口 ()不能被系统命令所认知,我们需要使用 \ 反斜线来取消其定义
nmap -A -i eth0 tcp port 80 and \(host 172.40.50.123 or host 172.40.50.148\)
下面是一个简单脚本,使用了位置变量,这里的shift 为跳过前一个定义,所以我们的port端口不会输入到定义IP 地址里,grep -q 意思为屏蔽此次输出若由open 字段 那么返回值 echo $? =0 做了判断,大家可以根据自己要求编写脚本。
#!/bin/bash
port=$1
shift
for ip in $*
do
nmap -n -sS -p $port "172.40.58.$ip" | grep -q open
if [ $? -eq 0 ];then
echo "172.40.58.$ip port $port is open"
else
echo "172.40.58.$ip port $port is down"
fi
do
原文地址:http://blog.51cto.com/13589092/2083572