mysql社工_社工数据搜索引擎搭建
作者:le4f
如何设计搭建一个社工库
从初起设计一个社工库,到现在的Beta,前前后后零零整整花了不下一个月的时间,林林总总记录下来,留给需要之人
泄露数据库格式不一,长相奇葩,因需将用户名、密码、邮箱、哈希等信息按表分列入库,故整理数据是很耗时间的一步
整体架构
选择了Debian x64+Mysql+Mysqlcft+Sphinx+Nginx+PHP
轻量的sqlite数据库,但查询速度及空间消耗过大,对请求时sqlite处理效率较差
mangodb,但mangodb在分布计算中有更好的优势而在社工库搭建中优势并不明显
在mysql和postgresql中,选择历久弥新的mysql
为方便社工库移植,使用VM建一个虚拟机,所有数据库均在虚拟机中,LNMP环境对外只提供PHP查询接口
实际测试中,CentOS6.4虚拟机中因断电损失过多数据,并不如预想中稳定,且对CoreSeek版本较老的mmseg中文分词编译会出现各种各样的问题,难以解决。32位的操作系统在sphinx单个索引大小上会有限制,几次折腾后还是迁回了Debian7 X64
整理数据
一般使用bash脚本完成。DEMO:
普通格式:
#!/bin/bash
sed '/^[ \t]\{0,\}$/d' $1 | sed 's/[\t ]/\t/g' | sed 's/\r//g' |sed '/^\s*$/d' | awk -F"\t" '{print "NULL|||"$1"|||"$2"||||||"$1"|||xxxx|||" }' | iconv -c -f gb18030 -t UTF-8 | sort | uniq
he
UCmember格式:
#!/bin/bash
sed 's/[\r\n ]//g' $1 | tr -d '\n' | sed "s/INSERTINTO\`bbs\_uc\_members\`VALUES(//g" | sed "s/','/\t/g" | sed "s/,'/\t/g" | sed "s/',/\t/g" |sed "s/');/\n/g" | awk -F"\t" '{ print "NULL|||"$2"||||||"$3"|||"$9"|||"$4"|||"$7"|||xxxx+xxxx+evil++"}' | sed "/+evil++||||||||||||/d"
PW_MEMBER格式:
#!/bin/bash
sed 's/[\r\n ]//g' $1 | tr -d '\n' | sed "s/INSERTINTO\`pw_members\`VALUES('/\n/g" | sed "s/','/\t/g" | awk -F"\t" '{ print $1"|||"$2"||||||"$3"|||"$5"|||xxxx|||"}' | sed "/+evil++||||||||||||/d"
文件内格式不同的处理脚本eg:
#!/bin/bash
sed 's/\r//g' $1 | sed "s/'/[fenhao]/g" | sed 's/[ \t]\{1,\}/\t/g' | sed 's/----/\t/g' | awk -F "\t" '{ if ($2~/@163.com/)
{
if ($3~/^$/) {print "NULL|||"$1"|||"$2$3"||||||"}
else {print "NULL|||"$1"|||"$3"||||||"}
}
else
{print "NULL|||"$1"|||"$2"||||||"}
}' | iconv -c -f gb18030 -t UTF-8 | sort | uniq
批量按行导入:
#!/bin/bash
sed '/^[ \t]\{0,\}$/d' $1 | sed 's/\r//g' | sed '/^\s*$/d' | awk '{print "NULL|||"$0"|||xxxx|||" }'
对于数据库设计也尤为重要。测试后、按表存储、单表记录数不超过3000W,否则建全文索引时间过长。
库表设计
CREATE TABLE `evil_xxxx_1` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT,
`username` VARCHAR( 64 ) ,
`password` VARCHAR( 64 ) ,
`passhash` VARCHAR( 64 ) ,
`email` VARCHAR( 64 )
);
CREATE TABLE `evil_ucmember_1` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT,
`username` VARCHAR( 64 ) ,
`password` VARCHAR( 64 ) ,
`passhash` VARCHAR( 64 ) ,
`salt` VARCHAR( 16 ) ,
`email` VARCHAR( 64 ) ,
`ip` VARCHAR( 32 ) ,
`site` VARCHAR( 64 ) ,
PRIMARY KEY (id)
);
CREATE TABLE `evil_multinfo_1` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT,
`info` VARCHAR( 1024 ) ,
`site` VARCHAR( 64 ) ,
PRIMARY KEY (id)
);
分表的一个方案:
INSERT INTO evil_xx_1(evil_xx.id,evil_xx.username,evil_xx.password,evil_xx.passhash) SELECT (evil_xx.id,evil_xx.username,evil_xx.password,evil_xx.passhash)FROM evil_xx where user.id <= 30000000;
命令查询
show table status;//查看数据库状态
desc table; //查看表结构
set names 'utf8';//设置编码,数据表统一编码UTF-8
drop index index_name on table_name; //删除索引
alter table table_name add primary key(id);//添加主键
alter table table_name drop PRIMARY KEY;//去掉主键
truncate table table_name;//清空表中数据
alter table 表名 rename to 新表名;//重命名表
alter table table_name change Name Name varchar(16);//重命名列及格式
alter table table_name add column xxxx varchar(64) after aaaa;//添加列
alter table 表名 drop column 列名;//删除列
set @t=0;
update table_name set id=(@t:=@t+1);//重建ID
导入数据
load data infile '/tmp/xxxx.sql'
into table `evil_xxxx`
fields terminated by '|||'
lines terminated by '\n';
速度相对较快
关于索引
中文全文索引主要依赖mysqlctf和sphinx,测试发现,sphinx对于分词索引速度较快,但分词的原因导致诸如搜索humor却搜索不到humorous的情况,而mysqlctf索引速度相对较慢且无进度信息,但索引大小可控,一般全文索引1G数据库信息对应MYI大小为5-9G
关于Coreseek的编译使用,官方有较多文档
Sphinx配置文件(全文检索包括分词及最小分词5字母)
source evil_xxx
{
type = mysql
sql_host = localhost
sql_user = ooo
sql_pass = xxx
sql_db = db
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id,username,password,passhash,email FROM xxxx
sql_query_info = SELECT * FROM xxxx WHERE id=$id
}
index evil_xxx
{
source = evil_xxx
path = /usr/local/coreseek/var/data/evil_xxx
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
charset_dictpath = /usr/local/mmseg3/etc/
charset_type = zh_cn.utf-8
ngram_len = 0
min_infix_len = 5
enable_star = 1//允许模糊搜索
}
检索时调用官方API即可
关于MYSQLCFT建立索引的方法
首先是安装插件
wget http://mysqlcft.googlecode.com/files/mysqlcft-1.0.0-x86_64-bin.tar.gz
tar zxvf mysqlcft-1.0.0-x86_64-bin.tar.gz
mkdir -p /usr/local/mysqlcft/lib/mysql/plugin/
cp mysqlcft.so /usr/local/mysqlcft/lib/mysql/plugin/
登陆mysql后
INSTALL PLUGIN mysqlcft SONAME 'mysqlcft.so';
SHOW PLUGINS;
安装OK后建立索引
ALTER IGNORE TABLE 数据库名.表名 ADD FULLTEXT INDEX 全文联合索引名 (字段名1,字段名2) WITH PARSER mysqlcft;
如
ALTER IGNORE TABLE db.evil_xxxx ADD FULLTEXT INDEX fullindex(username,password,passhash,email) WITH PARSER mysqlcft;
在搜索时
SELECT * FROM evil_xxxx WHERE MATCH(username,password,passhash,email) AGAINST ('searchinfo' IN BOOLEAN MODE);
重建索引
REPAIR TABLE 数据库名.表名 QUICK;
几个Tips
增加来源数据库/网站字段,方便针对查询
同库分隔符格式不同,正则替换
数据库引擎选择myisam(而不是INNODB),可使用alter转换
入库分隔符为避免与密码字符重合,可使用类似==aaaa==等分隔符替换入库
数据库中有的邮箱在前密码在后,有的密码在前,邮箱在后,使用awk多写几行分支语句
配置my.cnf文件使得mysql数据处理效率最大化
mysql社工_社工数据搜索引擎搭建相关推荐
- java如何开发生产派工报工_派工工序报工
派工工序报工 应用场景及介绍:用户使用终端设备扫描工序任务快速定位进行报工: HMI操作 [HMI主控台]->[派工工序报工] 操作说明: 条码扫描:默认为空,按照扫描输入的条码,查找工序计划分 ...
- java社招_社招|蚂蚁金服-Java-社招
作者:一杯82年的Java 来源:牛客网 今年的面经,最后一份了,请大佬们参考.线程池 什么时候到达最大线程数 到达最大线程后继续提交的表现 用过哪些锁, synchronized Reentrant ...
- hive向mysql导数据_导入Hive数据导MySQL
导入Hive数据到MySQL 1. UDF 使用UDF比较方便,代码在http://svn.apache.org/repos/asf/hive/trunk/contrib/src/java/org/a ...
- mysql qps提升_上亿数据MYSQL的innodb优化 QPS轻松过5000
最近2周时间, 对于MYSQL 5.5.15-log Windows XP版本,进行了各种测试和优化.目前mysql的许多单表数据已经超过了1亿条记录,MYSQL在经过各种优化后,处理上亿条记录非常轻 ...
- 阿里java社招_社招|阿里巴巴Java工程师社招凉经
作者:爱我就亲亲我 来源:牛客网 一面: 1.先介绍一下自己吧 2.说一下自己的优缺点 3.具体讲一下之前做过的项目 4.你觉得项目里给里最大的挑战是什么? 5.Hashmap为什么不用平衡树? 6. ...
- excel导入mysql命令行_将Excel数据导入MySql
今天是全国数学建模比赛,同学选的一个题目需要对一个large的Excel表格进行统计,好哥们儿嘛--便帮助他完成了数据从Excel到MySql的转化.记下具体步骤分享给大家,也免得大家到网上到处乱找了 ...
- mysql 大文本_超大文本文件数据导入MYSQL
今天用到一个处理650万的数据导入数据库处理的问题,在网上找了半天,终于在在三灯的博客找到办法,特此转过来以备后用,哈哈! 我执行的命令语句是mysqlimport -uroot -p123456 - ...
- mysql 字段变更记录_如何记录数据表信息的变更
1 public partial classModifyRecordManager : BaseManager, IBaseManager2 {3 /// 4 ///构造函数5 /// 6 publi ...
- mysql 多进程 分批_多线程分批处理数据
需求: 给10万个用户每个用户发一条祝福短信. 为了提高数程序的效率,请使用多线程技术分批发送据. 每开一个线程,都会占用CPU资源 服务器(电脑)配置 CPU 核数 建立项目名称:rain_thre ...
最新文章
- 项目总结---- imageLoder 的2个Bug解决方法、1.9.4如何选择性删除disk缓存和其它一些错误。...
- 密码学+赛博朋克,关于密码朋克们的奇妙故事
- 第六章 6.1 6.2 无限脉冲响应滤波器
- CodeForces-589B(思维/排序)
- 邮件MIME格式分析
- kafka rebalance与数据重复消费问题
- python杀死了excel_Python杀死了Excel|自动更新表格,告别繁琐
- 持续集成与持续部署宝典Part 2:创建持续集成流水线
- 域控制器诊断工具 (dcdiag.exe)
- 智能合约最佳实践 之 Solidity 编码规范
- 各种集合key,value能否为null
- 拓端tecdat|使用R语言创建自定义桑基图Sankey图
- python读取mat文件报错【NotImplementedError: Please use HDF reader for matlab v7.3 files】
- PADS2007快捷键、无模命令大全
- 产品 · B端生意的定义和分类
- Pygame实战之外星人入侵NO.11——设置开始按钮
- flex布局避免父盒子被撑开,滚轮失效问题
- C语言int类型数值溢出会怎么样
- vs2019如何关闭自动更新
- moss部署学习入门及注意事项