forked from poppyred/1.6.x
/
picporn.php
executable file
·183 lines (149 loc) · 6.11 KB
/
picporn.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/usr/bin/php -q
<?php
require_once(dirname(__FILE__).'/ressources/class.image.nudity.inc');
require_once(dirname(__FILE__).'/ressources/class.squid.external.acl.helper.inc');
$GLOBALS["DEBUG_LEVEL"]=0;
$GLOBALS["CACHE_URLS_COUNT"]=0;
$GLOBALS["PID"]=getmypid();
$GLOBALS["CACHE_FILE"]="/etc/squid3/SquidNudityScanCache.{$GLOBALS["PID"]}";
$SquidNuditScanParams=unserialize(base64_decode(@file_get_contents("/etc/squid3/SquidNudityScanParams")));
ReadCache();
@mkdir("/var/log/squid/nudity",0755,true);
$iPicScanVal = $SquidNuditScanParams['picscanval'];
$curlTimeOut=$SquidNuditScanParams["curlTimeOut"];
$MemoryDir=$SquidNuditScanParams["MemoryDir"];
$GLOBALS["CacheSizeItems"]=$SquidNuditScanParams["CacheSizeItems"];
if(!is_numeric($iPicScanRes)){$iPicScanRes=480000;}
if(!is_numeric($iPicScanVal)){$iPicScanVal=70;}
if(!is_numeric($curlTimeOut)){$curlTimeOut=10;}
if(!is_numeric($MemoryDir)){$MemoryDir=0;}
if(!is_numeric($GLOBALS["CacheSizeItems"])){$GLOBALS["CacheSizeItems"]=50000;}
$GLOBALS["CURL_TIMEOUT"]=$curlTimeOut;
$GLOBALS["MEM_DIR"]=$MemoryDir;
$iPicScanVal=intval($iPicScanVal);
if($iPicScanVal>99){$iPicScanVal=99;}
unset($SquidNuditScanParams);
$filter = new ImageFilter;
$GLOBALS["HELPER"]=new externhelper();
while (!feof(STDIN)) {
$url = trim(fgets(STDIN));
if($url==null){continue;}
$array=$GLOBALS["HELPER"]->parseURL($url);
if($GLOBALS["DEBUG_LEVEL"]>1){$GLOBALS["HELPER"]->WLOG($url." str:".strlen($url)." LOGIN:{$array["LOGIN"]},IPADDR:{$array["IPADDR"]} MAC:{$array["MAC"]} HOST:{$array["HOST"]} URI:{$array["URI"]}");}
$szMac = $array["MAC"];
$szUrl = $array["URI"];
$iScore=GetCache($szUrl);
if($iScore>0){
if($GLOBALS["DEBUG_LEVEL"]>0){$GLOBALS["HELPER"]->WLOG("Cached: {$iScore}% ".basename($szUrl));}
if ($iScore > $iPicScanVal) {print("OK\n");continue;}else{print("ERR\n");continue;}
}
if(strlen($szUrl)<3){if($GLOBALS["DEBUG_LEVEL"]>1){$GLOBALS["HELPER"]->WLOG("-> STOP no uri...");}print("ERR\n");continue; }
$szFilename=GetImageFile($szUrl,$GLOBALS["HELPER"]);
if($szFilename==null){
if($GLOBALS["DEBUG_LEVEL"]>0){$GLOBALS["HELPER"]->WLOG(basename($szUrl)." SKIP (no image)");}
print("ERR\n");
continue;
}
$t=time();
if($GLOBALS["DEBUG_LEVEL"]>0){$GLOBALS["HELPER"]->WLOG("GetScore of $szFilename");}
$iScore =intval($filter->GetScore($szFilename));
@unlink($szFilename);
$t2=time();
$seconds=$t2-$t;
if($GLOBALS["DEBUG_LEVEL"]>0){$GLOBALS["HELPER"]->WLOG(basename($szUrl).": $iScore% in ({$seconds}s)");}
SetCache($szUrl,$iScore);
if ($iScore >= $iPicScanVal) {
$array["POURC"]=$iScore;
$tfile="/var/log/squid/nudity/".md5(serialize($array));
if(!is_file($tfile)){@file_put_contents($tfile, serialize($array));}
if($GLOBALS["DEBUG_LEVEL"]>1){$GLOBALS["HELPER"]->WLOG("BLOCK->".$szMac." ".$szUrl." score:".$iScore." ".$iPicScanVal." ".$iRes);}
print("OK\n");
continue;
}
print("ERR\n");
}
SaveCache();
@unlink($GLOBALS["CACHE_FILE"]);
$GLOBALS["HELPER"]->shutdown();
unset($filter );
function GetCache($szUrl){
$md5=md5($szUrl);
if(!isset($GLOBALS["CACHE_URLS"][$md5])){return 0;}
return $GLOBALS["CACHE_URLS"][$md5];
}
function ReadCache(){
foreach (glob("/etc/squid3/SquidNudityScanCache.*") as $filename) {
$array=unserialize(@file_get_contents($filename));
while (list ($a, $b) = each ($array) ){$GLOBALS["CACHE_URLS"][$a]=$b;}
}
if(!isset($GLOBALS["HELPER"])){$GLOBALS["HELPER"]=new externhelper();}
$GLOBALS["HELPER"]->WLOG("SaveCache()::". count($GLOBALS["CACHE_URLS"])." cached elements");
}
function SetCache($szUrl,$results){
if(!is_numeric($results)){$results=1;}
if($results==0){$results=1;}
$md5=md5($szUrl);
$GLOBALS["CACHE_URLS"][$md5]=intval($results);
if(count($GLOBALS["CACHE_URLS"])>$GLOBALS["CacheSizeItems"]){
unset($GLOBALS["CACHE_URLS"]);
@file_put_contents($GLOBALS["CACHE_FILE"], serialize($GLOBALS["CACHE_URLS"]));
}
$GLOBALS["CACHE_URLS_COUNT"]++;
if($GLOBALS["CACHE_URLS_COUNT"]>500){
SaveCache();
ReadCache();
$GLOBALS["CACHE_URLS_COUNT"]=0;
}
}
function SaveCache(){
ReadCache();
$GLOBALS["HELPER"]->WLOG("SaveCache():: ".count($GLOBALS["CACHE_URLS"])." element(s)");
@file_put_contents("/etc/squid3/SquidNudityScanCache.000", serialize($GLOBALS["CACHE_URLS"]));
}
function GetImageFile($szUrl){
$allowedEXTS["gif"]=true;
$allowedEXTS["png"]=true;
$allowedEXTS["jpeg"]=true;
$allowedEXTS["jpg"]=true;
$allowedEXTS["bmp"]=true;
$PicScannerPrefix=time();
$szUrlTemp=$szUrl;
$szUrlExp=explode("?", $szUrlTemp);
if(count($szUrlExp)>0){
$szUrlTemp=$szUrlExp[0];
}
$file_extension=@pathinfo($szUrlTemp, PATHINFO_EXTENSION);
$GLOBALS["HELPER"]->WLOG("OK GetImageFile():: EXT::`$file_extension` $szUrlTemp");
if(!isset($allowedEXTS["$file_extension"])){return null;}
$workdir="/tmp";
if($GLOBALS["MEM_DIR"]>0){$workdir="/var/lib/nudityScan";}
$BaseName=basename($szUrl);
$tmpfname = tempnam($workdir, $PicScannerPrefix.".{$GLOBALS["PID"]}.");
$fw = fopen($tmpfname, "w");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $szUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_FILE, $fw);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($GLOBALS["DEBUG_LEVEL"]>1){$GLOBALS["HELPER"]->WLOG("GetImageFile()::$BaseName: Downloading...");}
$t1=time();
$data = curl_exec($ch);
$errorNumber=curl_errno($ch);
$errorText=curl_error($ch);
$t2=time();
$timeD=$t2-$t1;
if($GLOBALS["DEBUG_LEVEL"]>1){$GLOBALS["HELPER"]->WLOG("GetImageFile():: Done ( $timeD seconds) Er.$errorNumber $errorText...");}
if($errorNumber>0){
$GLOBALS["HELPER"]->WLOG("GetImageFile():: ". basename($szUrl). " error:$error");
@unlink($tmpfname);
}
curl_close($ch);
fclose($fw);
if($GLOBALS["DEBUG_LEVEL"]>1){$GLOBALS["HELPER"]->WLOG("OK GetImageFile():: $szUrl -> $tmpfname");}
return $tmpfname;
}
?>