<meta http-equiv="refresh" content="60">
<?php
// Ban rippers
// Martin Holk Rasmussen, mhr@tiscali.dk
//
// Requires PHP4 or higher. Tested with PHP4.3.2 and SHOUTcast Server Version 1.9.2/Linux
// Use and modify as you like
// Server configuration
$server = "boa.mediacast1.com";
$portnumber = "9660";
$username = "xxxxxxxxxxx";
$password = "xxxxxxxxx";
// Send e-mail when some one has been banned. Leave blank to disable.
$recipient = '';
// Array of user agents to look for.
// Check is case insensitive and partial, so don't put "winamp" as this will ban all listeners using Winamp
$knownrippers = array ("Streamripper", "FreeAmp", "UnknownPlayer", "Pathfinder", "sr-POSIX/1.32","andycadd1","AmiNetRadio","UPLAYER","HiDownload", "jake" ,"JetAudio" ,"TotalRecorder","RadioTracker2.0","sr-POSIX/1.60.13","sr-POSIX/1.61.17","RadioTracker 2.x");
?>
<html>
<head><title>Ban rippers</title></head>
<body>
<?php
// Get xml stats
$fp = @fsockopen ($server, $portnumber, $errno, $errstr, 30);
if (!$fp) {
print "Could not connect to $server port $portnumber: $errstr ($errno)<br>\n";
}
else {
fputs ($fp, "GET /admin.cgi?mode=viewxml HTTP/1.1\r\nHost: $server:$portnumber\r\nUser-Agent: Mozilla/4.0\r\nAuthorization: Basic ".base64_encode ("$username:$password")."\r\n\r\n");
while (!feof($fp)) {
$xml .= fgets ($fp,128);
}
fclose ($fp);
if (!preg_match ("/<LISTENERS>(.+)<\/LISTENERS>/", $xml, $regs)) {
print "Could not find information. Possible incorrect username or password.";
exit;
}
$blocks = split ("</LISTENER>", $regs[1]);
array_pop ($blocks);
// Loop through each listener
foreach ($blocks as $block) {
preg_match ("/<USERAGENT>(.+)<\/USERAGENT>/", $block, $regs);
$useragent = $regs[1];
preg_match ("/<POINTER>(.+)<\/POINTER>/", $block, $regs);
$pointer = $regs[1];
preg_match ("/<HOSTNAME>(.+)<\/HOSTNAME>/", $block, $regs);
$hostname = $regs[1];
print "Known ripper found: ";
$ripperfound = false;
foreach ($knownrippers as $lookfor) {
if (stristr ($useragent, $lookfor)) {
$ripperfound = $lookfor;
}
}
// Ripper found. Ban listener.
if ($ripperfound) {
print "$ripperfound for pointer $pointer. Banning ";
$fp = @fsockopen ($server, $portnumber, $errno, $errstr, 30);
if (!$fp) {
print "failed<br>\n";
}
else {
fputs ($fp, "GET /admin.cgi?mode=bandst&bandst=$pointer&banmsk=255 HTTP/1.1\r\nHost: $server:$portnumber\r\nUser-Agent: Mozilla/4.0\r\nAuthorization: Basic ".base64_encode ("$username:$password")."\r\n\r\n");
fclose ($fp);
print "successful!";
if ($recipient) {
mail($recipient, "Listener banned", "$hostname\n$useragent", "From: $recipient");
}
}
}
else {
print "No ($useragent)";
}
print "<br>\n";
}
}
?>
</body>
</html>