ip ermitteln aus bestehender TCP/IP-Verbindung



  • hi,

    wie ermittelt man auf server-seite
    die ip nach etablierung einer tcp/ip-verbindung?

    thx & gruß



  • die eigene ip oder die des remote?



  • Wie bzw. womit hast du denn deinen Server programmiert?



  • 1. beides wär praktisch, aber hauptsächlich gehts mir um die remote-ip

    2. geschrieben ist / wird server mit gcc unter linux und der client
    mit vc.net, wobei im moment der server auch noch unter win läuft.



  • getpeername() und getsockname()



  • Ist zwar mit BCB geschrieben, kann man aber leicht nach VC++ portieren

    //---------------------------------------------------------------------------
    // Funktion GetHostIPAddresses schreibt die IP-Adressen des Rechners als
    // Strings im Format xxx.xxx.xxx.xxx in die übergebene TStrings-Instanz.
    // Die Funktion gibt die Anzahl der gefundenen IP-Adressen zurück.
    // Um nur die Anzahl der IP-Adressen zu ermitteln, kann der Funktion
    // im Parameter pslStrings ein NULL-Zeiger übergeben werden.
    //
    // Aufrufbeispiele:
    //
    // /* schreiben aller Rechner-IPs in eine ListBox: */
    // GetHostIPAdresses(ListBox1-Items)
    //
    // /* schreiben aller Rechner-IPs in die TStringList pslStrings: */
    // GetHostIPAdresses(pslStrings);
    //---------------------------------------------------------------------------
    int GetHostIPAddresses(TStrings* pslStrings)
    {
      if(pslStrings) pslStrings -> Clear();
      WSAData stData;
      char caHostName[255];
      hostent* pstHostEntry = NULL;
      in_addr stInetAddress;
      int ilRetVal = 0;
    
      // Winsock initialisieren:
      if(WSAStartup(0x0101, &stData) == 0)
      {
        // Hostnamen bestimmen:
        if(gethostname(caHostName, 255)) return 0;
        // Hostinformationen abrufen:
        pstHostEntry = gethostbyname(caHostName);
        if(pstHostEntry == NULL) return 0;
    
        // IP-Adressen bestimmen:
        for(int ilAddrIndex=0; pstHostEntry->h_addr_list[ilAddrIndex]; ilAddrIndex++)
        {
          stInetAddress.S_un.S_addr =
            *((DWORD*)pstHostEntry->h_addr_list[ilAddrIndex]);
          if(pslStrings != NULL)
            pslStrings -> Add(inet_ntoa(stInetAddress));
          ilRetVal++;
        }
      }
      else return 0;
      WSACleanup();
      return ilRetVal;
    }
    


  • danke.!


Anmelden zum Antworten