Golang简易版 网站路径扫描demo
package main import (
"bufio"
"fmt"
"net/http"
"os"
"regexp"
"runtime"
"strconv"
"sync"
"time"
) var wg sync.WaitGroup
var cpunum = runtime.NumCPU() func main() {
starttime := time.Now()
defer testtime(starttime)
baseurl := "http://xxxx.com/"
urls := make(chan string)
file,err := os.Open("PHP.txt")
if err != nil {
fmt.Println("字典打开失败: ",err)
return
}
defer file.Close()
//开启一个携程,用来向urls通道中写入完整的url
go func() {
scaner := bufio.NewScanner(file)
for scaner.Scan() {
urls<- fmt.Sprintf("%s/%s",baseurl,scaner.Text())
}
if err := scaner.Err();err != nil {
fmt.Println("读取字典错误: ",err)
}
close(urls)
fmt.Println("字典读取完毕。")
}() //开启多个携程,通过http的head请求方式,进行验证
worknum := (cpunum-1)*20
for i:=0; i<worknum; i++ {
wg.Add(1)
go Sendurl(urls)
}
wg.Wait() } //发送http请求,并检查返回状态,输出2xx,3xx状态码url
func Sendurl(urls chan string) {
for {
select {
case url,ok := <-urls:
if !ok {
wg.Done()
return
}
client := &http.Client{
Timeout: time.Second*10,
}
req,err := http.NewRequest("HEAD",url,nil)
if err != nil {
//fmt.Println(err)
continue
}
req.Header.Set("user-agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36")
resp,err := client.Do(req)
if err != nil {
fmt.Println(err)
continue
}
match,err := regexp.MatchString(`^(2|3)`, strconv.Itoa(resp.StatusCode))
if err != nil {
fmt.Println(err)
continue
}
if match {
fmt.Printf("%s 状态码: %v\n",url, resp.StatusCode)
}
resp.Body.Close()
case <-time.After(time.Second*60):
wg.Done()
return
}
}
}
func testtime(start time.Time) {
fmt.Println("运行时间:",time.Since(start))
}
通过bufio.NewScanner( 方式获取到文件中的数据,不会加上最后的标识符 \n
通过resp.Body.Close() 关闭Body体,在for循环中不能使用defer resp.Body.Close()的形式。
用Golang写的一个简易版网站路径扫描,高并发,访问超时时间为10s。练手造轮子,就自己用用还行。*~*
Golang简易版 网站路径扫描demo的更多相关文章
- golang简易版聊天室
功能需求: 创建一个聊天室,实现群聊和单聊的功能,直接输入为群聊,@某人后输入为单聊 效果图: 群聊: 单聊: 服务端: package main import ( "fmt" ...
- spring boot 对某个接口进行次数限制,防刷。简易版。demo。
一般的项目 如果没有做防刷 容易被人爆接口 或者就是说没有做token防刷过滤. 容易被人用正常的token刷接口.有些token非一次性. 用户登录之后生成token会有一个过期时间,但一般没有做频 ...
- 简易漫画网站搭建-漫画喵Server版
小喵的唠叨话:寒假的时候写了一个漫画爬虫,爬取了好几个漫画,不过一直没有找到合适的漫画阅读的工具.因此最近就试着自己写一个漫画的网站,放在公网上或者局域网里,这样就能随时随地用手机.Pad看漫画了. ...
- 前端学习 node 快速入门 系列 —— 简易版 Apache
其他章节请看: 前端学习 node 快速入门 系列 简易版 Apache 我们用 node 来实现一个简易版的 Apache:提供静态资源访问的能力. 实现 直接上代码. - demo - stati ...
- Java 语言实现简易版扫码登录
基本介绍 相信大家对二维码都不陌生,生活中到处充斥着扫码登录的场景,如登录网页版微信.支付宝等.最近学习了一下扫码登录的原理,感觉蛮有趣的,于是自己实现了一个简易版扫码登录的 Demo,以此记录一下学 ...
- Android学习之路——简易版微信为例(二)
1 概述 从这篇博文开始,正式进入简易版微信的开发.深入学习前,想谈谈个人对Android程序开发一些理解,不一定正确,只是自己的一点想法.Android程序开发不像我们在大学时候写C控制台程序那样, ...
- 学生管理系统(SSM简易版)总结
之前用 Servlet + JSP 实现了一个简易版的学生管理系统,在学习了 SSM 框架之后,我们来对之前写过的项目重构一下! 技术准备 为了完成这个项目,需要掌握如下技术: Java 基础知识 前 ...
- 手动实现一个简易版SpringMvc
版权声明:本篇博客大部分代码引用于公众号:java团长,我只是在作者基础上稍微修改一些内容,内容仅供学习与参考 前言:目前mvc框架经过大浪淘沙,由最初的struts1到struts2,到目前的主流框 ...
- django框架简介及自定义简易版框架
web应用与web框架本质 概念 什么是web应用程序呢? Web应用程序就一种可以通过互联网来访问资源的应用程序, 用户可以只需要用一个浏览器而不需要安装其他程序就可以访问自己需要的资源. 应用软件 ...
随机推荐
- 使用JWT+RSA完成SSO单点登录
无状态登录原理 1.1.什么是有状态? 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session. 例如登录:用户登 ...
- Eclipse导入外部jar包的步骤
(1)首先在项目的跟目录下先建一个名字为lib的文件夹,通常外部导入的jar包都放在这个文件夹下面. (2)将需要用到的jar包复制到lib文件夹下面. (3)在项目中导入jar包 右键项目,选择Bu ...
- web元素定位和appium-app元素定位
一.web页面元素定位工具介绍 1.打开google浏览器,按F12进入开发者模式,如下图: 2.用鼠标点击下图红色框中的箭头--然后鼠标移动到web页面的元素上(此处为百度框),会自动定位到对应的h ...
- 简单TCP服务器和TCP客户端源码(Golang)
以下代码为服务端,非最终版代码,服务端可以接受多个客户端的请求,且所有消息会显示在服务端上,服务端无法发送消息: package main import ( "fmt" " ...
- xtrabackup迁移mysql5.7.32
问题描述:利用外部xtrabackup工具来做迁移mysql数据库,或者恢复数据库 xtrabackup迁移mysql 1.环境 mysql源库 mysql目标迁移库 IP 192.168.163.3 ...
- 【Oracle】迁移表到其他的表空间
有些时候需要将表迁移到其他的表空间,在将表空间做相关的操作 下面是命令如何迁移表空间 SQL> alter table 表名 move tablespace 表空间名; 如果有很多的表想要迁移的 ...
- 【ASM】asm中添加 diskgroup
环境:rhel5 Oracle10g rac 背景:在esxi中添加了一个20g的共享磁盘准备存放归档日志用 一.准备环境 1.添加共享磁盘并且格式化 #fdisk -l查看磁盘已经添加完成 #fdi ...
- 三种梯度下降算法的区别(BGD, SGD, MBGD)
前言 我们在训练网络的时候经常会设置 batch_size,这个 batch_size 究竟是做什么用的,一万张图的数据集,应该设置为多大呢,设置为 1.10.100 或者是 10000 究竟有什么区 ...
- 特征预处理之归一化&标准化
写在前面 这篇博客的主要内容 应用MinMaxScaler实现对特征数据进行归一化 应用StandardScaler实现对特征数据进行标准化 特征预处理 定义 通过一些转换函数将特征数据转换成更加 ...
- 深度学习DeepLearning技术实战研修班
深度学习DeepLearning(Python)实战培训班 时间地点: 2020 年 12 月 18 日-2020 年 12 月 21日 (第一天报到 授课三天:提前环境部署 电脑测试) 一.培训方式 ...