Autore Topic: Ricavare ip lan  (Letto 1318 volte)

Offline guiodic

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
    • http://guiodic.wordpress.com/
Ricavare ip lan
« il: 29 Aprile 2009, 16:45:18 »
Salve a tutti...

sto completando il mio programma in gambas Bashare che attualmente è ostato sul forum di Ubuntu ma che come promesso vorrei portare qui.

Mi manca un'ultima cosa prima di rilasciarlo al "grande pubblico" :)

Ho bisogno di ricavare l'ip in lan della macchina. Ho provato così:

PUBLIC SUB get_local_ip() AS String
 
  DIM h AS DnsClient
 
  h = NEW DnsClient
  PRINT "getting local ip address... please wait"
  h.Async = FALSE
  h.HostName = System.Host
  h.GetHostIP
  RETURN h.HostIP
 
END


Ma mi ritorna 127.0.1.1 :(
A me invece servirebbe ovviamente avere 192.168.1.qualcosa

Qualcuno ha qualche idea?

Grazie.

Offline guiodic

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
    • http://guiodic.wordpress.com/
Re: Ricavare ip lan
« Risposta #1 il: 29 Aprile 2009, 20:13:13 »
be'... ho fatto così, un po' sporco come metodo...:

  DIM MySock AS Socket
  DIM lanip AS String = ""
 
  MySock = NEW Socket
  MySock.Connect("www.google.it", 80)
  PRINT "getting local ip address... please wait"

  DO WHILE (MySock.Status <> 7) AND (MySock.Status > 0)
    WAIT 0.1
  LOOP

  IF MySock.Status <> 7 THEN
    Message.Error(("Impossibile ricavare indirizzo ip locale"))
    lanip = ("invalid.local.ip")
  END IF
  IF lanip = "" THEN lanip = MySock.LocalHost
  MySock.Close()
  RETURN lanip

  • Visitatore
Re: Ricavare ip lan
« Risposta #2 il: 29 Aprile 2009, 22:27:38 »
Io o fatto accussì :
Codice: [Seleziona]

A as String
B as String[]
IP as String
   SHELL "ifconfig INTERFACCIA"  TO A
     B = Scan(A, "* inet addr:* *")
    IP = B[1]

Offline guiodic

  • Gamberetto
  • *
  • Post: 11
    • Mostra profilo
    • http://guiodic.wordpress.com/
Re: Ricavare ip lan
« Risposta #3 il: 30 Aprile 2009, 02:51:32 »
Ci avevo pensato ma io non so quale interfaccia viene usata a priori.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Ricavare ip lan
« Risposta #4 il: 02 Maggio 2009, 11:56:13 »
Bè, il suggerimento di gian è corretto, se però il computer ha più schede di rete, o altre visrtuali (es. vns o vpn), allora è un problema che non risolvi con nessun comando, ma solo sapendo a priori la porta esatta che vuoi testare.

Comunque, il comando può essere eseguito solo come "root".

Prova con questo codice:
Codice: [Seleziona]

'---
' Return collection of net configuration
'
' @return : Collection : Array
'
STATIC PUBLIC FUNCTION GetNetConfig() AS Collection
  DIM sFile, sRow AS String
  DIM aFile AS String[]
  DIM oCfg AS Collection
  DIM oArr AS NEW Collection
  'loop for file reading
  SHELL "ls -1 /etc/sysconfig/networking/devices | grep '^ifcfg'" TO sFile
  aFile = Split(sFile, "\n")
  FOR EACH sFile IN aFile
    'if empty, no process
    IF (Trim(sFile) <> "") THEN
      oCfg = NEW Collection
      'load config file for read info
      FOR EACH sRow IN Split(File.Load("/etc/sysconfig/networking/devices/" & sFile), "\n")
        'if empty, no process
        IF (Trim(sRow) <> "") THEN
          'add name and value into collection
          oCfg.Add(Split(sRow, "=")[1], Split(sRow, "=")[0])
        END IF
      NEXT
      IF (File.Exist("/etc/sysconfig/networking/profiles/default/" & sFile)) THEN
        FOR EACH sRow IN Split(File.Load("/etc/sysconfig/networking/profiles/default/" & sFile), "\n")
          'if empty, no process
          IF (Trim(sRow) <> "") THEN
            'add name and value into collection
            oCfg.Add(Split(sRow, "=")[1], "OUT_" & Split(sRow, "=")[0])
          END IF
        NEXT
      END IF
      'add collection values into array for device
      oArr.Add(oCfg, Split(sFile, "-")[1])
    END IF
  NEXT
  RETURN oArr
END

PRIVATE sub test_getNetConfig()
  DIM a AS Collection = GetNetConfig()
  DIM b AS Collection
  FOR EACH a
    PRINT
    PRINT "Device: " & a.Key
    b = a[a.Key]
    FOR EACH b
      PRINT b.Key & " = " & b[b.Key]
    NEXT
  NEXT
END


La funzione "test_*" ti stampa il contenuto dell'array ritornato da GetNetConfig; tieni conto che è da verificare se le directory indicate nella funzione corrispondono a quelle della tua distro, in caso contrario sono da modificare.
La prima parte della funzione carica la configurazione di rete locale (localhost), mentre la seconda la parte relativa alla configurazione verso la rete esterna, che ho prefissato con la stringa "OUT_".