Cześć ziomki chciałbym zapytać czy można się połączyć przez protokół UDP za pośrednictwem php? No niby się da ale…
A o co mi chodzi mam skrypt łączący się z trackerami torrent. Aby uzyskać informacje o seeds i resztę, jednak nie mogę nawiązać połączenia z UDP, za pomocą protokołu http działa bez problemów jednak większość trackerów jest UDP i dlatego chce to rozwiązać jakoś. Mam stronę na ovh.
Stary mieszasz warstwy sieciowe. Nie da się połączyć UDP przez HTTP. To dwie różne warstwy sieciowe i to pierwsza jest niższa a druga wyższa, czyli to HTTP może być przesłane przez UTP - ale zazwyczaj nie ma to sensu.
HTTP to protokół warstwy aplikacyjnej, a pod spodem może być TCP, UDP, a nawet i SCTP.
TCP i UDP to protokoły warstwy transportowej (o ile dobrze pamiętam).
Więc to są dwa niezależne od siebie protokoły. Wyższy jest przesyłany przez niższy ale nie odwrotnie - o co pytasz.
Chcesz nawiązać połączenie UDP z serwerem to nie ma problemu. Nie ma znaczenia czy to php, js, c, c++, C#, a może rust. W obu przypadkach tworzysz sobie połączenie (socket) za pomocą odpowiedniej libki (dla danego środowiska) do serwera, który nawiąże połączenie UDP/IP i implementujesz po swojej stronie protokół z warstwy aplikacji jakiego używa ten serwer do którego się podłączyłeś.
Tutaj masz przykład: https://www.binarytides.com/udp-socket-programming-in-php/
Ciebie interesuje tylko część implementacji clienta.
Dobra inaczej tworze ten twój socket w php. Ale nie działa mi to
/**
* Prepares the UDP connection
*
* @param string $host Domain or IP address of the tracker.
* @param int $port Optional. Port number of the tracker, Default 80.
* @return array Created socket, transaction ID and connection ID.
*/
private function prepare_udp( $host, $port ) {
$socket = $this->udp_create_connection( $host, $port );
$transaction_id = $this->udp_connection_request( $socket );
$connection_id = $this->udp_connection_response( $socket, $transaction_id, $host, $port );
return array( $socket, $transaction_id, $connection_id );
}
/**
* Creates the UDP socket and establishes the connection
*
* @throws \Exception If the socket couldn't be created or connected to.
*
* @param string $host Domain or IP address of the tracker.
* @param int $port Port number of the tracker, Default 80.
* @return resource $socket Created and connected socket.
*/
private function udp_create_connection( $host, $port ) {
if ( false === ( $socket = @socket_create( AF_INET, SOCK_DGRAM, SOL_UDP ) ) ) {
throw new \Exception( "Couldn't create socket." );
}
$timeout = $this->timeout;
socket_set_option( $socket, SOL_SOCKET, SO_RCVTIMEO, array( 'sec' => $timeout, 'usec' => 0 ) );
socket_set_option( $socket, SOL_SOCKET, SO_SNDTIMEO, array( 'sec' => $timeout, 'usec' => 0 ) );
if ( false === @socket_connect( $socket, $host, $port ) ) {
throw new \Exception( "Couldn't connect to socket." );
}
return $socket;
}
No to napraw.
Żebyś zrozumiał o co chodzi, taka anegdotka która oddaje poziom sytuacji jaki obecnie mamy i tego czego oczekujesz.
Idę do mechanika i mówię mu:
Panie wkładam kluczyk do stacyjki i samochód mi nie działa
I daję mu jeszcze takie zdjęcie:
Jak myślisz co dostanę w zamian?
Sory no ale GIGO…
Kontynuując moją historię … chodzi o ten biały samochód, stoi na zewnątrz, zamknięty.
Człowiek przychodzi po pomoc a dostaje takiego hejtera
Jakiej odpowiedzi poza: “Coś zrobiłeś źle” oczekujesz? Ten wątek jak na razie jest klasycznym przykładem GIGO (garbage in garbage out).
Oczywiście mogę Ci wymienić wszystkie możliwe przyczyny dlaczego Ci nie działa, ale nie mam tyle czasu by chociaż z grubsza wypisać możliwe powody. I nie chodzi tutaj o 15 minut, bo powodów mogą być setki, więc zajęłoby mi to pewnie kilka godzin.
No to podaj mi kilka najpopularniejszych powodów metody poszukiwań
Nie prowadzę statystyk.
- błędy w kodzie
- błędne skonfigurowanie jakiegoś serwera
- zablokowane porty wychodzące i przychodzące
- problemy na warstwie sieciowej
- obciążony serwer
- odrzucanie połączenia przez serwer
- niepoprawnie zaimplementowana warstwa aplikacji
- wysyłane niepoprawne dane
- niepoprawnie nawiązane połączenie
- brak uwierzytelnienia
- jeszcze mam z 5 pomysłów, ale właśnie skończyło mi się pranie i muszę je rozwiesić, a potem jestem zajęty
Czyli prawdopodobnie ovh blokuje porty?
Nie wiem, ovh ma wiele produktów w swojej ofercie i każdy może się charakteryzować nieco inną specyfikacją.