Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
寻_觅
网安Python小脚本
比较版本
88fcd54d1ed29a443a512569b7164a4b223261ab...c97f5b2a96052f37968e5823d9a039419279e9af
网
网安Python小脚本
项目概览
寻_觅
/
网安Python小脚本
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
网
网安Python小脚本
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
源分支
c97f5b2a96052f37968e5823d9a039419279e9af
选择Git版本
...
目标分支
88fcd54d1ed29a443a512569b7164a4b223261ab
选择Git版本
比较
Commits (2)
https://gitcode.net/qq_39611230/py_s/-/commit/738039800e6d926729c093fc07b998e0a4ee9d37
紧急修复403的一处bug,提交一下edu专用脚本初版
2021-10-15T11:01:04+08:00
寻觅_X13
xunmiemail@vip.qq.com
https://gitcode.net/qq_39611230/py_s/-/commit/c97f5b2a96052f37968e5823d9a039419279e9af
Merge remote-tracking branch 'csdn/默认分支' into 默认分支
2021-10-15T11:01:20+08:00
寻觅_X13
xunmiemail@vip.qq.com
隐藏空白更改
内联
并排
Showing
2 changed file
with
150 addition
and
2 deletion
+150
-2
403绕过.py
403绕过.py
+2
-2
edu.cn专用脚本.py
edu.cn专用脚本.py
+148
-0
未找到文件。
403绕过.py
浏览文件 @
c97f5b2a
...
@@ -142,6 +142,8 @@ if 命令.parse_args().域名:
...
@@ -142,6 +142,8 @@ if 命令.parse_args().域名:
except
:
except
:
print
(
命令
.
format_help
())
print
(
命令
.
format_help
())
raise
TypeError
(
"参数格式错误!"
)
raise
TypeError
(
"参数格式错误!"
)
else
:
格式化参数
=
None
绕过403限制
(
命令
.
parse_args
().
域名
,
命令
.
parse_args
().
请求方式
,
格式化参数
).
运行
()
绕过403限制
(
命令
.
parse_args
().
域名
,
命令
.
parse_args
().
请求方式
,
格式化参数
).
运行
()
elif
命令
.
parse_args
().
文件名
:
elif
命令
.
parse_args
().
文件名
:
with
open
(
命令
.
parse_args
().
文件名
)
as
读取数据
:
with
open
(
命令
.
parse_args
().
文件名
)
as
读取数据
:
...
@@ -149,5 +151,3 @@ elif 命令.parse_args().文件名:
...
@@ -149,5 +151,3 @@ elif 命令.parse_args().文件名:
绕过403限制
(
i
).
运行
()
绕过403限制
(
i
).
运行
()
else
:
else
:
print
(
命令
.
format_help
())
print
(
命令
.
format_help
())
edu.cn专用脚本.py
浏览文件 @
c97f5b2a
from
数据连接
import
读取数据
,
连接数据库
from
爬虫模板
import
爬虫常用配置
import
requests
import
datetime
# 弄个进度条库
from
tqdm
import
tqdm
,
trange
# 线程池
from
concurrent.futures
import
ThreadPoolExecutor
当前日期
=
datetime
.
datetime
.
now
().
date
()
# 查询语句
# "SELECT * FROM `cn.edu数据` WHERE `id` = '1'"
# 添加语句
# UPDATE `cn.edu数据` SET `存活状态` = 1 WHERE `id` = 1
# 添加日期的日期格式
# UPDATE `网安数据记录`.`cn.edu数据` SET `存活检查日期` = 'edu无法访问网站数据(2021-10-10).txt' WHERE `id` = 1
# 获取表长度
# select count(*) from A
# 存活状态 1存活, 0不存货(教育网存活,非教育网不存活为1, 反之为0)
class
数据库操作
:
def
__init__
(
self
,
SQL语句
=
None
):
self
.
数据库
=
连接数据库
(
游标
=
False
)
self
.
数据库游标
=
连接数据库
()
self
.
SQL语句
=
SQL语句
self
.
数据库游标
.
execute
(
"SELECT count(*) FROM `cn.edu数据`"
)
self
.
数据库长度
=
self
.
数据库游标
.
fetchone
()[
0
]
def
所有数据
(
self
):
for
i
in
trange
(
self
.
数据库长度
,
desc
=
'网站存活率检测进度: '
):
self
.
数据库游标
.
execute
(
f
"SELECT * FROM `cn.edu数据` WHERE `id` = '
{
i
+
1
}
'"
)
数据
=
self
.
数据库游标
.
fetchone
()
# 小记录: 这里原本返回值用的是`self.数据库游标`, 但是这样`self.数据库游标`都会指向同一个地方,会导致一些数据丢失!
yield
数据
def
存活网站地址
(
self
,
后缀
=
'/'
):
for
i
in
trange
(
self
.
数据库长度
,
desc
=
'检测进度: '
):
self
.
数据库游标
.
execute
(
f
"SELECT * FROM `cn.edu数据` WHERE `id` = '
{
i
+
1
}
' and `存活状态` = '1'"
)
数据
=
self
.
数据库游标
.
fetchone
()
if
数据
:
if
数据
[
7
]
and
数据
[
7
]
!=
"无"
:
url
=
数据
[
7
].
rstrip
(
"/"
)
目标
=
url
+
后缀
# yield {"数据库id": 数据[0], "学校名称": 数据[1]}, 数据[7]
yield
目标
if
数据
[
6
]
and
数据
[
6
]
!=
"无"
:
url
=
数据
[
6
].
rstrip
(
"/"
)
目标
=
url
+
后缀
# yield {"数据库id": 数据[0], "学校名称": 数据[1]}, 数据[6]
yield
目标
def
存活信息保存
(
self
,
sql或id
,
存活状态
=
1
):
数据库游标
=
self
.
数据库
.
cursor
()
try
:
try
:
int
(
sql或id
)
sql存储语句
=
[
"UPDATE `cn.edu数据` SET `存活状态` = '%s' WHERE `id` = '%s'"
%
(
存活状态
,
sql或id
),
"UPDATE `网安数据记录`.`cn.edu数据` SET `存活检查日期` = '%s' WHERE `id` = '%s'"
%
(
当前日期
,
sql或id
)
]
except
:
if
isinstance
(
sql或id
,
list
):
sql存储语句
=
sql或id
else
:
sql存储语句
=
[
sql或id
]
for
i
in
sql存储语句
:
数据库游标
.
execute
(
i
)
self
.
数据库
.
commit
()
except
Exception
as
异常
:
print
(
'[数据库]保存数据失败!'
,
"错误信息"
,
{
repr
(
异常
)})
def
网站存活检测
(
网址
):
try
:
爬虫数据
=
爬虫常用配置
().
运行
(
网址
)
if
爬虫数据
[
"状态码"
]
!=
"200"
:
return
True
,
{
"网址"
:
网址
,
"错误信息"
:
f
"网站标题:
{
爬虫数据
[
'网页标题'
]
}
"
,
"备注"
:
爬虫数据
.
get
(
"备注"
)}
else
:
return
False
,
{
"网址"
:
网址
,
"错误信息"
:
f
"状态码异常:
{
爬虫数据
[
'状态码'
]
}
"
,
"备注"
:
爬虫数据
.
get
(
"备注"
)}
except
Exception
as
异常
:
return
False
,
{
"网址"
:
网址
,
"错误信息"
:
{
repr
(
异常
)}}
class
多线程网站存活记录
:
# 推荐线程数范围为[cpu数量*2:cpu数量*5]
def
__init__
(
self
,
线程数
=
32
):
self
.
问题网站记录
=
[]
self
.
_线程数
=
线程数
def
__信息输出
(
self
,
网站信息
):
正常_网站
=
{
"数据库id"
:
网站信息
[
0
],
"学校名称"
:
网站信息
[
1
]}
数据
=
[]
if
网站信息
[
7
]
and
网站信息
[
7
]
!=
"无"
:
ok
,
抓取信息
=
网站存活检测
(
网站信息
[
7
])
if
ok
:
正常_网站
[
"非教育网地址"
]
=
网站信息
[
7
]
else
:
数据
.
append
(
抓取信息
)
if
网站信息
[
6
]
and
网站信息
[
6
]
!=
"无"
:
ok
,
抓取信息
=
网站存活检测
(
网站信息
[
6
])
if
ok
:
正常_网站
[
"教育网地址"
]
=
网站信息
[
6
]
else
:
数据
.
append
(
抓取信息
)
if
ok
:
数据库操作
().
存活信息保存
(
正常_网站
[
'数据库id'
])
else
:
数据库操作
().
存活信息保存
(
正常_网站
[
'数据库id'
],
存活状态
=
0
)
if
数据
:
问题_网站
=
{
"数据库id"
:
网站信息
[
0
],
"学校名称"
:
网站信息
[
1
],
"问题信息"
:
数据
}
self
.
问题网站记录
.
append
(
问题_网站
)
return
正常_网站
def
运行
(
self
,
保存_错误信息
=
False
):
print
(
"扫描时请关闭梯子,以免影响结果!"
)
线程池_存活测试
=
ThreadPoolExecutor
(
max_workers
=
self
.
_线程数
)
线程池_存活测试
.
map
(
self
.
__信息输出
,
数据库操作
().
所有数据
())
print
(
'存活扫描数据包发生完成,发现{}个失效网站!'
.
format
(
len
(
self
.
问题网站记录
)))
if
保存_错误信息
:
with
open
(
"edu无法访问网站数据({}).txt"
.
format
(
当前日期
),
"a+"
)
as
写入
:
保存记录
=
tqdm
([
str
(
i
)
for
i
in
self
.
问题网站记录
])
for
i
in
保存记录
:
保存记录
.
set_description
(
'保存进度: '
+
i
)
写入
.
write
(
i
)
print
(
'生成文件中!!!'
)
return
True
def
多线程域名访问测试
(
地址
,
访问方式
=
'post'
,
数据
=
None
,
线程数
=
16
):
# 默认使用所有存活的edu.cn网站
线程池_域名访问
=
ThreadPoolExecutor
(
线程数
)
线程池_域名访问
.
map
(
爬虫常用配置
(
访问方式
,
数据
,
网页内容
=
True
,
数据保存
=
True
).
运行
,
数据库操作
().
存活网站地址
(
地址
))
if
__name__
==
'__main__'
:
# 多线程网站存活记录().运行(保存_错误信息=True)
多线程域名访问测试
(
"/JSON-RPC"
)
# 多线程域名访问测试()
pass