需求: IT 自用服务器网段,该网段服务器使用的ip地址属于手动分配,且纪录不全,且部分服务器的IP 禁ping ,当有同组it同事, 申请了新的测试服务器, 需要再手动分配ip地址,在记录不全,且有禁ping服务器的情况下, 很可能出现配置了重复ip的情况。
解决思路理论:
icmp属于三层网络协议,基于ip地址可达来判断。
ARP属于二层协议,服务器可以屏蔽icmp, 但不可能,也做不到屏蔽二层arp协议。使用scapy构造一个arp报文广播, 向全网段广播查询该网段的所有ip地址的ARP 查询, 发出who is XXXX.则服务器必然响应。
1:安装:
CentOS Linux release 7.6.1810 (Core)
yum -y install epel-release
yum -y install python-pip
pip install scapy
2:
二 使用nmap
nmap的几大重点特征:
Nmap会根据它扫描的网络来改变它的扫描方式。
1.如果扫描的时本地网络,Nmap在每次扫描时发送ARP数据包
2.如果是扫描外网就发送以下请求数据包:
ICMP回应请求
ICMP时间戳请求
TCP SYN到端口443
TCP ACK到端口80
实际测试与理论略有差别,这里不做深入研究。
一共3台主机, 被测试主机有两台, 测试主机ip 192.168.1.234,被测试主机192.168.1.233 开了iptables,基于ip做了策略。被测试主机 172.27.1.137 开了windows 防火墙禁ping.
以下操作在192.168.1.234上执行
ping 192.168.1.233 不通。
nmap 192.168.1.233/32 可以发现主机up, 原因是nmap同网段走的arp.
ping 172.27.1.137 不通。
nmap 172.27.1.137/32 不通, 原因是走的icmp.
nmap -sn 172.27.1.137/32 不通。 -sn ping扫描,即主机发现
nmap -sP 172.27.1.137/32 不通。
nmap -sP -PS 172.27.1.137/32
-PS默认在80端口发送TCP SYN数据包;我们还可以指定端口,比如-PS443(指定443)端口
nmap 172.27.1.0/24 ,比较奇怪,没有扫出 172.27.1.137
nmap -sP -PS 172.27.1.0/24 可以扫出137
-sT TCP connect()扫描,在目标主机的日志中记录大批连接请求和错误信息
-sS 半开扫描,很少有系统能够把它记入系统日志。(需要root权限)
-sF、-sN 秘密FIN数据包扫描、Xmas Tree、Null扫描模式
-sP ping扫描,默认扫描端口使用ping扫描,只有主机存活,Nmap才会继续扫描
-sU UDP扫描(不可靠)
-sA 穿过防火墙的规则集
-sV 探测端口服务版本
-P0 扫描之前不需要用ping命令
-v 显示扫描过程
-h 帮助
-p 指定端口(1-65535)
-O 启用远程操作系统检测(存在误报)
-A 全面系统检测、启用脚本检测、扫描等
-oN/-oX/-oG 将报告写入文件,分别是正常、XML、grepable三种格式
-T4 针对TCP端口禁止动态扫描延迟超过10ms
-iL 读取主机列表
nmap 快速扫描 ,可能不准
nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 -oX nmap_output.xml 172.27.1.0/24
-sn 不扫描端口,只ping主机
-PE 通过ICMP echo判定主机是否存活
-n 不反向解析IP地址到域名
–min-hostgroup 1024 最小分组设置为1024个IP地址,当IP太多时,nmap需要分组,然后串行扫描
–min-parallelism 1024 这个参数非常关键,为了充分利用系统和网络资源,我们将探针的数目限定最小为1024
-oX nmap_output.xml 将结果以XML格式输出,文件名为nmap_output.xml