PHP fsockopen |
Здравствуйте, гость ( Вход | Регистрация )
PHP fsockopen |
Aug 31 2006, 09:38
Сообщение
#1
|
|
N.N.G. Группа: Posters Сообщений: 292 Регистрация: 16.10.2005 Пользователь №: 103 |
кратко:
Код <?php function status_tcp($ip,$port) { if ($ip=="") { $ip="192.168.1.2"; } if (@fsockopen($ip, $port, $errno, $errstr, 0.3)) { echo "<font color=blue>OnLine</font><p>"; } else { echo "<font color=red>OffLine</font><p>"; } } function status_udp($ip,$port) { if ($ip=="") { $ip="udp://192.168.1.2"; } if (@fsockopen($ip, $port, $errno, $errstr,1)) { echo "<font color=blue>OnLine</font><p>"; } else { echo "<font color=red>OffLine</font><p>"; } } ?> Основная чать. В ней происходят все расчеты Код <CENTER> <TABLE BORDER CELLPADDING=5> <CAPTION ALIGN=top><h2>Статус серверов</h2> </CAPTION> <TR> <TD><b> Название сервера</b> </TD> <TD><b> IP - сервера</b> </TD> <TD><b> Статус сервера</b> </TD> <TD><b> Дополнительно </b> </TD> </TR> <TR> <TD NOWRAP >NFS Undeground 1.4</TD> <TD>wow.cheb.ru</TD> <TD> <?php status_tcp("",10800) ?> <TD> <a href="http://wow.cheb.ru/forums/index.php?showtopic=15">Настройка игры</a> <p> </TR> <TR> <TD NOWRAP >Quake 3 1.32 </TD> <TD>wow.cheb.ru</TD> <TD> <?php status_udp("", 27960) ?> <TD> <a href="http://wow.cheb.ru/forums/index.php?showtopic=8&pid=18&st=0&#entry18">Настройка игры</a> <p> </TR> Теперь проблема. для открытия тцп порта все нормально и правильно. Но когда и хочю проверить UDP порт. Он мне всегда выдает "OnLine" Прочитал много мануало, читал в нете. Ничего не помогло. едиственное отличие ТЦП и УДВ это время подключеия к порты. В книгах его вообще нет. Сообщение отредактировал LLeSS - Aug 31 2006, 10:49 |
|
|
Sep 2 2006, 10:42
Сообщение
#21
|
|
Пользователь Группа: Posters Сообщений: 116 Регистрация: 22.5.2006 Из: Чебоксары Пользователь №: 616 |
SiMM, а вот не говорил бы ты намеками, и не возникало бы у тебя сомнений, что их у тебя поняли.
LLeSS, как ты спрашиваешь, так тебе и отвечают. Все равно надо будет что-то туда посылать и проверять результат. Если там Quake, то попробуй так (тут PHP 4.2+): Код function getvalue($srv_value, $srv_data)
{ $srv_value = array_search ($srv_value, $srv_data); if ($srv_value === false) { return false; } else { return $srv_data[$srv_value+1]; } } function status_quake3($ip, $port) { $result = false; $socket = fsockopen("udp://".$ip, $port, $errno, $errstr, 50); if ($socket === false) { echo "[$errno] - $errstr<br>\n"; } else { socket_set_timeout($socket, 50); fwrite($socket, "\xFF\xFF\xFF\xFFgetstatus\x00"); $s = fread($socket, 2048); if ($s) { $players_info = explode("\n", $s); $game_info = explode("\\", $players_info[1]); $sv_hostname = getvalue("sv_hostname", $game_info); if ($sv_hostname) { echo "$sv_hostname\n"; echo getvalue("g_gametype", $game_info); echo "\n"; echo getvalue("gamename", $game_info); echo "\n"; echo getvalue("version", $game_info); echo "\n"; echo getvalue("mapname", $game_info); echo "\n"; echo getvalue("sv_maxclients", $game_info); echo "\n"; echo getvalue("g_needpass", $game_info); echo "\n"; $result = true; } } } fclose($socket); return $result; } if (status_quake3("127.0.0.1", 27960)) { echo "true\n"; } else { echo "false\n"; } |
|
|
Sep 2 2006, 18:45
Сообщение
#22
|
|
Пользователь Группа: Posters Сообщений: 116 Регистрация: 22.5.2006 Из: Чебоксары Пользователь №: 616 |
Посмотрел на 213.24.223.171, в скрипте надо поменять следующие строки:
... $socket = fsockopen("udp://".$ip, $port, $errno, $errstr, 30); ... socket_set_timeout($socket, 3); ... в 19:42 вернуло sv_hostname: Cheboksary q3 OSP server g_gametype: 1 gamename: baseq3 version: Q3 1.32 win-x86 Oct 7 2002 mapname : q3tourney2 sv_maxclients: 20 g_needpass: 0 а в 19:43 sv_hostname: Cheboksary q3 OSP server g_gametype: 1 gamename: version: mapname : sv_maxclients: g_needpass: |
|
|
Sep 2 2006, 22:25
Сообщение
#23
|
|
Супер постер Группа: Global moder Сообщений: 994 Регистрация: 6.12.2005 Из: http://pauk.net.ru/ Пользователь №: 179 |
спасибо тебе за помощь, думаю с остальными играми надо поступать аналогично и на будущее научится юзать сниферы...
Сообщение отредактировал jay - Sep 2 2006, 22:25 -------------------- |
|
|
Sep 2 2006, 23:06
Сообщение
#24
|
|
N.N.G. Группа: Posters Сообщений: 292 Регистрация: 16.10.2005 Пользователь №: 103 |
сенкс.
|
|
|
Sep 3 2006, 00:52
Сообщение
#25
|
|
PAUK-NET.RU TEAM Группа: Admin Сообщений: 4,715 Регистрация: 11.7.2005 Из: ЮЗР Пользователь №: 3 |
|
|
|
Гость_mgk_* |
Sep 29 2006, 10:31
Сообщение
#26
|
Guests |
сам столкнулся с такой проблемой...
с играми действительно сложно решить проблему к кажой игре надо писать свой запрос... но со стандартными портами (80,21) все ОК когда включен догда включен 100% правильный ответ правдо написано на perl: $socket = IO::Socket::INET->new(Proto => 'tcp', PeerPort => $port, PeerAddr => $ip_addr); #делаем соединение if($socket) #если оно успешно, то { print ("$ip_addr:$port \n"); print("is open \n"); #сообщаем, что порт открыт } |
|
|
Sep 29 2006, 11:08
Сообщение
#27
|
|
PAUK-NET.RU TEAM Группа: Admin Сообщений: 4,715 Регистрация: 11.7.2005 Из: ЮЗР Пользователь №: 3 |
|
|
|
Гость_mgk_* |
Sep 29 2006, 20:11
Сообщение
#28
|
Guests |
фишка в том что он и с UDP нармально сканирует... эти порты =) а вот с игровыми портами вилы двойные вылетают.. он их не видит =( к ним надо обращаться шоб они ответили...причем к каждой игре посвойму о чем здесь уже говорили... |
|
|
Sep 29 2006, 21:21
Сообщение
#29
|
|
PAUK-NET.RU TEAM Группа: Admin Сообщений: 4,715 Регистрация: 11.7.2005 Из: ЮЗР Пользователь №: 3 |
|
|
|
Гость_mgk_* |
Sep 29 2006, 21:39
Сообщение
#30
|
Guests |
|
|
|
Oct 1 2006, 01:16
Сообщение
#31
|
|
Пользователь Группа: Posters Сообщений: 116 Регистрация: 22.5.2006 Из: Чебоксары Пользователь №: 616 |
|
|
|
Текстовая версия | Сейчас: 4th May 2024 - 16:07 |