Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyparsowanie domeny z nazwy hosta
toolmaniak
post
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 29.05.2006
Skąd: /dev/null

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


Witam!

Ostatnio, zająłem się tworzeniem statystyk w php z wykorzystaniem dwóch baz whois a mianowicie whois.ripe.net i whois.nask.pl. Problem na jaki się natknąłem przy korzystaniu z Nask polega na tym, że jako argument należy podać nazwę domeny a nie hosta. Rozwiązałem ten defekt jednak zbyt trywialnie, odcinając wszystko do pierwszej kropki (kod poniżej), ale zdarzają się przecież bardziej porąbane nazwy hostów jak np: 64.123.blabla.jakas_domena.pl i co wtedy. Ma ktoś pomysł jak najlepiej i w miarę bezbłednie wyparsować nazwe domeny?


  1. <?php
  2. $target_domainame = gethostbyaddr($target);
  3. $domena_nask = strstr($target_domainame,'.');
  4. ?>


pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Athlan
post
Post #2





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


a manual to co? end" title="Zobacz w manualu php" target="_manual, explode" title="Zobacz w manualu php" target="_manual

  1. <?php
  2. $adress = '64.123.blabla.jakas_domena.pl';
  3. $domain = end(explode('.', $adress));
  4.  
  5. echo $domain;
  6. ?>


przykład z Twojej "porąbanej" domenki (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
w ten sam sposób wyciągasz rozszerzenia plików (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Athlan 8.08.2006, 11:37:46
Go to the top of the page
+Quote Post
toolmaniak
post
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 29.05.2006
Skąd: /dev/null

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


Fajnie, tylko ze akurat nie chciałem wyciagnąć samego pl tylko jakas_domena.pl. i chodzi mi o taki sposób ze jak sie trafi np "blabla.costam.domena.pl" czy "www.domena.pl" zawsze dostane "domena.pl".
Go to the top of the page
+Quote Post
Athlan
post
Post #4





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


ahaaaa (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

no to może tak:

  1. <?php
  2. $adress = '64.123.blabla.jakas_domena.pl';
  3.  
  4. echo dawaj_domene($adress);
  5.  
  6. function dawaj_domene($item)
  7. {
  8. $explode = explode('.', $item);
  9. $count = count($explode);
  10.  
  11. return $explode[($count - 2)].'.'.end($explode);
  12. }
  13.  
  14. ?>


aż takie trudne ? ;P

pozdro (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

--EDIT--

pisane z palca więc mogłem się machnąć, pozdro (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Athlan 8.08.2006, 12:25:40
Go to the top of the page
+Quote Post
toolmaniak
post
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 29.05.2006
Skąd: /dev/null

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


ja chyba nie wyraznie pisze.... to miałoby byc uniwersalne


return $explode[($count - 2)].'.'.end($explode);

przy przykładzie z blabla.costam.domena.pl dzieki $count-2 rzeczywiscie zwróci domene ale z www.domena.pl daje .pl (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

(IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif)
Go to the top of the page
+Quote Post
Athlan
post
Post #6





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


mi wszystko zwraca poprawnie:

- aaa.aaa.aaa.ccc.pl => ccc.pl
- aaa.aaa.ccc.pl => ccc.pl
- aaa.ccc.pl => ccc.pl
- ccc.pl => ccc.pl

no proszę, przykładzik:

  1. <?php
  2. $domeny = array('ccc.pl', 'aaa.ccc.pl', 'aaa.aaa.ccc.pl', 'aaa.aaa.aaa.ccc.pl');
  3.  
  4. foreach($domeny as $adress)
  5. {
  6. echo dawaj_domene($adress).'<br />';
  7. }
  8.  
  9. function dawaj_domene($item)
  10. {
  11. $explode = explode('.', $item);
  12. $count = count($explode);
  13.  
  14. return $explode[($count - 2)].'.'.end($explode);
  15. }
  16.  
  17. ?>


blablabla czu www to to samo - obie nazwy to tak naprawdę subdomeny (było o tym -> szukaj na forum) a do stringa odnosi się to tak samo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) nieważne czy www.costam.pl czy blablabla.costam.pl, obie zwróą costam.pl (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)

skrypt działa bez zarzutu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
toolmaniak
post
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 29.05.2006
Skąd: /dev/null

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


Zwracam honor, działa, pomyliłem zmienne w argumencie dla funkcji. Wielkie dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Niedługo opublikuje kod statystyk - może komuś się przyda...

Pozdrawiam

(IMG:http://forum.php.pl/style_emoticons/default/rolleyes.gif)
Go to the top of the page
+Quote Post
pawel_
post
Post #8





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 12.12.2005

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


a co z domenami typu abc.co.uk (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) albo *.com.pl (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) trzeba do tego skryptu dopisać wyjątki (jeżeli na miejscu koniec-2 jest com/org/... to wez koniec-3)
Go to the top of the page
+Quote Post
Athlan
post
Post #9





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


@pawel_ a właśnie... słuszna uwaga, działa to na zasadzie: jeżeli końcówka jest wyjątkiem, bierzemy z kolei trzeci kawałek tablicy, może zarzuce bo mi sie i tak nudzi (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

  1. <?php
  2. $domeny = array('domena.com.pl', 'domena.net.pl', 'poddomena.poddomena.domena.pl', 'poddomena.poddomena.domena.org.pl');
  3.  
  4. foreach($domeny as $adress)
  5. {
  6. echo dawaj_domene($adress).'<br />';
  7. }
  8.  
  9. function dawaj_domene($item)
  10. {
  11. $protected = array('com', 'org', 'net'); // tutaj dopisz również polskie domeny regionalne :)
  12. $explode = explode('.', $item);
  13. $count = count($explode);
  14.  
  15. $domain = $explode[($count - 2)];
  16.  
  17. if(in_array($domain, $protected))
  18. {
  19. $domain = $explode[($count - 3)].'.'.$domain;
  20. }
  21.  
  22. return $domain.'.'.end($explode);
  23. }
  24.  
  25. ?>


pasi? jakieś pytania? jakieś żądania?

pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
toolmaniak
post
Post #10





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 29.05.2006
Skąd: /dev/null

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


Rzeczywiście słuszna uwaga z Waszej strony. Ja bym dodał do tablicy jeszcze np. edu i nask $protected = array('com', 'org', 'net','edu','nask');. A tak pozatym myślałem dużo nad tym, i doszedłem jeszcze do jedengo możliwego rozwiązania ale innym sposobem, tylko problemy techniczne napotkałem po drodze.

Chciałem wykorzystać coś w stylu nslookup tzn.

> set type=CNAME
> fenix.wibro.agh.edu.pl
Server: 127.0.0.1
Address: 127.0.0.1#53

Non-authoritative answer:
*** Can't find fenix.wibro.agh.edu.pl: No answer

Authoritative answers can be found from:
wibro.agh.edu.pl
origin = zeus.imir.agh.edu.pl
mail addr = mbanas.agh.edu.pl
serial = 2006071201
refresh = 86400
retry = 7200
expire = 604800
minimum = 86400

używając socket_create(AF_INET,SOCK_DGRAM,SOL_UDP);

a pozniej przekazac wynik na 43 port serwera whois, ale jak widac pliki strefy też nie zawsze zwracają domene (tylko nieraz wraz z subdomenami - patrz pierwsza linia po "Authoritative answers can be found from:"). Trzeba by się bawić więc w jakieś wyłapywanie delegacji stref... chyba. (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif)

także dzięki za ten kodzik po wyżej, napewno się przyda (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
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 Aktualny czas: 15.09.2025 - 18:41