十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
目的:实现局域网内的主机扫描
成都创新互联公司是一家网站建设、网站制作,提供网页设计,网站设计,网站制作,建网站,按需求定制设计,网站开发公司,2013年至今是互联行业建设者,服务者。以提升客户品牌价值为核心业务,全程参与项目的网站策划设计制作,前端开发,后台程序制作以及后期项目运营并提出专业建议和思路。使用kali对局域网主机进行扫描时候,arping命令只能挨个挨个ip的扫描,下面写一个简单的脚本实现批量扫描
root@kal:~/scan# vim arping.sh
#! bin/bash
if [ $# -ne 1 ];then
echo "Tips Example: ./arping 10.10.10"
exit
fi
prefix=$1
for i in $(seq 1 254);do
{
ip=$prefix.$i
arping $ip -c 1 | grep "reply from" | awk -F" " '{print $4}'
}& #这里是实现多进程扫描,用时非常短,可以尝试不加 & 符号,没有对比没有伤害嘛!
done
缺点:不能路由
1) root@kal:~# netdiscover -p
隐藏扫描,也就是通过嗅探局域网中主机的数据发送判断主机是否存活,隐蔽性比较好,但是,如果主机存活,没有数据交互那么这个命令就扫描不到
2) root@kal:~/scan# netdiscover -i eth0 -r 10.10.10.0/24
主动扫描,-i 设置网卡,-r 设置扫描范围
已经写过,有兴趣可以去这里看看 https://blog.51cto.com/13155409/2129980
root@kal:~/scan# nmap -sn 10.10.10.0/24
直接可以实现批量扫描。-sn表示不扫描端口
root@kal:~/scan# ping 10.10.10.12
同样只能单个主机扫描
编写脚本实现多个ip扫描
#!/bin/bash
if [ $# -eq 0 ];then
echo "useage ./pinger [/24 network address] "
echo "Example ./pinger.sh 172.16.15"
exit
fi
prefix=$1
for addr in $(seq 1 254)
do
ping $prefix.$addr -c 1|grep "bytes from"|awk -F" " '{print $4}'|cut -d":" -f 1
done
##三、 四层主机发现##
优点:
可路由并且结果可靠
不太可能被防火墙过滤
甚至可以发现所有端口都被过滤的主机
缺点:
基于状态过滤的防火墙可能过滤扫描
全端口扫描速度慢
TCP:
未经过请求的ACK——RST
SYN——SYN/ACK、RST
UDP:
ICMP端口不可达,一去不复返
扫描原理:在没有与目标主机直接建立三次连接时,直接发送ACK包,那么目标主机就会返回一个RST,通过这种方式判断主机的存活。不过这个并不是完全正确的,也存在特例,主机存在,但是不会返回RST包。
>>> IP().show() #交互界面查看IP需要设置参数
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= hopopt
chksum= None
src= 127.0.0.1
dst= 127.0.0.1
\options\
>>> TCP().show() #交互界面查看TCP所需参数
###[ TCP ]###
sport= ftp_data
dport= http #设置目的端口(判断主机存活时,可以随便设置,不管目标端口是否存在,都会返回一个RST)
seq= 0
ack= 0
dataofs= None
reserved= 0
flags= S #将这里设置成A,表示发送ACK包
window= 8192
chksum= None
urgptr= 0
options= {}
发送一个存活主机,但是端口不存活的
a1 = sr1(IP(dst='10.10.10.13')/TCP(dport=1111,flags='A'),timeout=1,verbose=0)
a1.show()
###[ IP ]###
version= 4L
..............
\options\
###[ TCP ]###
sport= 1111 #如果端口存活,会返回相应的服务名称
dport= ftp_data
................
urgptr= 0
options= {}
###[ Padding ]###
load= '\x00\x00\x00\x00\x00\x00'
发送一个存活主机,端口也存活的
a1 = sr1(IP(dst='10.10.10.13')/TCP(dport=111,flags='A'),timeout=1,verbose=0)
a1.show()
###[ IP ]###
version= 4L
.........
src= 10.10.10.13
dst= 10.10.10.11
\options\
###[ TCP ]###
sport= sunrpc #端口存活的话,会返回服务名称
dport= ftp_data
......
urgptr= 0
options= {}
###[ Padding ]###
load= '\x00\x00\x00\x00\x00\x00'
发送给一个不存活主机
a1 = sr1(IP(dst='10.10.10.133')/TCP(dport=1111,flags='A'),timeout=1,verbose=0)
WARNING: Mac address to reach destination not found. Using broadcast.
不会得到任何回应
————————————————————————————————
利用脚本实现ACK的扫描如下:
#!/usr/bin/python
#!encoding=utf-8
from scapy.all import *
import sys
import time
def scanf(ip):
response = sr1(IP(dst=ip)/TCP(flags='A',dport=80),timeout=0.1,verbose=0) #三层和四层结合,构造包
if(response):
print ip
def ip_range(prefix):
try:
for addr in range(20):
ip = prefix + '.' + str(addr)
scanf(ip)
except KeyboardInterrupt:
print
exit
def main():
try:
prefix = raw_input('请输入ip段:')
prefix = prefix.split('.')[0:3]
ip = prefix[0]+'.'+prefix[1]+'.'+prefix[2]
ip_range(ip)
except KeyboardInterrupt:
print "\n*********1.重新输入"
print "*********2.退出\n"
choice = int(raw_input('******请输入您的选择:'))
if choice == 1 | choice != 2:
print "\n"
main()
else:
exit()
if __name__ == "__main__":
main()
扫描原理: 利用发送的数据包到主机上,如果主机的存活并且目标端口不存活才会返回一个ICMP不可达,否则发送的UDP就会一去不复返(如:目标主机不存在、目标主机存在并且端口开放)
【目标主机存在但是端口不是存活状态】
a1 = sr1(IP(dst='10.10.10.12')/UDP(dport=12345),timeout=1)
Begin emission:
...Finished to send 1 packets.
*
Received 4 packets, got 1 answers, remaining 0 packets #收到 1个回复
【目标主机存在,并且端口存活】
a1 = sr1(IP(dst='10.10.10.12')/UDP(dport=445),timeout=1)
Begin emission:
.Finished to send 1 packets.
.........
Received 10 packets, got 0 answers, remaining 1 packets #收到 0个回复
【目标主机不存在】
a1 = sr1(IP(dst='10.10.10.123')/UDP(dport=445),timeout=1)
Begin emission:
............WARNING: Mac address to reach destination not found. Using broadcast.
Finished to send 1 packets.
.........
Received 21 packets, got 0 answers, remaining 1 packets #收到 0个回复
实现脚本可以通过修改上面的脚本实现。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。