socket_create
resource socket_create ( int $domain , int $type , int $protocol )
Tworzy gniazdo (punkt końcowy dla komunikacji
Parametry
- domain- parametr określa z jakiej rodziny jest protokół użyty przez gniazdo
-
możliwe rodziny adresu/ptotokołu Domena opis AF_INET IPv4 oparty o protokoły internetowe. TCP i UDP są protokołami wspólnymi w tej rodzieni protokołów. AF_INET6 IPv6 oparty o protokoły internetowe. TCP i UDP są protokołami wspólnymi w tej rodzieni protokołów. Dla PHP 5.0.0. AF_UNIX Lokalny protokuł kominikacyjny rodziny. Wysoka wydajność i niski koszt sprawia że jest najlepszy z IPC (Komunikacja międzyprocesowa). -
type - ten parametr określa typ komunikacji użytej przez gniazdo
Możliwe typy gniazda Typ Opis SOCK_STREAM Zapewnia kolejność, niezawodność, strumieniowego połączenia.
Poza zespołem mechanizmu trnsmisji danyc może być wsparty.
Protokuł TPC jest oparty na tym typie gniazdaSOCK_DGRAM Obsługuje datagramy (bez połączenia, niewiarygodne wiadomości o określonej maksymalnej długości). Protkuł UDP jest oparty na gnieździe tego typu. SOCK_SEQPACKET Zapewnia kolejność, niezawodność, dwudrożne połączenie oparte o ścieżkę transmisji danyc dla datagramów o określonej maksymalnej długości SOCK_RAW Dostarcza surowy protokuł dostępu sieci. Ten specjalny typ gniazda moze być użyty ręcznie w każdym typie protokołu.
Często używany dla tego typu gniazda aby wykonaćżądanie ICMP (takie jeak ping, traceroute, itd).SOCK_RDM Dostarcza niezawodne datagramy, które nie gwarantują kolejności. Jest to najprawdopodobniej nie zaimplementowane w woim systemie -
protocol - Ten parametr ustawia określony protokuł wewnątrz określonej domeny użytej do komunikacji na zwróconym gnieździe.Prawidłowe wartości mogą być pobierane a pomocą nazwy użytej przez getprotobyname(). Jeśli pożądanym protokołem jest TPC, lub UPD odpowiednie stałe SOL_TCP i SOL_UDP mogą być również wykorzystywane.
Częste protokoły Nazwa Opis icmp Internetowy kontroler wiadomości protokołu jest używany głównie przez bramy i hostów datagramów raport błędów w komunikacji. Komenda "ping" jest przykładem aplikacji ICMPudp Datagramy protokołu użytkownika są używane bezpołączeniowo. Protokół ze stałą długością rekordów.
Ze względu na te aspekty, UDP wymaga minimalnej kwotyniepowtarzalnego protokołu.tcp Protokół kontroli transmisji jest wiarygodny, oparty o połączenie, zorientowany strumieniowo.
TCP gwarantuje, że wszystkie pakiety zostaną odebrane w takiej kolejności, w jakiej zostały wysłane. Jeśli jakiś pakiet zostanie utracony podczas komunikacji, TPC automatycznie retransmituje pakiet dopuki docelowy host nie przyzna pakietu. Dla wiarygodności i wydajności TPC podczas realizacji sam decyduje o odpowiednich granicach warstwy komunikacyjnej datagramuZatem TPC musi dopuczszać możliwość częściowej transmisji
Zwracane wartości
socket_create() zwraca zasób gniazda na succes lub FALSE
Listing
<?php
/// start ping.inc.php ///
$g_icmp_error = "No Error";
// timeout in ms
function ping($host, $timeout)
{
$port = 0;
$datasize = 64;
global $g_icmp_error;
$g_icmp_error = "No Error";
$ident = array(ord('J'), ord('C'));
$seq = array(rand(0, 255), rand(0, 255));
$packet = '';
$packet .= chr(8); // type = 8 : request
$packet .= chr(0); // code = 0
$packet .= chr(0); // checksum init
$packet .= chr(0); // checksum init
$packet .= chr($ident[0]); // identifier
$packet .= chr($ident[1]); // identifier
$packet .= chr($seq[0]); // seq
$packet .= chr($seq[1]); // seq
for ($i = 0; $i < $datasize; $i++)
$packet .= chr(0);
$chk = icmpChecksum($packet);
$packet[2] = $chk[0]; // checksum init
$packet[3] = $chk[1]; // checksum init
$sock = socket_create(AF_INET, SOCK_RAW, getprotobyname('icmp'));
$time_start = microtime();
socket_sendto($sock, $packet, strlen($packet), 0, $host, $port);
$read = array($sock);
$write = NULL;
$except = NULL;
$select = socket_select($read, $write, $except, 0, $timeout * 1000);
if ($select === NULL)
{
$g_icmp_error = "Zaznacz Error";
socket_close($sock);
return -1;
}
elseif ($select === 0)
{
$g_icmp_error = "Przekroczony czas";
socket_close($sock);
return -1;
}
$recv = '';
$time_stop = microtime();
socket_recvfrom($sock, $recv, 65535, 0, $host, $port);
$recv = unpack('C*', $recv);
if ($recv[10] !== 1) // ICMP proto = 1
{
$g_icmp_error = "nie ma pakietu ICMP";
socket_close($sock);
return -1;
}
if ($recv[21] !== 0) // ICMP odpowiedz = 0
{
$g_icmp_error = "Not ICMP response";
socket_close($sock);
return -1;
}
if ($ident[0] !== $recv[25] || $ident[1] !== $recv[26])
{
$g_icmp_error = "Zły numer identyfikacyjny";
socket_close($sock);
return -1;
}
if ($seq[0] !== $recv[27] || $seq[1] !== $recv[28])
{
$g_icmp_error = "Zły numer";
socket_close($sock);
return -1;
}
$ms = ($time_stop - $time_start) * 1000;
if ($ms < 0)
{
$g_icmp_error = "Odpowiedz zbyt długa";
$ms = -1;
}
socket_close($sock);
return $ms;
}
function icmpChecksum($data)
{
$bit = unpack('n*', $data);
$sum = array_sum($bit);
if (strlen($data) % 2) {
$temp = unpack('C*', $data[strlen($data) - 1]);
$sum += $temp[1];
}
$sum = ($sum >> 16) + ($sum & 0xffff);
$sum += ($sum >> 16);
return pack('n*', ~$sum);
}
function getLastIcmpError()
{
global $g_icmp_error;
return $g_icmp_error;
}
/// end ping.inc.php ///
?>
Dodano przez: igor
Ranga: Administrator serwisu Punktów: 0
Ranga: Administrator serwisu Punktów: 0
Komentarze użytkowników
:: Losowe artykuły
:: Wymiana linków
Modowe inspiracje |
Android Gry i Aplikacje |
ZaplanujTransport.pl: Przeprowadzki, transport, aukcje |
Logo dla firmy |
Change Tires - Car Weather Forecast Reminder |
Laminas: MVC Framework for PHP |
IT Books Reviews and Programming: JS, JAVA, PHP, ANDROID, CSS |
Katalog roślin |
Programming articles: JAVA, PHP, C++, Python, JavaScript |
Kancelaria Adwokacka Łukasz Huszno