Как получить IP-адрес локальной системы? - страница 3

 
Alexsandr San:

по пробовал узнать ip, откуда приходят, в почтовый ящик письма

выдал адреc  ip 40.92.74.11

 





повод занести VK и Microsoft в чёрный-причёрный список, и не только в почте :-) кстати заодно винда должна перестать обновляться на ровном месте..

 
Maxim Kuznetsov:

повод занести VK и Microsoft в чёрный-причёрный список, и не только в почте :-) кстати заодно винда должна перестать обновляться на ровном месте..

я бы давно бы перешёл на эту операционку - только вот, плохо там работать с МТ5

Снимок 

 
jaffer wilson:

Я знаю, что winapi может использоваться для получения адреса, но я не знаю, winapi. Я не знаю использование в MQL5.

Пожалуйста, дайте мне знать, как я могу получить IP-адрес моей системы. Есть что-нибудь, что может помочь?

//+------------------------------------------------------------------+
//|                                                      Test IP.mq5 |
//|                                          (c)2020 Edgar Akhmadeev |
//|                               https://www.mql5.com/en/users/dali |
//+------------------------------------------------------------------+
#property copyright "(c)2020 Edgar Akhmadeev"
#property link      "https://www.mql5.com/en/users/dali"
#property version   "1.00"



//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void 
OnStart() {
        Print(GetIP());
}



string 
GetIP() {
        char post[] = { 0 };
        const string url = "https://whatismyipaddress.com/";
        const string cookie = NULL;
        string headers; 
        uchar result[]; 
        
        
        ResetLastError(); 
        int rc = WebRequest("GET", url, cookie, NULL, 5000, post, 0, result, headers); 
        if (rc == -1) {
                Alert("Include URL to accepted WebRequest list");
                return NULL;
        }

        if (rc != 200) {
                Alert("Web site returns error code");
                return NULL;
        }

        int size = ArraySize(result);
        string out = CharArrayToString(result, 0, size - 1);
        string s = "\"//whatismyipaddress.com/ip/";
        int len = StringLen(s);
        int begin = StringFind(out, s) + len;
        int end = StringFind(out, "\"", begin + 1);
        return StringSubstr(out, begin, end - begin);
}
Сделал на коленке, к красоте не придирайтесь.
 
Edgar Akhmadeev:
Сделал на коленке, к красоте не придирайтесь.
а теперь то же самое для локального который нужен )))
 
TheXpert:
а теперь то же самое для локального который нужен )))

"Как получить IP-адрес локальной системы?" и "Как получить локальный IP-адрес системы?" - это не одно и то же. Problemo de comminicacion, но я понял, что автор хочет внешний IP ("Например, IP-адрес 172.22.22.10", как он написал), а не локальный (192.168.1.5)

Ответит, поймём.

 
Edgar Akhmadeev:

но я понял, что автор хочет внешний IP ("Например, IP-адрес 172.22.22.10", как он написал), а не локальный (192.168.1.5)

Address ranges below are reserved by IANA for private intranets, and not routable to the Internet.

172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12 prefix)
 
TheXpert:

Address ranges below are reserved by IANA for private intranets, and not routable to the Internet.

Ну ок, удалю.

Автор, похоже, обиделся на отсутствие помощи, и ушел. А мы тут без него теребим.

 
Я здесь и наблюдаю за разговорами. Если нужно то я поговорю. В противном случае я не могу ничего сказать.
 
Edgar Akhmadeev:

Ну ок, удалю.

Зачем удалять? пусть будет, может кому-нибудь другому поможет.
 
#property copyright "(c)2020 Edgar Akhmadeev"
#property link      "https://www.mql5.com/en/users/dali"
#property version   "1.00"
// 2020.03.04

// Tested on Win7 x64 only
// Returns first IPv4 address



#define PVOID           ulong
#define size_t          ulong

#define AF_INET         2
#define IPPROTO_TCP     6
#define SOCK_STREAM     1



struct ADDRINFOW {
        int             flags;
        int             family;
        int             socktype;
        int             protocol;
        size_t          addrlen;
        PVOID           name;
        PVOID           addr;
        PVOID           next;
};

union uADDRINFOW {
        ADDRINFOW       v;
        uchar           b[sizeof(ADDRINFOW)];
};



#import "Ws2_32.dll"
        int     gethostname(char&[], int);
        int     GetAddrInfoW(string, string, const ADDRINFOW&, PVOID&);
        void    FreeAddrInfoW(PVOID);
        int     WSAAddressToStringW(PVOID, ushort, PVOID, ushort&[], ushort&);
        int     WSAGetLastError();
#import "msvcrt.dll"
        long    memcpy(uchar&[], uchar&[], int);
        long    memcpy(uchar&[], long, int);
#import



void 
OnStart() {
        Print(GetLocalIP());
}



string 
GetLocalIP() {
        char name[256];
        if (gethostname(name, sizeof(name)) != 0) {
                Print("!gethostname()");
                return NULL;
        }
        
        string host = CharArrayToString(name);
        
        uADDRINFOW addrinfo;
        PVOID result = 0;
        
        ADDRINFOW hints = { 0 };
        hints.family    = AF_INET;
        hints.socktype  = SOCK_STREAM;
        hints.protocol  = IPPROTO_TCP;

        if (GetAddrInfoW(host, NULL, hints, result) != 0) {
                Print("!GetAddrInfoW()");
                return NULL;
        }
        
        memcpy(addrinfo.b, result, sizeof(addrinfo));
        
        ushort buffer[46];
        ushort len = 46;
        if (WSAAddressToStringW(addrinfo.v.addr, (ushort)addrinfo.v.addrlen, NULL, buffer, len) == 0)
                return ShortArrayToString(buffer);
        else {
                Print("!WSAAddressToStringA() #", WSAGetLastError());
                return NULL;
        }
        
        FreeAddrInfoW(result);
        return NULL;
}
Причина обращения: