HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #10  
Старый 11.11.2009, 22:39
phpdreamer
Постоянный
Регистрация: 26.07.2009
Сообщений: 321
Провел на форуме:
444589

Репутация: 123
По умолчанию

Vlad&slav, вот сканер портов на пхп

PHP код:
<?php
error_reporting 
(E_ALL); // вывод сообщений для всех ошибок

if(empty($_POST["ip"]))die ('<html> 
<head>
<title>Online Port Scanner</title>
</head>
<body bgcolor="Black">
<div align="center"><font face="Tahoma" color="Gray">Online Port Scanner</font></div><br><br>
<form action="p.php" method="POST">
<font face="Tahoma" color="Silver"><div align="center">IP-address/Host&nbsp;<input maxlength="15" size="13" type="Text" name="ip" value="">
<br><input type="Submit" value="Scan">
</div>
</font>
</form>
</body>
</html>'
); //форма ввода


$portz = array("20","21","23","25","39","43","69","79","80","88","107","109","110",
"111","137","138","139","143","161","464","512","513","514","530",
"544","636","749","1433","1434");

// в данном массиве будут храниться номера портов, которые необходимо сканировать.
// это сделано для эффективного использования ресурсов сервера, зачастую провайдер
// выставляет небольшой таймаут для php скриптов и получится что сканируя все
// 65тысяч портов мы поступаем очень нерационально так как реально полезные из них
// всего пару процентов ;)

$descr = array("FTP data""FTP control""Telnet","Simple Mail Transfer Protocol",
"rlp: Resource Location Protocol""whois""tftp","finger","http",
"kerberos","rtelnet","pop2","pop3","sunrpc:SUN Remote Procedure Call",
"Netbios name service","Netbios name service""Netbios datagram service",
"imap4","snmp","kpasswd: kerberos v5","Remote Process Execution",
"remote login","cmd shell","courier rpc","kshell: Kerberos remote shell",
"ldaps","LDAP over TLS/SSL","kerberos-adm","ms-sql-s: Microsoft-SQL-Server",
"ms-sql-m: Microsoft-SQL-Monitor");

// а в этом массиве задаем описания для сервисов, обслуживающих на соответствующих портах
// главное чтобы смещение в массиве порта соответствовало смещению в массиве его описания
// то есть если смещение (индекс) порта с номером 23 == 2 (считаем с 0), значит описание
// для этого порта должно быть расположено так же с индексом 2 в массиве описаний.



$log_path "pscan.log";
$who $HTTP_SERVER_VARS['REMOTE_ADDR'];
// объявляем переменные для лога. как это продвинутый сканер и без лога? ;)
// в лог будем писать все, даже адрес того кто сканит. мы же любопытные ;)

$err_path "pscan.err";

// определяем колличество заданых портов-описаний, далее нам это пригодиться в циклах

$cnt=0//счетчик

$timeout 10// таймаут для инициализации сокета, максимум - 15

