Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как получить свой внешний IP-адрес?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
Rocky
Всем привет! Как это можно сделать? Я могу только получить ip, заданный для локальной сети... А как получить свой реальный интернетный ip?

Спасибо!
dim_san
QNetworkInterface::allAddresses();
Rocky
неа, возвращает внутренний локальный - 192.168.0.2 (ну и loopback)... а нужно получить динамический адрес, который присваивается провайдером, при выходе в инет ((
dim_san
а как подключение то организовано?
Rocky
есть мой комп, он подключен через комуникатор к роутеру который в свою очередь смотрит на свич провайдера, т.е. в интеренет по сути... Т.е. грубо говоря есть роутер, который скрывает небольшую локальную сеть...

Я пока только тестами занимаюсь.. Просто хочу в программу (по работе) встроить модуль, который бы слал мне на почту ip-адрес машины, с которой запущен... Нужно не для хака, а чтобы удаленно просматривать логи программы...
DmP
Rocky, нужно что бы кто то из вне сказал какой IP. Типа сделать запрос на какой сайт, он и скажет какой у вас IP. Пример сайта - 2ip.ru.
Rocky
ахха, спасибо как раз на нем сейчас сижу )))

Вообще думаю средствами QT никак не узнать... да и QT тут вообще не причем... Осталось разобраться можно ли с сайтом типа 2ip общаться как бы в командной строке, т.е. чтобы пользователь ничего не видел... пойду искать куда сунул книгу по php, может там что нарою... :)
Rocky
О! Я уже сделал чтобы программа посылала письмо на ящик... щас посмотрел шапку письма, и там содержится тот самый адрес, с которого это письмо было отпралено:
Цитата
Received: from localhost (unknown [85.249.76.72]) (Authenticated sender:.....

Осталось разобраться какой запрос нужно послать почтовому серверу, чтобы он ответил какой у меня адрес. ))
grio
Цитата(Rocky @ 19.11.2009, 20:42) *
О! Я уже сделал чтобы программа посылала письмо на ящик... щас посмотрел шапку письма, и там содержится тот самый адрес, с которого это письмо было отпралено:
Цитата
Received: from localhost (unknown [85.249.76.72]) (Authenticated sender:.....

Осталось разобраться какой запрос нужно послать почтовому серверу, чтобы он ответил какой у меня адрес. ))


просто запроси через QHttp мой php-скрипт: www.grio.ru/myip.php

Rocky
Хм.... что не так делаю, не получается ((
{
...
    m_pHttp = new QHttp();
    QDialog::connect(m_pHttp, SIGNAL(done(bool)), this, SLOT(OnReadyRead()));
    m_pHttp->setHost("www.grio.ru");
    m_pHttp->get(QUrl::toPercentEncoding("/myip.php"));
...
}

void CDifferentSettingsDialog::OnReadyRead()
{
    QMessageBox::information(this, m_pMessage->GetMessage(eHeader), m_pHttp->readAll());
}

QMessageBox выдает сообщение: "ошибка 404 и т.д." :(
grio
Цитата
QUrl("www.grio.ru/myip.php").host();
QUrl("www.grio.ru/myip.php").path();

ну как то так...
Rocky
гыыы
Есть. Надо так:
m_pHttp->get("/myip.php");

Всем спасибо ))
Терь осталось на сайт фирмы написать такой вот скриптик и все :)
Litkevich Yuriy
Цитата(Rocky @ 20.11.2009, 0:41) *
Терь осталось на сайт фирмы написать такой вот скриптик и все
а может у IANA есть стандартный сервис?

наподобие http://example.com/
Rocky
Посмотрю, спасибо. Щас попробую еще таким же образом с 2ip.ru вытянуть инфу... Интересно :)
Rocky
Вобщем, если кому нужно будет:
CDifferentSettingsDialog::CDifferentSettingsDialog(...)
{
...
    m_pHttp = new QHttp();
    QDialog::connect(m_pHttp, SIGNAL(done(bool)), this, SLOT(OnReadyRead()));
    m_pHttp->setHost("2ip.ru");
    m_pHttp->get("/index.php");
...
}
void CDifferentSettingsDialog::OnReadyRead()
{
    m_sCurrentDynIP = "";

    const QString sText = m_pHttp->readAll();
    const QRegExp oRegExp("((1{0,1}[0-9]{0,2}|2[0-4]{1,1}[0-9]{1,1}|25[0-5]{1,1})\\.){3,3}(1{0,1}[0-9]{0,2}|2[0-4]{1,1}[0-9]{1,1}|25[0-5]{1,1})");
    
    const int n = sText.indexOf(oRegExp);
    if (n == -1) return;

    m_sCurrentDynIP = sText.mid(n, 15);        //255.255.255.255
    const int nLength = m_sCurrentDynIP.length();
    for (int i = 0; i < nLength; ++i)
    {
        const QChar sSymbol = m_sCurrentDynIP.at(i);
        if (sSymbol.isDigit() || sSymbol == '.') continue;
        m_sCurrentDynIP.replace(i, 1, " ");
    }

    m_sCurrentDynIP = m_sCurrentDynIP.trimmed();
}
bigory
m_sCurrentDynIP что за переменная?
Как мне ее передать в Label?
Алексей1153
bigory, строка, скорее всего (QString)
kwisp
Rocky,
мне вот этот кусок не понятен ((
Цитата(Rocky @ 19.11.2009, 23:43) *
m_sCurrentDynIP = sText.mid(n, 15);        //255.255.255.255     
const int nLength = m_sCurrentDynIP.length();    
for (int i = 0; i < nLength; ++i)    
{        
const QChar sSymbol = m_sCurrentDynIP.at(i);        
if (sSymbol.isDigit() || sSymbol == '.') continue;        
m_sCurrentDynIP.replace(i, 1, " ");    
}    
m_sCurrentDynIP = m_sCurrentDynIP.trimmed();


m_sCurrentDynIP = sText.mid(n, 15);        //255.255.255.255     
const int nLength = m_sCurrentDynIP.length();

разве тут не очевидно, что nLength == 15 ?

назначение цикла вообще не пойму.

П.С.
ну и oRegExp не уж то по короче сделать никак?
Sokoloff
Цитата(Rocky @ 19.11.2009, 20:47) *
есть мой комп, он подключен через комуникатор к роутеру который в свою очередь смотрит на свич провайдера, т.е. в интеренет по сути... Т.е. грубо говоря есть роутер, который скрывает небольшую локальную сеть...

Я пока только тестами занимаюсь.. Просто хочу в программу (по работе) встроить модуль, который бы слал мне на почту ip-адрес машины, с которой запущен... Нужно не для хака, а чтобы удаленно просматривать логи программы...

Может тебе нужен DynDNS или его аналоги?
А как планируешь проскочить через NAT, порты пробросишь?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.