渗透测试往往离不开扫描C段网络网站情况,有没有什么办法可以快速去查询C段网站信息呢,答案是肯定的。比如目前各种在线网站的C段查询,像cduan.cc,www.144118.com 这类网站都可以比较方便查询到目标网站的C段情况,作为一个python初学者,这是一个学习的机会,来吧,跟我一起写代码。
这里我直接说下我的思路:
1、抓包分析 "www.144118.com" 的请求过程;
2、使用urllib2等库完成单一IP的请求查询;
3、分析"www.144118.com"的返回值;
4、使用sys.argv函数接收参数信息;
5、处理接收的参数;
分析过程我这里不具体去写过程了,直接上代码:
=============分割线=============
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: IcySun
# 脚本功能:C段扫描
import requests,urllib2,urllib
import socket, json,sys,re
class scanC():
def use(self):
print '#' * 50
print u'\t\t C段扫描'
print '\t\t\t Code By: IcySun'
print '\t python scanc.py www.xxx.com(ip) '
print '#' * 50def ipChk(self,in_put):
pattern = r"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
if re.match(pattern, in_put):
return True
else:
return Falsedef www2ip(self,name):
try:
result = socket.getaddrinfo(name, None)
return result[0][4][0]
except:
return 0def scan(self,ip):
payload = {'action':'query','ip':ip}
test_data_urlencode = urllib.urlencode(payload)
req = urllib2.Request(url = weburl,data = test_data_urlencode)
try:
res_data = urllib2.urlopen(req,timeout = 3)
con = json.loads(res_data.read())
if isinstance(con['list'],list):
if len(con['list']) != 0:
print ip,con['list'][0]
with open('c.txt','a+') as c:
c.write(ip+' '+con['list'][0]+'\n')
else :
for (d,x) in con['list'].items():
print ip,str(x)
with open('c.txt','a+') as c:
c.write(ip+' '+str(x)+'\n')
except socket.timeout, e:
pass
except urllib2.URLError,e:
passdef main():
global weburl
s = scanC()
weburl = 'http://www.144118.com/api/Cclass.php'
if len(sys.argv) != 2:
s.use()
sys.exit()
in_put = sys.argv[1]
if s.ipChk(in_put):
ip1 = re.match(r"^\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.+",in_put).group(0)
for i in xrange(1,255):
ip = ip1 + str(i)
s.scan(ip)else:
ip1 = re.match(r"^\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.+",s.www2ip(in_put)).group(0)
for i in xrange(1,255):
ip = ip1 + str(i)
s.scan(ip)if __name__ == '__main__':
main()
=============分割线=============
执行结果如下:
附上oschina的git项目地址:
http://git.oschina.net/icysun/scanC
备注:
由于调用其他网站,没有采用多线程去编写。
如果你感觉此脚本对你有所帮助,请扫描二维码赞助,谢谢!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论