博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打点统计——2(批量生成随机日志样本)
阅读量:5836 次
发布时间:2019-06-18

本文共 3740 字,大约阅读时间需要 12 分钟。

run.go:

package mainimport (    "./uas"    "flag"    "math/rand"    "net/url"    "os"    "strconv"    "strings"    "time")type resource struct {    url     string    target  string    start   int    end     int}func ruleResource() []resource{    var res []resource    //首页    r1 := resource{        url: "http://localhost/",        target: "",        start: 0,        end: 0,    }    //列表页    r2 := resource{        url: "http://localhost/list/{$id}.html",        target: "{$id}",        start: 1,        end: 21,    }    //详情页    r3 := resource{        url: "http://localhost/movie/{$id}.html",        target: "{$id}",        start: 1,        end: 12924,    }    res = append(res, r1, r2, r3)    return res}func buildUrl(res []resource) []string {    var list []string    for _, resItem := range res {        if len(resItem.target) == 0 {            list = append(list, resItem.url)        }else {            for i := resItem.start; i <= resItem.end; i++ {                urlStr := strings.Replace(resItem.url, resItem.target, strconv.Itoa(i), -1)                list = append(list, urlStr)            }        }    }    return list}func makeLog(current, refer, ua string) string {    u := url.Values{}    u.Set("time", "1")    u.Set("url", current)    u.Set("refer", refer)    u.Set("ua", ua)    paramsStr := u.Encode()    logTemplate := "127.0.0.1 - - [14/Apr/2019:20:07:42 +0800] \"OPTIONS /dig?{$paramsStr} HTTP/1.1\" 499 0 \"-\" \"{$ua}\" \"-\""    log := strings.Replace(logTemplate, "{$paramsStr}", paramsStr, -1)    log = strings.Replace(log, "{$ua}", ua, -1)    return log}//随机func randInt(min, max int) int {    r := rand.New(rand.NewSource(time.Now().UnixNano()))    if min > max {        return max    }    return r.Intn(max-min) + min}func main() {    total := flag.Int("total", 100, "创建多少行日志")    filePath := flag.String("filePath", "F:/phpStudy/PHPTutorial/nginx/logs/access.log", "日志文件路径")    //想生效还要调用解析方法    flag.Parse()    //fmt.Println(*total, *filePath)    //构造出真实的网站url集合    res := ruleResource()    list := buildUrl(res)    //按照要求,生成$total行日志内容    logStr := ""    for i := 1; i <= *total; i++ {        //随机选        currentUrl := list[randInt(0, len(list)-1)]        referUrl := list[randInt(0, len(list)-1)]        ua := uas.UaList[randInt(0, len(uas.UaList)-1)]        logStr = logStr + makeLog(currentUrl, referUrl, ua) + "\n"        //和随机种子一样的间隔,尽可能保证随机性        time.Sleep(time.Nanosecond)    }    //放到循环外一次写入    fd, _ := os.OpenFile(*filePath, os.O_RDWR|os.O_APPEND, 0644 )    fd.Write([]byte(logStr))    fd.Close()}

uas.go(各种浏览器信息):

package uasvar UaList = []string {    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;",    " Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1",    "Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36",    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",    "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",    " Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",}

运行程序(随机生成10000条日志):

go run run.go --total=10000 --filePath="F:/phpStudy/PHPTutorial/nginx/logs/access.log"

转载于:https://blog.51cto.com/5660061/2378540

你可能感兴趣的文章
实验二
查看>>
独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!
查看>>
MyBatis使用DEMO及cache的使用心得
查看>>
网站文章如何能自动判定是抄袭?一种算法和实践架构剖析
查看>>
【OpenCV学习】滚动条
查看>>
ofo用科技引领行业进入4.0时代 用户粘性连续8个月远甩摩拜
查看>>
兰州青年志愿者“中西合璧”玩快闪 温暖旅客回家路
查看>>
计划10年建10万廉价屋 新西兰政府:比想象中难
查看>>
甘肃发首版《3D打印职业教育教材》:校企合作育专才
查看>>
李娜入选国际网球名人堂 成亚洲第一人
查看>>
为找好心人抚养孩子 浙江一离婚父亲将幼童丢弃公园
查看>>
晚婚晚育 近20年巴西35岁以上孕妇增加65%
查看>>
读书:为了那个美妙的咔哒声
查看>>
jsp改造之sitemesh注意事项
查看>>
SpringBoot-Shiro使用
查看>>
iOS 9.0之后NSString encode方法替换
查看>>
解决 ThinkPHP5 无法接收 客户端 Post 传递的 Json 参数
查看>>
ASMFD (ASM Filter Driver) Support on OS Platforms (Certification Matrix). (文档 ID 2034681.1)
查看>>
CRM Transaction处理中的权限控制
查看>>
[转]linux创建链接文件的两种方法
查看>>