cMD |
Advanced user |
|
|
Joined: Sep 23, 2008 |
Posts: 67 |
|
|
|
|
|
|
|
Code: | <?
error_reporting(0);
set_time_limit(0);
$filename = 'xxx.sql'; # sql дамп
$separator = ":"; # Разделитель
$mode = 1; # 2 режима, 0 - Нормальный (без чека мыла) 1 - чек мыла.
$columns = 'email,pswd'; # Выводить определенные колинки. Если не указывать, то парсится весь дамп.
$fd = fopen($filename, 'r');
while(!feof($fd)) {
$line = fgets($fd);
if(preg_match("/VALUES/i", $line))
preg_match_all("/INSERT\s+INTO\s+`.*`(\s+|)\(`(.*?)`\)/i", $line, $fields);
if($fields[1][0] != NULL)
$into = $fields[1][0];
else $into = $fields[2][0];
$parsed = explode('`, `', $into);
$column = regex($parsed, $line);
if($column[0][0] == true) {
if($columns == false)
$done = full_parse_dump($column);
else
$done = selectively($column);
if(modes($done) == true) {
qwrite($filename.'_out.txt', $done."\r\n");
//echo $done."\r\n";
}
}
}
function full_parse_dump($column) {
global $separator;
for($i = 1; $i < count($column); $i++) {
if($i == 1) $result = $column[$i][0];
else $result .= $separator.$column[$i][0];
} return $result;
}
function modes($in) {
global $mode;
if($mode == 0) {
return $in;
}
elseif ($mode == 1) {
preg_match("/([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})/is", $in, $email);
if(validEmail($email[0]) == false)
return;
else
return $in;
}
return $cname;
}
function selectively($column) {
global $columns,$separator;
$first = true;
foreach(search_fields($columns) as $i) {
if($first == true) {
$parsed = $column[$i][0];
$first = false;
} else
$parsed .= $separator.$column[$i][0];
}
return $parsed;
}
function search_fields($fields) {
global $parsed;
$colname = explode(',', $fields);
foreach($parsed as $index => $name) {
foreach($colname as $cname) {
if($name == $cname)
$i_name[$name] = $index + 1;
}
}
if($i_name == null)
die("Fields -> ".$fields." <- Not Found!\n");
return sorting($i_name);
}
function sorting($cname) {
global $columns;
$coname = explode(',', $columns);
foreach($coname as $colname) {
foreach($cname as $index => $field) {
if($index == $colname)
$sort[] = $field;
}
}
return $sort;
}
function regex($fields, $line) {
for($i = 0; $i < count($fields); $i++) {
if($i == 0) $col = "'(.*?)'";
else $col .= ",\s+'(.*?)'";
}
preg_match_all("/VALUES\s+\(".$col."/i",$line, $column);
return $column;
}
function validEmail($email) {
$isValid = true;
if(!$atIndex = strrpos($email, "@"))
return false;
if (is_bool($atIndex) && !$atIndex) {
$isValid = false;
}
else {
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
if ($localLen < 1 || $localLen > 64) {
$isValid = false;
}
else if ($domainLen < 1 || $domainLen > 255) {
$isValid = false;
}
else if ($local[0] == '.' || $local[$localLen-1] == '.') {
$isValid = false;
}
else if (preg_match('/\\.\\./', $local)) {
$isValid = false;
}
else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) {
$isValid = false;
}
else if (preg_match('/\\.\\./', $domain)) {
$isValid = false;
}
else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
str_replace("\\\\","",$local))) {
if (!preg_match('/^"(\\\\"|[^"])+"$/',
str_replace("\\\\","",$local))) {
$isValid = false;
}
}
if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))) {
$isValid = false;
}
}
return $email;
}
function qwrite($name, $content) {
if(!$file = @fopen($name, "a+")) exit;
fwrite($file, $content);
fclose($file);
}
?> |
|
|