golang社工库数据扫描程序
https://github.com/xiaojiong/scanfile
演示站点: http://www.weigongkai.com/ 7G数据 2s完成扫描
package scanfile
/*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int IndexStr(char *haystack, char *needle,unsigned int begin) {
char *p = strstr(haystack+begin, needle);
if (p)
return p - haystack;
return -1;
}
int IndexChar(char *haystack, char c,unsigned int begin) {
char *p = haystack = haystack + begin;
while(*p != '') {
if(*p == c) {
return p - haystack;
}
++p;
}
return -1;
}
int LastIndexChar(char *haystack, char c,unsigned int begin) {
int len = strlen(haystack);
if(begin > 0) {
if (begin > len) {
return -1;
}
} else {
begin = len - 1;
}
haystack +=begin;
while(1) {
if(*haystack == c) {
return begin;
}
if(begin == 0) {
return -1;
}
--haystack;
--begin;
}
return -1;
}
*/
import"C"
import"unsafe"
func strScan(str *string, key *string, counter *Counter) []string {
begin := 0
CStr := C.CString(*str)
Ckey := C.CString(*key)
defer func() {
C.free(unsafe.Pointer(CStr))
C.free(unsafe.Pointer(Ckey))
}()
var res []string
for {
var index int = 0
if index = int(C.IndexStr(CStr, Ckey, C.uint(begin))); index == -1 {
break
}
var startIndex int = 0
if index > 0 {
if pos := int(C.LastIndexChar(CStr, 'n', C.uint(index))); pos != -1 {
startIndex = pos + 1
}
}
var endIndex int = len(*str)
if pos := int(C.IndexChar(CStr, 'n', C.uint(index))); pos != -1 {
endIndex = pos + index
}
begin = endIndex
if counter.IsMax() {
break
}
res = append(res, (*str)[startIndex:endIndex])
counter.Add()
if begin == len(*str) {
break
}
}
return res
}
package scanfile
import (
"io"
"os"
"sync"
)
var LineFeed = byte('n') //文本换行符标识
var BufSize = 1024 * 1024 // buf大小
func Scan(files []string, searchStr *string) string {
var result ScanResult
//计数器
counter := InitCounter(10)
//扫描结果输出通道
out := make(chan *FileRes, 10)
fileCount := len(files)
for i := 0; i < fileCount; i++ {
go ScanFile(files[i], searchStr, counter, out)
}
for i := 0; i < fileCount; i++ {
result.AddFileRes(<-out)
}
result.AddCounter(counter)
return result.ToJson()
}
func ScanFile(fileName string, searchStr *string, counter *Counter, out chan *FileRes) {
//文件 IO
fileContentChan := fileRead(fileName, counter)
fileRes := InitFileRes(fileName)
//使用多路复用 wg防止线程泄漏
wg := sync.WaitGroup{}
for i := 0; i < 3; i++ {
wg.Add(1)
go func() {
for {
if text, ok := <-fileContentChan; ok {
if counter.IsMax() {
//清空未读取channel
clearFileContentChan(fileContentChan)
break
} else {
if counter.IsMax() {
break
}
rs := strScan(text, searchStr, counter)
for i := 0; i < len(rs); i++ {
fileRes.Add(rs[i])
}
}
} else {
break
}
}
wg.Done()
}()
}
wg.Wait()
out <- fileRes
}
func clearFileContentChan(c chan *string) {
for {
if _, ok := <-c; ok == false {
break
}
}
}
func fileRead(fileName string, counter *Counter) chan *string {
fileContentChan := make(chan *string, 5)
go func() {
fh, err := os.Open(fileName)
if err != nil {
panic(err)
}
//异常处理
defer fh.Close()
buf := make([]byte, BufSize)
var start int64
fh.Seek(start, 0)
for {
//超过计数器最大返回值 跳出程序
if counter.IsMax() {
break
}
n, err := fh.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if n == 0 {
break
}
l := lastByteIndex(buf, LineFeed)
content := string(buf[0 : l+1])
start += int64(l + 1)
fh.Seek(start, 0)
fileContentChan <- &content
}
close(fileContentChan)
}()
return fileContentChan
}
func lastByteIndex(s []byte, sep byte) int {
for i := len(s) - 1; i >= 0; i-- {
if s[i] == sep {
return i
}
}
return -1
}
golang社工库数据扫描程序的更多相关文章
- python 模拟ajax查询社工库...
在windows中使用,输入有关信息查询社工库,本来是网页版的,我把ajax请求提取出来.粗略的封装下,挺好玩. #coding:utf8 import urllib2,urllib from Bea ...
- 应用安全 - 社工 - 大数据 - Fofa - 汇总
搜索语法 title=”abc” header=”abc” body=”abc” domain=”xx.com” host=”.xx.cn” port=”443” ip=”1.1. ...
- 社工数据搜索引擎搭建 - Build Social Engineer Evildata Search Engine
如何设计搭建一个社工库 从初起设计一个社工库,到现在的Beta,前前后后零零整整花了不下一个月的时间,林林总总记录下来,留给需要之人 泄露数据库格式不一,长相奇葩,因需将用户名.密码.邮箱.哈希等信息 ...
- Bugku-CTF社工篇之简单的个人信息收集
- bugku社工writeup
最近bugku的web和杂项刷了多半,突然心血来潮想试试社工题,bugku的社工题比较基础,而且题量不多,和大家分享一下writeup. 1.密码 根据提示,多猜几次密码就对了,然后得到flag. 2 ...
- 12种开源Web安全扫描程序
转自:https://blog.csdn.net/wh211212/article/details/78620963 赛门铁克的一个有趣的报告显示,76%的被扫描网站有恶意软件 如果您使用的是Word ...
- 我是如何社工TDbank获取朋友隐私的
原创 ziwen@beebeeto 转载请保留本行 个人感觉 国外的安全方面对社工的了解和防范并不是很好 即使他们使用社工的时间比我们要长很多 比如 他们的visa在pos机上使用是不需要密码的 而且 ...
- 基本完成了一个SEGY扫描程序
利用Seismic.NET编写了一个SEG-Y文件的扫描程序,可以自动判断道头字中主测线号.横测线号.X坐标和Y坐标的位置,自动快速扫描地震数据体中的拐点坐标.10GB多的数据体几十秒全部扫描完成! ...
- 基于 libpcap库的sniffer程序
基于 libpcap库的sniffer程序 Libpcap库是WireSharek和Tcpdump抓包程序的基础,利用libcap我们自己也可以实现自己的抓包程序,在网络上实时抓包分析,或者利用处理的 ...
随机推荐
- Winform调用百度地图接口
using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using ...
- An Introduction to Interactive Programming in Python (Part 1) -- Week 2_2 练习
#Practice Exercises for Logic and Conditionals # Solve each of the practice exercises below. # 1.Wri ...
- Python-str函数
elp on class str in module __builtin__: 关于__builtin__模块中str类的帮助信息: class str(basestring) | str(obje ...
- 20145215《Java程序设计》第1周学习总结
20145215<Java程序设计>第一周学习总结 教材学习内容总结 本周先学习了最基本的java环境的搭建. 首先从官网上下载了jdk(jdk与jre的区别在于如果只需要运行一个开发好的 ...
- 1.SQLAlchemy文档-简介(中文版)
Python的SQL工具包和对象关系映射器 SQLAlchemy的是Python的SQL工具包和对象关系映射器,让应用程序开发人员可以使用上SQL的强大功能和灵活性. 它提供了一套完整 ...
- mac点滴
1.8个常用的功能. 转载:http://www.tuicool.com/articles/BfEjQzr 2.把pwd复制到剪切板? pwd | pbcopy 有时间看看这个 http://j ...
- 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 21.C#序列过虑、排序、let子句和连接(十一章11.3-11.5)
哈哈,隔了一个星期,再怎么样都要发一篇,要多看书啊,书不能停~~~ 使用where子句进行过虑 where子句的语法格式如下:where 过虑表达式 例子:新建一个珠宝类,如下: class Jewe ...
- 编写高质量代码改善C#程序的157个建议[泛型集合、选择集合、集合的安全]
前言 软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开 ...
- 2016 版 Laravel 系列入门教程(一)【最适合中国人的 Laravel 教程】
本教程示例代码见: https://github.com/johnlui/Learn-Laravel-5 在任何地方卡住,最快的办法就是去看示例代码. 本文基于 Laravel 5.2 版本,无奈 5 ...