[PHP]Bindowanie swojego IP

0

Witam

Mam na nazwie prosty skrypt pobierający dane o serwerze CS. Pewnego razu przestał działać, więc napisałem do supportu.

To ten skrypt:

$ip = "194.109.69.51";

$fp = @fsockopen("udp://".$ip, 27015);
stream_set_timeout($fp, 10);
//stream_set_blocking($fp, 0);
fwrite($fp, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
$return = fread($fp, 100);
echo $return;
$data = stream_get_meta_data($fp);

print_r($data);

if($data['timed_out'])
{
	die("Timed Out");
}
else
{
	print_r($data);
}

I odpowiedź z nazwy:

zanim wykonuje Pan w skryptach operacje zapisu/odczytu z gniazda sieciowego
proszę zbindować się na swój adres IP.

Co to znaczy? W manualu PHP znalazłęm tylko bindowanie dotyczące serweru z którym się łączy przez alias.

Co mam zrobić?

BTW. Ten skrypt działa na unixstorm, więc jeśli mi nie pomożecie, zmieniam hosting.

W manualu coś było o bindzie i to wygląda tak:

$ip = "193.33.176.148";

$opts = array('socket' => array('bindto' => '85.128.153.53:0'));

$context = stream_context_create($opts);

$fp = @stream_socket_client("udp://".$ip.":27015", $errno, $errstr, 5, STREAM_CLIENT_CONNECT, $context); 
stream_set_timeout($fp, 10);
//stream_set_blocking($fp, 0);
fwrite($fp, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
$return = fread($fp, 100);
echo $return;
$data = stream_get_meta_data($fp);

print_r($data);

if($data['timed_out'])
{
	die("Timed Out");
}
else
{
	print_r($data);
}

array('bindto' => 'IP:0')) - w to miejsce wstawiałem swoje IP, ip serwera, ip routera, ale nic nie działa. Dalej timeout

Jak to coś pomoże...

Wynik: Array ( [stream_type] => udp_socket [mode] => r+ [unread_bytes] => 0 [seekable] => [timed_out] => 1 [blocked] => 1 [eof] => ) Timed Out

0

http://pl2.php.net/manual/en/function.socket-bind.php ?

Bindowanie ma to samo zastosowanie w przypadku serwera jak i klienta, choc w przypadku klienta wykonuje sie w specyficznych warunkach. Chodzi o przypisanie socketowi konkretnego portu i/lub adresu. zeby z tego adresu moc wyprowadzic połączenie (lub w przypadku serwera oczekiwać na danym adresie i porcie na połączenie) w przypadku gdy maszyna ma przypisanych wiecej niz jeden.

0

Całkowicie się pogubiłem. Chciałem tylko pozwolić na pobieranie danych o serwerze CS (protokół UDP, port prawie zawsze 27015) wszystkim ludziom wchodzącym na moją stronkę. Nie znam ani IP wchodzących (znaczy, nie licząc $_SERVER['SERVER_ADDR']), ani ip serwerów do których chce się połączyć.

Musiałbym zmieniać coś po stronie serwera? Tzn. otwierać porty? Bo już nie rozumiem z której strony mam bindować i co mam bindować. [glowa]

1 użytkowników online, w tym zalogowanych: 0, gości: 1