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的更多相关文章

  1. golang简易版聊天室

    功能需求: 创建一个聊天室,实现群聊和单聊的功能,直接输入为群聊,@某人后输入为单聊 效果图: 群聊:   单聊: 服务端: package main import ( "fmt" ...

  2. spring boot 对某个接口进行次数限制,防刷。简易版。demo。

    一般的项目 如果没有做防刷 容易被人爆接口 或者就是说没有做token防刷过滤. 容易被人用正常的token刷接口.有些token非一次性. 用户登录之后生成token会有一个过期时间,但一般没有做频 ...

  3. 简易漫画网站搭建-漫画喵Server版

    小喵的唠叨话:寒假的时候写了一个漫画爬虫,爬取了好几个漫画,不过一直没有找到合适的漫画阅读的工具.因此最近就试着自己写一个漫画的网站,放在公网上或者局域网里,这样就能随时随地用手机.Pad看漫画了. ...

  4. 前端学习 node 快速入门 系列 —— 简易版 Apache

    其他章节请看: 前端学习 node 快速入门 系列 简易版 Apache 我们用 node 来实现一个简易版的 Apache:提供静态资源访问的能力. 实现 直接上代码. - demo - stati ...

  5. Java 语言实现简易版扫码登录

    基本介绍 相信大家对二维码都不陌生,生活中到处充斥着扫码登录的场景,如登录网页版微信.支付宝等.最近学习了一下扫码登录的原理,感觉蛮有趣的,于是自己实现了一个简易版扫码登录的 Demo,以此记录一下学 ...

  6. Android学习之路——简易版微信为例(二)

    1 概述 从这篇博文开始,正式进入简易版微信的开发.深入学习前,想谈谈个人对Android程序开发一些理解,不一定正确,只是自己的一点想法.Android程序开发不像我们在大学时候写C控制台程序那样, ...

  7. 学生管理系统(SSM简易版)总结

    之前用 Servlet + JSP 实现了一个简易版的学生管理系统,在学习了 SSM 框架之后,我们来对之前写过的项目重构一下! 技术准备 为了完成这个项目,需要掌握如下技术: Java 基础知识 前 ...

  8. 手动实现一个简易版SpringMvc

    版权声明:本篇博客大部分代码引用于公众号:java团长,我只是在作者基础上稍微修改一些内容,内容仅供学习与参考 前言:目前mvc框架经过大浪淘沙,由最初的struts1到struts2,到目前的主流框 ...

  9. django框架简介及自定义简易版框架

    web应用与web框架本质 概念 什么是web应用程序呢? Web应用程序就一种可以通过互联网来访问资源的应用程序, 用户可以只需要用一个浏览器而不需要安装其他程序就可以访问自己需要的资源. 应用软件 ...

随机推荐

  1. 大白话Java多线程,小白都能看的懂的哦

    什么是线程 说到线程我们应该先了解下什么是进程,下面这个图片大家应该都比较熟悉吧. 我们看到的这些单独运行的程序就是一个独立的进程,进程之间是相互独立存在的.我们上面图中的360浏览器.百度云盘等等都 ...

  2. 有了它(powermock)再也不担心单元测试不达标了

    为什么要写单元测试 优点:单元测试可以减少bug率,提升代码的质量.还可以通过单元测试来熟悉业务. 公司硬性要求:有些公司可能还会强制要求,每次新增代码.或者变更代码单测覆盖率要达到多少比例才能申请代 ...

  3. Atlas 2.1.0 实践(2)—— 安装Atlas

    在完成Atlas编译以后,就可以进行Atlas的安装了.Atlas的安装主要是安装Atlas的Server端,也就Atlas的管理页面,并确保Atlas与Kafka Hbase Solr等组件的集成. ...

  4. salesforce零基础学习(九十九)Salesforce Data Skew(数据倾斜)

    本篇参考: https://developer.salesforce.com/blogs/engineering/2013/04/managing-lookup-skew-to-avoid-recor ...

  5. Service Mesh——微服务中的流量管理中间件

    Service Mesh--微服务中的流量管理中间件 摘自-https://zhuanlan.zhihu.com/p/28794062 Service mesh 与 Cloud Native Kube ...

  6. docker容器中布置静态网站

    docker容器中布置静态网站(基于云服务器ubuntu系统) 服务器准备(ubuntu) docker nginx 静态网页制作 浏览器测试 服务器布置 这里推荐使用云服务器(阿里云.华为云.腾讯云 ...

  7. Socket粘包问题的3种解决方案,最后一种最完美!

    在 Java 语言中,传统的 Socket 编程分为两种实现方式,这两种实现方式也对应着两种不同的传输层协议:TCP 协议和 UDP 协议,但作为互联网中最常用的传输层协议 TCP,在使用时却会导致粘 ...

  8. Nginx安装,开箱即用?

    一.官网 首页:http://nginx.org/ 下载地址:http://nginx.org/download 安装文档:http://nginx.org/en/docs/install.html ...

  9. CentOS7 普通用户绕过root登录

      正常环境中我们的服务器都会使用一个普通用户跳转到root进行操作,如果root用户的密码不记得只知道普通用户密码,设备又不方便进行开关机破密码时,我们就可以用到以下方法登陆设备. pkexec : ...

  10. 利用dotnet-dump分析docker容器内存泄露

    目录 一 运行官方示例 1,Clone代码并编译 2,创建Dockerfile构建镜像 3,启动容器 二 生成dump转储文件 1,制造问题 2,创建dump文件 三 分析dump文件 1,创建一个用 ...