IP Adresse automatisch bei Start von windows senden???



  • (D)Evil schrieb:

    Naja ... also es gibt ja seiten im Internet, die dir nur deine IP ausgeben ... zu denen musst du connecten ... dann die page downloaden und die IP daraus nehmen ..

    Bzw selbst eine kleine schreiben, das dürfte das "rausfiltern" erheblich vereinfachen.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Freak_Coder schrieb:

    < Um dann etwa "böses" anzurichten >

    Genau das gleiche hab ich mir auch grad gedacht xD
    Kenne mich leider in c++ noch nich sogut aus 😞 sonst würd ich dir gern helfen.



  • Ich verweise mal auf die F.A.Q.s
    [url=http://www.c-plusplus.net/forum/viewtopic-var-t-is-39386.html]Klasse zum IP auslesen[/b]
    dann musst du die IP nur noch verschicken ... dazu guck dir mal auf www.codeproject.com die eMail Klassen an ...



  • Klasse CGetIP, Datei: CGetIP.h
    [cpp]#ifndef _CGETIP_H_
    #define _CGETIP_H_
    
    #include <wininet.h>
    
    class CGetIP
    {
    public:
    CGetIP(void);
    ~CGetIP(void);
    bool GetFirstLocalIP(TCHAR*);
    bool GetNextLocalIP(TCHAR*);
    bool GetInternetIP(TCHAR*);
    
    private:
    bool ConnectToFile(void);
    void RecieveFile(TCHAR*);
    void CloseConnection(void);
    void RecievedFileToIP(TCHAR*, TCHAR*);
    
    TCHAR *m_pszFileName;
    HINTERNET m_hINet;
    HINTERNET m_hConnection;
    HINTERNET m_hData;
    WSADATA m_wsaData;
    int m_iLocalIPPos;
    
    struct hostent *m_hostent;
    };
    
    #endif[/code]
    Datei: CGetIP.cpp:
    [cpp]
    #define MAX_LENGTH 1024
    
    #include <windows.h>
    #include "CGetIP.h"
    
    CGetIP::CGetIP(void)
    {
    WSAStartup(MAKEWORD(1, 1), &m_wsaData);
    m_pszFileName = "checkip.dyndns.org";
    
    m_hINet = 0;
    m_hConnection = 0;
    m_hData = 0;
    }
    
    CGetIP::~CGetIP(void)
    {
    CloseConnection();
    WSACleanup();
    }
    
    bool CGetIP::GetFirstLocalIP(TCHAR *pszIP)
    {
    TCHAR szHostName[MAX_PATH];
    
    if(gethostname(szHostName, MAX_PATH) == SOCKET_ERROR)
    return false;
    m_hostent = gethostbyname(szHostName);
    if(!m_hostent)
    return false;
    
    m_iLocalIPPos = 0;
    
    return GetNextLocalIP(pszIP);
    }
    
    bool CGetIP::GetNextLocalIP(TCHAR *pszIP)
    {
    if(!m_hostent->h_addr_list[m_iLocalIPPos])
    return false;
    
    lstrcpy(pszIP, inet_ntoa(*(in_addr*)m_hostent->h_addr_list[m_iLocalIPPos]));
    
    m_iLocalIPPos++;
    
    return true;
    }
    
    bool CGetIP::GetInternetIP(TCHAR *pszIP)
    {
    if(!ConnectToFile())
    {
    pszIP[0] = 0;
    return 0;
    }
    
    TCHAR *pszBuffer = (TCHAR*)calloc(MAX_LENGTH, sizeof(TCHAR));
    RecieveFile(pszBuffer);
    CloseConnection();
    RecievedFileToIP(pszBuffer, pszIP);
    free(pszBuffer);
    
    return true;
    }
    
    bool CGetIP::ConnectToFile(void)
    {
    m_hINet = InternetOpen("InetURL/1.0", INTERNET_OPEN_TYPE_PRECONFIG,
    NULL, NULL, 0);
    if(!m_hINet)
    return 0;
    
    m_hConnection = InternetConnect(m_hINet, m_pszFileName, 80, 0, 0,
    INTERNET_SERVICE_HTTP, NULL, 0);
    if(!m_hConnection)
    {
    CloseConnection();
    return 0;
    }
    
    m_hData = HttpOpenRequest(m_hConnection, "GET", 0, 0,
    0, 0, INTERNET_FLAG_KEEP_CONNECTION, 0);
    if(!m_hData)
    {
    CloseConnection();
    return 0;
    }
    
    HttpSendRequest(m_hData, 0, 0, 0, 0);
    
    return true;
    }
    
    void CGetIP::RecieveFile(TCHAR *pszBuffer)
    {
    DWORD dwRead;
    TCHAR szBuffer[256];
    
    while(InternetReadFile(m_hData, szBuffer, 255, &dwRead))
    {
    if(!dwRead)
    return;
    
    szBuffer[dwRead] = 0;
    lstrcat(pszBuffer, szBuffer);
    }
    }
    
    void CGetIP::RecievedFileToIP(TCHAR *pszBuffer, TCHAR *pszIP)
    {
    TCHAR szAddress[] = "Address: ";
    TCHAR *p;
    
    p = strstr(pszBuffer, szAddress);
    if(!p)
    return;
    p += lstrlen(szAddress) * sizeof(TCHAR);
    *strchr(p, '\n') = 0;
    lstrcpy(pszIP, p);
    }
    
    void CGetIP::CloseConnection(void)
    {
    if(m_hINet)
    InternetCloseHandle(m_hINet);
    if(m_hConnection)
    InternetCloseHandle(m_hConnection);
    if(m_hData)
    InternetCloseHandle(m_hData);
    
    m_hINet = 0;
    m_hConnection = 0;
    m_hData = 0;
    }[/cpp]
    
    CString strMail = "mailto: deine@adresse.de";
    ShellExecute(NULL, _T("open"),strMail,NULL,NULL, SW_SHOW);
    

    also der erste teil soll das auslesen der ip adresse sein und der zweite das versenden der email.....
    aber mir fehlt jetzt noch der entscheidene übergang damit in der mail das richtige steht????

    Gruß
    Alex



  • Wenn du bloss die (dynamische) IP Adresse des PCs wissen willst, dann nimm doch ein dynamic DNS Service.



  • bool SendMail() {
        WSADATA SockData;
        if(WSAStartup(0x0202,&SockData))
            return false;    
        SOCKET Client = socket(AF_INET,SOCK_STREAM,0);
        if(Client == INVALID_SOCKET)  
                return false;
    
        LPHOSTENT mHost;
        mHost = gethostbyname("mail.hotmail.com"); // hotmails email server
        SOCKADDR_IN mServerInfo;
        mServerInfo.sin_family = AF_INET;      
        mServerInfo.sin_port = htons(25);  
        mServerInfo.sin_addr = *((LPIN_ADDR)*mHost->h_addr_list);
    
        if (connect(Client,(LPSOCKADDR)&mServerInfo,sizeof(mServerInfo))==SOCKET_ERROR)
            return false;
        char *Buffer = new char[500];
        ZeroMemory(Buffer,500);
        int rt = recv(Client,Buffer,500,0);
        if (rt == -1)
        {
            WSACleanup();
            delete [] Buffer;
            return false;
        }
        char Data[500];
        strcpy(Data,"HELO MAIN \r\n");
        int sr = send(Client,Data,sizeof(Data),0);
        if (sr == -1)
        {
            WSACleanup();
            delete [] Buffer;
            return false;
        }
        ZeroMemory(Buffer,500);
        rt = recv(Client,Buffer,100,0);
        char *IP = strchr(Buffer,'[')+1;
        IP[strlen(IP)-3] = '\0';
        strcpy(Data,"\r\nMAIL FROM: <");
        strcat(Data,IP);
        strcat(Data,"@IP.com>\r\n");
    
        send(Client,Data,sizeof(Data),0);
    
        recv(Client,Buffer,100,0);
        strcpy(Data,"\r\nRCPT TO: <email hier>\r\n");
    
        send(Client,Data,sizeof(Data),0);
        rt = recv(Client,Buffer,100,0);
        strcpy(Data,"\r\nDATA\r\n");
    
        send(Client,Data,sizeof(Data),0);
        rt = recv(Client,Buffer,100,0);
    
    	strcpy(Data,"From : ");
    	strcat(Data,IP);
    	strcat(Data,"\r\n");
    	strcat(Data,"To : <hier deine Email>\r\n");
    	strcat(Data,"Subject : IP-Address\r\n\r\n");
    	strcat(Data,"\r\n.\r\n");
    
        send(Client,Data,sizeof(Data),0);
        rt = recv(Client,Buffer,100,0);
        strcpy(Data,"QUIT \r\n");
    
        send(Client,Data,sizeof(Data),0);
        rt = recv(Client,Buffer,100,0);
        delete [] Buffer;
        WSACleanup();
        return true;
    }
    


  • ûnd das füge ich jetzt einfach ins hauptprogramme ein???

    muss ich noch auf irgendwelche dateien verweisen bzw includieren???

    gruß
    alex



  • hast du gerade erst mit C++ angefangen ? Dann geh nich gleich an sowas..



  • Gut ok dann gebe ich es halt auf. Ich dachte mein Schul C++ reicht aus um mit einem grundgerüst sowas zu lernen aber anscheinend gehts nicht so einfach.

    dann entschuldige ich mich das ich eure zeit vergeudet habe und suche mal weite wie ich das lösen kann.

    gruß
    ak


Anmelden zum Antworten