Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie danych z telnetu więcej niż 8192b długo pobiera
rafaliex
post 14.09.2017, 19:39:57
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 21.08.2010

Ostrzeżenie: (0%)
-----


Witam,

Potrzebuję pobierać sporo danych z urządzenia dokładnie switcha i rozmiar pobieranych danych przekracza 8192b. Wiem że fread może pobierać max 8192b dlatego próbuję zrobić pętle na fread i wtedy pobiera mi całe dane lecz pobranie reszty danych trwa bardzo długo...

Mój kod wygląda tak:

  1. $fps=@fsockopen($ip,23);
  2. fputs($fps,$header1);
  3. usleep(200000);
  4. fputs($fps,$header2);
  5. usleep(300000);
  6. fputs($fps,"$login\r\n");
  7. usleep(300000);
  8. fputs($fps,"$haslo\r\n");
  9. usleep(600000);
  10. fputs($fps,"show fdb\r\n");
  11. usleep(300000);
  12.  
  13. fputs($fps,"a");
  14. usleep(300000);
  15.  
  16.  
  17. while ($info = fread($fps,8192)) {
  18. $x .= $info;
  19. }
  20.  
  21. echo $x;


Gdy robię to bez pętli czyli tylko jedno pobranie 8192b to jest ok szybko to się ładuje, ale jak już robi się pętla to tak naprawdę 1.5x więcej danych niż 8192b potrafi trwać minutę.
Nie wiem czy ja coś robię źle ale próbowałem też tą pętle zastąpić $x = stream_get_contents($fps, -1); i to też podobnie trwa.

Ma ktoś jakiś pomysł na mój problem??

dla przykładu pobranie stringa: string(13653) trwa dokładnie 1 minutę.

Ten post edytował rafaliex 14.09.2017, 19:45:18
Go to the top of the page
+Quote Post
Pyton_000
post 14.09.2017, 19:46:59
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Zerknij to: https://github.com/ngharo/Random-PHP-Classe...elnet.class.php
Go to the top of the page
+Quote Post
rafaliex
post 14.09.2017, 20:10:56
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 21.08.2010

Ostrzeżenie: (0%)
-----


Próbowałem użyć tej klasy ale ona jest napisania typowo pod jakieś logowanie do serwera gdzie są znaki charakterystyczne. Wolałbym bazować na czymś innym.
Go to the top of the page
+Quote Post
Pyton_000
post 14.09.2017, 20:22:34
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


a jesteś pewny że nie idzie tam się zalogować po ssh ? Co to za switch?
Go to the top of the page
+Quote Post
rafaliex
post 14.09.2017, 20:28:55
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 21.08.2010

Ostrzeżenie: (0%)
-----


Ogólnie to nie będzie jeden rodzaj switcha. A tak naprawdę 4 rodzaje ale problem w tym że wszystkie switche mają zablokowane ssh, mają tylko telnet uruchomiony. I przy wszystkich switach paczkę danych 9182b pobiera w ciągu 2 sekund a resztę bardzo bardzo długo.

Ten post edytował rafaliex 14.09.2017, 20:30:12
Go to the top of the page
+Quote Post
Pyton_000
post 14.09.2017, 21:08:47
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


zerknij jeszcze to https://github.com/fijiwebdesign/php-telnet

Ten post edytował Pyton_000 14.09.2017, 21:09:11
Go to the top of the page
+Quote Post
rafaliex
post 15.09.2017, 23:16:15
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 21.08.2010

Ostrzeżenie: (0%)
-----


Użyłem czegoś innego
socket_connect
socket_send
socket_recv

Te same dane wyciaga mi w 5 sekund, dzięki za pomoc.

Teraz mam inny problem, gdy łącze się z jednym ze switchy i próbuje się zalogować to ciągle mam znaczek:
"ÿý"
Jak dodam handshake:
$header1=chr(0xFF).chr(0xFB).chr(0x1F).chr(0xFF).chr(0xFB).chr(0x20).chr(0xF
F).chr(0xFB).chr(0x18).chr(0xFF).chr(0xFB).chr(0x27).chr(0xFF).chr(0xFD).chr(0x01
).chr(0xFF).chr(0xFB).chr(0x03).chr(0xFF).chr(0xFD).chr(0x03).chr(0xFF).chr(0xFC)
.chr(0x23).chr(0xFF).chr(0xFC).chr(0x24).chr(0xFF).chr(0xFA).chr(0x1F).chr(0x00).
chr(0x50).chr(0x00).chr(0x18).chr(0xFF).chr(0xF0).chr(0xFF).chr(0xFA).chr(0x20).c
hr(0x00).chr(0x33).chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0x2C).chr(0x33).ch
r(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0xFF).chr(0xF0).chr(0xFF).chr(0xFA).chr
(0x27).chr(0x00).chr(0xFF).chr(0xF0).chr(0xFF).chr(0xFA).chr(0x18).chr(0x00).chr(
0x41).chr(0x4E).chr(0x53).chr(0x49).chr(0xFF).chr(0xF0);


to wtedy komunikat zwrotny jest większy:
ÿýÿþÿþ ÿþ'ÿûÿýÿûÿúÿð


Mój kod wygląda teraz tak:
  1. $header1=chr(0xFF).chr(0xFB).chr(0x1F).chr(0xFF).chr(0xFB).chr(0x20).chr(0xFF).chr(0xFB).chr(0x18).chr(0xFF).chr(0xFB).chr(0x27).chr(0xFF).chr(0xFD).chr(0x01).chr(0xFF).chr(0xFB).chr(0x03).chr(0xFF).chr(0xFD).chr(0x03).chr(0xFF).chr(0xFC).chr(0x23).chr(0xFF).chr(0xFC).chr(0x24).chr(0xFF).chr(0xFA).chr(0x1F).chr(0x00).chr(0x50).chr(0x00).chr(0x18).chr(0xFF).chr(0xF0).chr(0xFF).chr(0xFA).chr(0x20).chr(0x00).chr(0x33).chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0x2C).chr(0x33).chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0xFF).chr(0xF0).chr(0xFF).chr(0xFA).chr(0x27).chr(0x00).chr(0xFF).chr(0xF0).chr(0xFF).chr(0xFA).chr(0x18).chr(0x00).chr(0x41).chr(0x4E).chr(0x53).chr(0x49).chr(0xFF).chr(0xF0);
  2. $header2=chr(0xFF).chr(0xFC).chr(0x01).chr(0xFF).chr(0xFC).chr(0x22).chr(0xFF).chr(0xFE).chr(0x05).chr(0xFF).chr(0xFC).chr(0x21);
  3.  
  4. $sock = socket_create(AF_INET, SOCK_STREAM, 0);
  5. socket_connect($sock , $ip , 23);
  6. sleep(4);
  7.  
  8. $message = $header1;
  9. socket_send ( $sock , $message , strlen($message) , 0);
  10. sleep(4);
  11. $message = "admin \r\n";
  12. socket_send ( $sock , $message , strlen($message) , 0);
  13. sleep(4);
  14.  
  15. socket_recv ( $sock , $x , 800000 , MSG_WAITALL );


I na wszystkich urządzeniach działa a na jednym innym modelu nie działa takie wysyłanie danych. Ma ktoś jakiś pomysł co trzeba zrobić by ta komunikacja zadziałała?? Próbowałem z sleep by poczekać na serwer ale nic nie chce zwrócić.
Go to the top of the page
+Quote Post
mls
post 22.09.2017, 11:52:42
Post #8





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Poczytaj o stream_set_blocking.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 15:13