13 Август, 2012

Cisco X.28 PAD Scanner NUA v1.1

hc.jpg Выкладываю вторую версию моего сканера адресов отличающуюся от первой только работой через Socks5 прокси повышая анонимность при скане. Написан мною в том же далеком 2009 году. Скорость работы зависит от скорости работы самого пада.

Вот и сам код:

#!php.exe -q
<?php
//------------------------------------------------------------
//  Cisco X.28 PAD Scanner NUA *Socks5 Edition*
//                  by Soldier
//            http://x25networks.ru/
//------------------------------------------------------------
// TODO:
// - сделать анализ ответа циски(обработка рабочих адресов)
// 2009
//Настройки
$address = 'x.x.x.x'; // адрес к которому подключаемся через сокс
$port = 3001; // порт 
$login = "ciscorn"; // имя пользователя на циске(если нужно)
$pass =  "ciscorn"; // пароль пользователя
$type = 1;  // тип аутентификации:
	   // 1 - username|pass
	   // 2 - pass
	   // 3 - none
//Настройка прокси
$proxyaddress = 'x.x.x.x'; // адрес socks5 прокси
$proxyport = 1080; // порт
$area = "250177"; // пишем DNIC + часть area code (без последней цифры)
$start = 200001; // пишем последнюю цифру area code и начальный адрес
$end = 200005;  // пишем последнюю цифру area code и последний адрес

// ########################/Дальше ничего менять не нужно/##########################
    error_reporting(E_ALL ^ E_WARNING); // выводить все ошибки
    set_time_limit(0); // убираем ограничение по времени выполнения
    ob_implicit_flush(); //вкл. неявную очистку, отключает буферизацию вывода
   
    echo "-= Cisco X.28 PAD Scanner =-n";
    echo "by Soldier [http://x25networks.ru]n";
try {
//------------------------------/Создаем сокет/-------------------------------------
        echo 'Create socket ... ';
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if ($socket < 0) {
            throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."n");
        } else {
            echo "OKn";
        }
//--------------------/Подключаемся к прокси/-------------------------------------
		echo 'Connect proxy ... ';
        	$result = socket_connect($socket, $proxyaddress, $proxyport);
        	if ($result === false) {
           		throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."n");
        	} else {
        		echo "OKn";
       		}
//--------------------/Подключаемся к хосту/--------------------------------------

		echo 'Connect host ... ';
		$proxyconnect = pack('C3', 0x05,0x01,0x00); // передаем версию сокса , кол-во методов аутентификации и методы аутентификации
		socket_write($socket, $proxyconnect, strlen($proxyconnect)); // отправляем прокси команду подключения к хосту
		$responce=unpack('Cversion/Cmethod',socket_read($socket,2));// переводим ответ сокса в нормальный hex'овый вид

	// проверяем метод аутентификации и если она отсутствует подключаемся к хосту
	if ($responce['version'] == '0x05') // тут 05 это версия сокса
	 {
	if ($responce['method'] == '0x00') // тут 00 это отсутствие аутентификации
	 {
	  	$ip2long = ip2long($address); // адрес переводится в подходящий вид
 	 	$h=pack('C4Nn', 0x05, 0x01, 0x00, 0x01, $ip2long, $port); // создаем запрос на подключение

  		socket_write($socket, $h, strlen($h));

  		$l=bin2hex(socket_read($socket,1024)); // получаем ответ от сокса
// ----------------------------------------------------------------------------------

  if ($l[3] == '0') // если ошибок нет, то выполняем команды
  {
   // отправляем команды через сокс хосту
      	    $log = fopen($area."_log.txt", "w");  // открываем файл для лога
//------------------------------------/Аутентификация/------------------------------
	switch ($type) {
	case 1:
	    $out = socket_read($socket, 1024);  // выводим приглашение для ввода логина
	    echo $out."n";
       
	    echo "Send login&password...";
	    socket_write($socket, $login, strlen($login)); // отправляем логин
	    socket_write($socket, $pass, strlen($pass)); // отправляем пароль
	    echo "OKn";
	    sleep(4); // ждем вывода приглашения "*"
	    break;
	case 2:
	    $out = socket_read($socket, 1024);  // выводим приглашение для ввода логина
	    echo $out."n";
    
	    echo "Send password...";
	    socket_write($socket, $pass, strlen($pass)); // отправляем пароль
	    echo "OKn";
	    echo 'Wait prompt: ';
	    $out = socket_read($socket, 1024); // ждём "*"
	    echo $out."n";
	    break;
	case 3:
	    echo 'Wait prompt: ';
	    sleep(2);
	    $out = socket_read($socket, 1024); // ждём "*"
	    echo $out."n";
	    break;
	}
// ----------------------------------------------------------------------------------
    for ($i=$start; $i<=$end; $i++) {
        $nua = $area.$i."rn";
        socket_write($socket, $nua, strlen($nua));
        sleep(2);  // дожидаемся ответа циски       
        echo ' ';
        $out = socket_read($socket, 1024);
        echo $out."n";           // выводим ответ на экран
        fwrite($log,"$outn"); // и пишем в файл
    }
//------------------------------/Обработка ошибок прокси/----------------------------
  }
  // если есть ошибка, то определяем её (коды ответа взяты из RFC1928)
  elseif ($l[3] == '1') {echo "Ошибка: SOCKS-сервера";}
  elseif ($l[3] == '2') {echo "Ошибка: соединение запрещено набором правил";}
  elseif ($l[3] == '3') {echo "Ошибка: сеть недоступна";}
  elseif ($l[3] == '4') {echo "Ошибка: хост недоступен";}
  elseif ($l[3] == '5') {echo "Ошибка: отказ в соединении";}
  elseif ($l[3] == '6') {echo "Ошибка: истечение TTL";}
  elseif ($l[3] == '7') {echo "Ошибка: команда не поддерживается";}
  elseif ($l[3] == '8') {echo "Ошибка: тип адреса не поддерживается";}
  else {echo "Ошибка: не определено!";}
 }
else
 {
  echo "Ошибка: прокси-сервер не поддерживает метод без аутентификации!";
 }
 }
else
 {
  echo "Ошибка: это не socks5 прокси!";
 }
// ----------------------------------------------------------------------------------
    } catch (Exception $e) {
        echo "nError: ".$e->getMessage();
    }
    if (isset($socket)) {
   
	sleep(2);
        echo 'Close socket ... ';
        socket_close($socket);   // закрываем сокет
        echo "OKn";
     
    }
fclose($log); // закрываем файл
echo "Scan completed... OKn";
?> 

Web proxy