Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
[PHP]Bindowanie się na swój adres IP - Wersja do druku

+- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl)
+-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www)
+--- Dział: Programowanie, Bazy danych (https://www.webmastertalk.pl/forum-programowanie-bazy-danych)
+--- Wątek: [PHP]Bindowanie się na swój adres IP (/thread-php-bindowanie-sie-na-swoj-adres-ip)



[PHP]Bindowanie się na swój adres IP - Misiur - 05-05-2010

Jak tu mi nikt nie pomoże, to już nie wiem kto może.

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:

Kod:
$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:

Cytat: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łem tylko bindowanie dotyczące serwera z którym się łączy przez alias.

Co mam zrobić?

Próbowałem tak jak coś w manualu było:

Kod:
$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:
Kod:
Array ( [stream_type] => udp_socket [mode] => r+ [unread_bytes] => 0 [seekable] => [timed_out] => 1 [blocked] => 1 [eof] => ) Timed Out[code]

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ć.