Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 23 su 23

Discussione: Ricavare ip

  1. #21
    Originariamente inviato da ale500
    se fai ipconfig/all esiste una voce con scritto:

    Indirizzo IP...xxx.xxx.xxx.xxx

    be quello ti viene restituito se sei connesso da localIP


    Direttamente dall'MSDN:


    Proprietà LocalIP


    Restituisce l'indirizzo IP del computer locale in formato di stringa puntato (xxx.xxx.xxx.xxx). Di sola lettura e non disponibile in fase di progettazione.

    Sintassi

    oggetto.LocalIP

    Il segnaposto oggetto rappresenta un'espressione oggetto che definisce un oggetto dell'elenco "Si applica a".

    Tipo di dati

    String

    Guarda una cosa è certa:

    Se rimaniamo legati alla filosofia originaria di VB hai perfettamente ragione, ma se poco poco vuoi entrare in una programmazione "evoluta" (per quanto sia possibile con VB) beh il tuo discorso cade come una pera matura.

    Forse è meglio crearsi un proprio oggetto (classe) che faccia le operazione che più ci servono e come ci servono che non adeguarmi a quello già esistente.

    Io la penso così.
    Il dubbio non è piacevole, ma la certezza è ridicola. Solo gli imbecilli son sicuri di ciò che dicono.

  2. #22
    certo che rempire 2 pagine di post per una omanda simile...
    cmq... l' Ip del winosck corrisponde all' ip connesso, se non è connesso ovviamente restituisce l' ip "127.0.0.1" standard.

    Per quanto riguarda il winsock, non credo sia bello usarlo per una semplice istruzione, il file winsock.ocx occupa un bel po di spazio, e bisognerebbe allegarlo al progetto finale, kb inutili per l' uso che se ne fà.

    Credo che anche se sono un po più difficili e chiedono qualche linea di più, è meglio usare le API!
    jabjoint

  3. #23
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Io dico che ha ragione xegallo!!!
    Il controllo winsock restituisce l'ip su internet solo se no si possiede una sk di rete!!!! Se c'è la sk di rete winsock restituisce l'ip locale (es: 192.168.0.1).
    Ne sono certo perchè l'ho testato sulla mia pelle... avevo fatto un prog prima di comprare una sk di rete... e funzionava tutto prefettamente.... appena misi la sk niente... non andava + bene (mi serviva l'ip esterno).
    Allora ho usato questo
    codice:
    Attribute VB_Name = "GetIP"
    'Tested on: Windows98 With a Dialup Connection.
    'Let me know If it works on cable modems and such.
    Public Const WS_VERSION_REQD = &H101
    Public Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&
    Public Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&
    Public Const MIN_SOCKETS_REQD = 1
    Public Const SOCKET_ERROR = -1
    Public Const WSADescription_Len = 256
    Public Const WSASYS_Status_Len = 128
    Public Type HOSTENT
        hName As Long
        hAliases As Long
        hAddrType As Integer
        hLength As Integer
        hAddrList As Long
    End Type
    Public Type WSADATA
        wversion As Integer
        wHighVersion As Integer
        szDescription(0 To WSADescription_Len) As Byte
        szSystemStatus(0 To WSASYS_Status_Len) As Byte
        iMaxSockets As Integer
        iMaxUdpDg As Integer
        lpszVendorInfo As Long
    End Type
    Public Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
    Public Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _
        wVersionRequired&, lpWSAData As WSADATA) As Long
    Public Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
    Public Declare Function gethostname Lib "WSOCK32.DLL" (ByVal hostname$, _
        ByVal HostLen As Long) As Long
    Public Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal _
        hostname$) As Long
    Public Declare Sub RtlMoveMemory Lib "kernel32" (hpvDest As Any, ByVal _
        hpvSource&, ByVal cbCopy&)
    Function hibyte(ByVal wParam As Integer)
        hibyte = wParam \ &H100 And &HFF&
    End Function
    
    Function lobyte(ByVal wParam As Integer)
        lobyte = wParam And &HFF&
    End Function
    
    Sub SocketsInitialize()
        Dim WSAD As WSADATA
        Dim iReturn As Integer
        Dim sLowByte As String, sHighByte As String, sMsg As String
        iReturn = WSAStartup(WS_VERSION_REQD, WSAD)
        If iReturn <> 0 Then
            MsgBox "Winsock.dll is Not responding."
            End
        End If
        If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = _
            WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then
        sHighByte = Trim$(Str$(hibyte(WSAD.wversion)))
        sLowByte = Trim$(Str$(lobyte(WSAD.wversion)))
        sMsg = "Windows Sockets version " & sLowByte & "." & sHighByte
        sMsg = sMsg & " is Not supported by winsock.dll "
        MsgBox sMsg
        End
    End If
    'iMaxSockets is not used in winsock 2. So the following check is only
    'necessary for winsock 1. If winsock 2 is requested,
    'the following check can be skipped.
    If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then
        sMsg = "This application requires a minimum of "
        sMsg = sMsg & Trim$(Str$(MIN_SOCKETS_REQD)) & " supported sockets."
        MsgBox sMsg
        End
    End If
    End Sub
    
    Sub SocketsCleanup()
    Dim lReturn As Long
    lReturn = WSACleanup()
    If lReturn <> 0 Then
        MsgBox "Socket Error " & Trim$(Str$(lReturn)) & " occurred In Cleanup "
        End
    End If
    End Sub
    
    Public Function GetTheIP()
    Dim hostname As String * 256
    Dim hostent_addr As Long
    Dim host As HOSTENT
    Dim hostip_addr As Long
    Dim temp_ip_address() As Byte
    Dim i As Integer
    Dim ip_address As String
    If gethostname(hostname, 256) = SOCKET_ERROR Then
        MsgBox "Windows Sockets Error " & Str(WSAGetLastError())
        Exit Function
    Else
        hostname = Trim$(hostname)
    End If
    hostent_addr = gethostbyname(hostname)
    If hostent_addr = 0 Then
        MsgBox "Winsock.dll is Not responding."
        Exit Function
    End If
    RtlMoveMemory host, hostent_addr, LenB(host)
    RtlMoveMemory hostip_addr, host.hAddrList, 4
    'get all of the IP address if machine ismulti-homed
    Do
    ReDim temp_ip_address(1 To host.hLength)
    ip_address = ""
    RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength
    For i = 1 To host.hLength
        ip_address = ip_address & temp_ip_address(i) & "."
    Next
    ip_address = Mid$(ip_address, 1, Len(ip_address) - 1)
    GetTheIP = ip_address
    host.hAddrList = host.hAddrList + LenB(host.hAddrList)
    RtlMoveMemory hostip_addr, host.hAddrList, 4
    Loop While (hostip_addr <> 0)
    End Function
    Per utilizzarlo richiamare prima la funzione
    codice:
    SocketsInitialize
    e poi
    codice:
    MyIP=GetTheIP
    Questo modulo bas elenca tutti gli IP (quindi tutte le interfacce di rete presenti) e restituisce l'ip esterno!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.