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我们自己也可以实现自己的抓包程序,在网络上实时抓包分析,或者利用处理的 ...
随机推荐
- connect函数详解
不得不说,客户端的connect函数和服务端的accept函数是一对好基友,如果客户端没有去connect, 那么服务端的accept会一直在那里傻傻地痴痴地等待,我们先来看看connect函数的原型 ...
- Visual C#编写3D游戏框架示例
你可能对实际地编写游戏代码期待已久了.由于DirectX SDK 2004年夏季更新包含了一个牢固的示例框架组件,并且它被设计成能在你自己的代码中直接使用,同时还为你处理了很多事务,所以你只要简单的使 ...
- 一个因为粗心的Bug
/** * 数据绑定,分页显示 */ private void updataMenu(final EditText search) { if(listwz==null) { return; } pag ...
- python socket编程详细介绍
Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...
- VS2010下配置使用OpenGL的glut库
我已在我机上测试成功,机装VS2010! 在win7(windows7 ultimate SP1)下成功安装VS2010(Visual Studio 2010 ultimate x86). 下载glu ...
- iOS 自定义控件开发(中)
<iOS 自定义控件开发(上)> <iOS 自定义控件开发(中)> 接上篇iOS自定义控件开发之后,我们尝试另外一种. 在Xcode的右边,会看到如下的图 其中,上面有一个:C ...
- AngularJs-指令和控制器交互
前言: 前段时间我们学习了angular的指令,他通过ECMA的方式创建元素,可以让我们共用这些元素,我们也知道可以通过 link的方法给这个指令添加一些动作事件,本节,我们将写入和让angular的 ...
- C#的默认访问修饰符
Classes and structs that are not nested within other classes or structs can be either public or inte ...
- 每天一个linux命令(8):cat 命令
cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...
- Codeforces Round #379 (Div. 2) D. Anton and Chess 模拟
题目链接: http://codeforces.com/contest/734/problem/D D. Anton and Chess time limit per test4 secondsmem ...