IP Adresse automatisch bei Start von windows senden???



  • Hallo zusammen,

    ich habe eine frage, ist es überghaupt möglich in c++ ein kleines programm zu schreiben, z.b eine kleine win32 anwendung ind der steht das sobald windows gestartet wird die ip adresse des pc´s an eine email adresse gesand wird....

    z.b im autostart die exe datei

    dann sucht sich das programm im netz die ip adresse

    dann mailto einer emailöadresse??

    kann mri dabei einer helfen? ich habe kleine vorahnungen von c++ aus der schule allerdings nicht soooo viel..

    danke schonmal
    gruß
    alex



  • < Um dann etwa "böses" anzurichten >
    Wenn du fast überhaupt keine Ahnung von C++ hast, dann brauchst du dich auch nicht mehr darum zu bemühen, wenn doch dann googeln oder im richtigen Unterforum suchen...



  • Wieso denn etwas böses??? Ich möchte einen Vorgang am pc autmatisiseren, problem ist aber das der pc nicht bei mir steht sondern im büro.

    Wenn ich denn mal ein Programm versuche zu schreiben und das hier rein stelle, kann mir denn dann einer helfen bzw verbesserungvorschläge machen?
    Ich will ja auch nicht das ihr die ganze sache alleine macht, so ist das ja nicht gemeint.

    kann mir evt, wenn einer ein paar links zu dem thema zur hand hätte die hier rein stellen??? wäre super nett.

    gruß
    alex



  • 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 ... geht nat. auch anders aber so ist es rel. einfach. Dann musst du nur noch ne eMail Funktion schreiben usw 😃



  • (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