if($timeout>15// а тут можете изменить максимум 8)
$timeout=15;
$chost strip_tags($_POST['ip']); //загоняем сюда значение параметра hostname,
if($chost==""){ // если запустили наш скрипт без параметра $hostname - громко ругаемся
echo "необходимо задать ip-адрес или имя хоста!";
exit;
}

$ch $chost[0];
$new_chost="";

@
$LOGF fopen($log_path"a");
if(
$LOGF){ // если файл открыт успешно
flock($LOGF2);
fwrite($LOGF"================================================================n");
if( 
$ITS_FUCKING_LAMOZ == )
fwrite($LOGF"[!!!] ".date('H:i:s Y-m-d')." :>>> ".$HTTP_SERVER_VARS['REMOTE_ADDR']." scaned $chostn");
else
fwrite($LOGFdate('H:i:s Y-m-d')." :>>> ".$HTTP_SERVER_VARS['REMOTE_ADDR']." scaned $chostn");
fwrite($LOGF"================================================================n");
}
// ну а это шапка лога, тоесть дата, айпишник, сканируемый хост...

else{ // если возникла ошибка при логировании - пишем в файл ошибок

@$ERRF fopen($err_path"a");

if(
$ERRF){
flock($ERRF2);
fwrite($ERF"[date('H:i:s Y-m-d')] невозможно залогировать $whon");
flock($ERRF3);
rewind($ERRF);
fclose($ERRF);
}
}
// 

$port 0;
$pcnt count($portz);
$dcnt count($descr);
$ccnt 0;
$errno 0;
$errstr "no errorZ";

if( (
$pcnt==0) || ($dcnt==0) ){
echo 
"список портов не пустой. всем на выход.<br>n"
exit;
}

if(
$pcnt!=$dcnt){
if(
$pcnt>$dcnt)
$ccnt=$dcnt;
else
$ccnt=$pcnt
}
else
$ccnt=$pcnt;
// если количество портов и количество описаний разные - обрезаем до равного


echo "сканируем ".$chost.".....<br><table>";

echo 
str_repeat(" "256); 
for(
$i=0$i<$ccnt$i++){
if(!
$timeout)
@
$usenet_handle fsockopen($chost, (int)$portz[$i]);
else
@
$usenet_handle fsockopen($chost, (int)$portz[$i], &$errno, &$errstr$timeout);

if(!
$usenet_handle)

printf('

<div align="center">refused</div></td>
<div align="center">%s</div></td>
<div align="center">%s</div></td>
<div align="center">%s</div></td>
<div align="center">%s</div></td>
</tr>' 
$chost$portz[$i], $descr[$i], $errstr
);
else{
fwrite($LOGF$chost."t".$portz[$i]."t".$descr[$i]."t".$errstr."n");
printf('

<div align="center">соединен</div></td>
<div align="center">%s</div></td>
<div align="center">%s</div></td>
<div align="center">%s</div></td>
<div align="center">%s</div></td>
</tr>' 
$chost$portz[$i], $descr[$i], "no err0rZ"
);
// end else

flush();

// end for

fwrite($LOGF"nn");
flock($LOGF3);
rewind($LOGF);
fclose($LOGF);

unset(
$chost);
unset(
$new_chost);
unset(
$timeout);
unset(
$port);
unset(
$pcnt);
unset(
$dcnt);
unset(
$ccnt);
unset(
$errno);
unset(
$errstr);
?>
но на перле лучше:
Код:
#!/usr/bin/perl -w
 
 # PortMap by nerezus
 # The Artistic License
 # ICQ 547097
 #
 # A tool for scan ip range
 
 use strict;
 use Socket;
 
 if (@ARGV<2) {print "Usage: portmap.pl from_host(ip) to_host(ip) [portfile.txt(ports via [space])]\n";exit(0);}
 my $fremote=shift||'127.0.0.1';
 my $tremote=shift||'127.0.0.1';
 my $portfile=shift;
 my $ports;
 if ($portfile) {open (PF, $portfile); $ports=<PF>; close(PF);}
    else {$ports="21 80";}
 my @ports=split(/ /, $ports);
 my @flist=split(/\./, $fremote);
 my @tlist=split(/\./, $tremote);
 my $fip=$flist[0]*256*256*256+$flist[1]*256*256+$flist[2]*256+$flist[3];
 my $tip=$tlist[0]*256*256*256+$tlist[1]*256*256+$tlist[2]*256+$tlist[3];
 
 for (my $i=$fip; $i<=$tip; $i++) {
 	my $tmp=$i;
 	my $d1=int($tmp / (256*256*256)); $tmp=$tmp-$d1*(256*256*256);
 	my $d2=int($tmp / (256*256)); $tmp=$tmp-$d2*(256*256);
 	my $d3=int($tmp / 256); $tmp=$tmp-$d3*256;
 	my $d4=$tmp;
 	my $ip="$d1.$d2.$d3.$d4";
 	my $host=gethostbyname($ip);
 	foreach my $port (@ports){
 			my $dest=sockaddr_in($port, $host);
 			socket (S, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
 			if (connect(S, $dest)) {print "[".scalar(localtime)."] $ip:$port OK\n";}
 #			   else {print "[".scalar(localtime)."] $ip:$port ERR\n";}
 			close S;
 			}
 }
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.