Newsgroup: it.comp.lang.perl
Titolo: Estrazione IP e loro "normalizzazione"

  Un saluto a tutti.
  Ho un  problemino che  mi piacerebbe risolvere,  un po'  alla volta,
senza fretta.
  Ho  un file  cosi` formato  (le righe  vuote le  ho aggiunte  io per
separare i varii casi):
----------------------------------------------------------------------
1.1.79.41
1.112.100.32
1.120.181.122
213-140-10-135.fastres.net
213-140-9-155.fastres.net
 (213.140.9.155)
221.42.202.62.dial.bluewin.ch
 (62.202.42.221)
49.red-81-33-110.pooles.rima-tde.net
62.94.1.149
actarus.inet.it
 (194.185.232.218)
adsl-155-118.37-151.net24.it
adsl-62-167-101-147.adslplus.ch
 (62.167.101.147)
dial-148-240-4-115.zone-1.dial.net.mx
host1-109.pool80117.interbusiness.it
host1-195.pool80182.interbusiness.it
 (80.182.195.1)
ppp-102-84.98-62.inwind.it
ppp-103-110.98-62.inwind.it
 (62.98.110.103)
 
ppp-217-133-152-147.cust-adsl.tiscali.it
ppp-217-133-155-105.cust-adsl.tiscali.it
 (217.133.155.105)
ppp-217-157.25-151.libero.it
ppp-219-175.24-151.libero.it
 (151.24.175.219)
ppp-62-10-255-226.dialup.tiscali.it
 (62.10.255.226)
ppp-62-10-34-222.dialup.tiscali.it
ppp-62-123-0-145.dial.atlanet.it
usr1530-har.blueyonder.co.uk
usr1605-har.blueyonder.co.uk
 62.30.188.79
----------------------------------------------------------------------
  I  dati  sono  stati   estratti  dal  campo  "NNTP-Posting-Host:"  o
"X-NNTP-Posting-Host:" presente nei post dei NewsGroup.
  Osservateli bene (se ne avete voglia, ovviamente...) ;)
  Come si potrebbe ottenere, nel  limite del possibile, un ordinamento
"normalizzato",  tipo  questo  (sempre   dando  per  scontato  che  la
casistica sia  giusta, e ovviamente  aggiornandola man mano  che nuovi
dati vengono a disposizione)? :
  1.1.79.41         => 001.001.079.041
  -62-10-255-226.   => 062.010.255.226
  -103-110.98-62.   => 062.098.110.103
  1-195.pool80182.  => 080.182.195.001
  (213.140.9.155)   => 213.140.009.155
  221.42.202.62.    => 221.042.202.062
  (il tutto, ovviamente, per ottenere un elenco "ordinato" di IP).
  Sinceramente, provandoci, mi sono un po' incasinato con le regexp, e
non ci capisco piu` un tubo... ;)
  In alternativa:
  Non e`  che esista in  rete un  documento "in italiano"  che spieghi
*veramente bene* le regexp, esaustivamente e con esempi approfonditi?
  Grazie a chiunque possa darmi una dritta, e al NewGroup in generale.
-- 
Cio` che ho scritto, ho scritto.

"X-NNTP-Posting-Host:" presente nei post dei NewsGroup.
Cominciamo dall'inizio:
   RFC 2980
   ....
   3.4.1 NNTP-Posting-Host 
     This line is added to the header of a posted article by the server.
     The contents of the header is either the IP address or the fully 
     qualified domain name of the client host posting the article.
   ....
Da quello che capisco, è tutt'altro che uno standard, ma sperando che questo
sia grosso modo il comportamento dei più, la casistica si riduce a due soli
casi significativi: o c'è l'indirizzo IP o c'è il nome (o ci sono entrambi,
ma questo lo facciamo ricadere nel primo caso).
Le altre sono differenziazioni apparenti: a volte il nome è costruito con
l'IP, secondo una qualche regola di composizione; in realtà però si tratta
di un nome, e scomporlo per ottenere l'IP è un'operazione azzardata, e per
la quale non è possibile dare una regola generale che funzioni sempre (per
dirne una, a volte l'ordine dei gruppi di numeri è invertito, a volte no).
Se quello che serve a te è l'IP, si tratta quindi di riconoscerlo quando
c'è, e ricavarlo dal nome quando non c'è. E per ricavarlo dal nome, l'unica
procedura certa è un'interrogazione inversa ad un server DNS.
Per riconoscere l'IP, quando c'è, si può partire dividendo la stringa in
corrispondenza degli spazi:
   @elementi = split(/\s+/, $campo);
per ogni elemento, poi, si può provare a vedere se ha l'aspetto di un IP:
   $elemento =~ /\(?\d+\.\d+\.\d+\.\d+\)?/;
(Immagino che, con un po' di pazienza e in altro orario, si possa trovare
anche qualcosa di un po' meno ingenuo, ma anche questa potrebbe con un po'
di fortuna funzionare.)
Se l'IP non c'è, si va di DNS.
Il successivo ordinamento è secondario e relativamente semplice, anche se in
questo momento preferisco non avventurarmi a specificarlo.
Ciao.

 usare il mio (nuovo) Content-type  text/x-perl  almeno sul mio newsclient.
In ogni caso gli attachment, quale che ne sia il tipo, non sono consentiti
(e vengono di fatto cancellati) nella gerarchia it.* al di fuori dei gruppi
binari.
Ciao.