Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2014, 23:32   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Не верно выдает ip-адрес

Здравствуйте, написал программу, которая узнает ip адрес и показывает его, но почему-то она не верно работает

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  IdIPWatch1.Active:=true;
ShowMessage(IdIPWatch1.LocalIP);
Application.Terminate;
end;
У меня стоит роутер, и видимо роутер создает динамические ip-адреса, а вот разные сайты, которые узнают ip-адреса показывают одно и то же, возможно ли используя один из этих сайтов узнать настоящий ip-адрес, а не тот, что генерирует роутер.

Или что мне стоит изменить в коде для проверки точного IPшника?

То есть внешнего ip-адреса.
from dark to light)

Последний раз редактировалось Алексей_2012; 26.07.2014 в 23:37.
Алексей_2012 вне форума Ответить с цитированием
Старый 27.07.2014, 00:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Врядли... До того сайта доходит совсем другая инфа. Ты ведь за NAT-ом спрятался, твой роутер IP адреса в пакетах переписывает на актуальные для его канала. До роутера у тебя IP один, его и выдает программа. Если бы программа была вне роутера (на каком нить сервере, через который проходит твой запрос), она бы выдавала другой IP.
А что за проблема? Запрашивай свой IP у этих сайтов. IDHTTP поможет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2014, 00:28   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
function GetHTML(const AURL: string): string;
var
  sHead, sHost, sPage: string;
  x, xCnt, xCntTotal: integer;
  sock: TClientSocket;
  ws: TWinSocketStream;
  ss: TStringStream;
  buff: array[0..4095] of char;
const
  CrLf = #13#10;
begin
  Result := '';

  sHost := AURL;
  x := Pos('//', sHost);
  if x > 0 then
    System.Delete(sHost, 1, x + 1);
  x := Pos('/', sHost);
  if x > 0 then
  begin
    sPage := Copy(sHost, x, Length(sHost));
    System.Delete(sHost, x, Length(sHost));
  end
  else
  begin
    sPage := '/';
  end;

  sock := TClientSocket.Create(nil);
  try
    try
      sock.ClientType := ctBlocking;
      sock.Port := 80;
      sock.Host := sHost;
      sock.Open;
      ws := TWinSocketStream.Create(sock.Socket, 20000);
      ss := TStringStream.Create('');
      try
        sHead := 'GET ' + sPage + ' HTTP/1.0 ' + CrLf +
          'Host: ' + sHost + CrLf + CrLf;
        StrPCopy(buff, sHead);

        ws.Write(buff, Length(sHead) + 1);
        ws.Position := 0;

        FillChar(buff, SizeOf(buff), 0);
        repeat
          xCnt := ws.Read(buff, SizeOf(buff));
          xCntTotal := xCntTotal + xCnt;
          ss.Write(buff[0], xCnt);
        until xCnt = 0;
        Result := ss.DataString;
      finally
        ws.Free;
        ss.Free;
      end;
    except
    end;
  finally
    sock.Free;
  end;
end;




procedure TForm1.Button1Click(Sender: TObject);
var
  ip: string;
  IdMessage1:TIdMessage;
begin
  form1.Position := poScreenCenter;
  IdMessage1:=TIdMessage.Create(self);
  with TStringlist.Create do
  try
    Text := GetHTML('http://www.softmaker.kz/get_an_external_ip_address.php');
    Add('Файл отправлен в: ' + timetostr(time));
    if Count > 0 then ip := Strings[Count - 1];
    idSMTP1.Host := 'smtp.yandex.ru';
    idSMTP1.Port := 25;
    IdMessage1.Recipients.EMailAddresses := 'ip-man2013@yandex.ru'; //мое мыло
    IdMessage1.Body.Text := text;
    idSMTP1.Connect();
    if idSMTP1.Connected then
      idSMTP1.Send(IdMessage1);
    idSMTP1.Disconnect();
    showmessage('Отправлено'); // до сюда не доходит.
  finally
    Free;
    FreeAndNil(IdMessage1);
  end;
 
end;
Спасибо за ответ, но я сам разобрался, а мне нужно сделать следующее: результат функции отправить автоматически на указанный в ПО е-мейл.
from dark to light)

Последний раз редактировалось Алексей_2012; 27.07.2014 в 00:40.
Алексей_2012 вне форума Ответить с цитированием
Старый 27.07.2014, 17:24   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  ip: string;
  IdMessage1: TIdMessage;
begin
  form1.Position := poScreenCenter;
  IdMessage1 := TIdMessage.Create(self);
  with TStringlist.Create do
  try
    Text := GetHTML('http://www.softmaker.kz/get_an_external_ip_address.php');
    Add('Файл отправлен в: ' + timetostr(time));
    if Count > 0 then ip := Strings[Count - 1];
    IdSMTP1.Host := 'smtp.yandex.ru'; // адрес почтового сервера
    IdSMTP1.Port := 25; // порт по которому будет осуществляться подключение
//
    IdSMTP1.AuthenticationType := atnone;
      IdMessage1.Recipients.EMailAddresses := 'ip-man2013@yandex.ru'; // мое мыло
    IdMessage1.Subject := 'HeLo!!'; // тема письма
    IdMessage1.Body.Text := Text; // передача данных из TstringList в динамически созданный компонент IdMessage, для последующей отправки
      IdSMTP1.Connect; // соединение с почтовым сервером
    IdSMTP1.Send(IdMessage1);
    ShowMessage('Письмо отправлено!');
  finally
    Free;
    FreeAndNil(IdMessage1);
  end;
end;
Почему-то виснет на этой строчке: idSMTP1.Connect;
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 27.07.2014, 17:29   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты не через прокси сидишь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2014, 18:29   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Честно говоря не знаю откуда я сижу, обычный ПК, цель самому себе на почту отправить IP адрес, а так же отзыв из компонента Tmemo, но с этим проще, просто в цикле методом адд добавлять построчно текст из мемо в список и потом этот список отослать себе на почту. ПОчему все же зависает?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 27.07.2014, 19:05   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Зависает именно на коннекте?
попробуй просто в консоли пропинговать smtp.yandex.ru. Получишь IP адрес яндекса?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2014, 19:23   #8
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  ip: string;
  IdMessage1:TIdMessage;
begin
  form1.Position := poScreenCenter;
  IdMessage1:=TIdMessage.Create(self);
  with TStringlist.Create do
  try

    Text :=GetHTML('http://www.softmaker.kz/get_an_external_ip_address.php'); //это то, что я отправлять должен на свою почту
    if Count > 0 then ip := Strings[Count - 1]; // выделение одного ip-адреса 
    Add('Файл отправлен в: ' + timetostr(time));


// далее темный лес для меня, пытался разбираться, использовал несколько вариантов
//но все равно зависает
    idSMTP1.Host := 'smtp.yandex.ru';
    idSMTP1.Port := 25;
    IdMessage1.Recipients.EMailAddresses := 'ip-man2013@yandex.ru'; //мое мыло
    IdMessage1.Body.Text := text; // вроде тут текст tstringlist и отправляется на почту
    idSMTP1.Connect();  // далее все виснет
    if idSMTP1.Connected then
      idSMTP1.Send(IdMessage1);
    idSMTP1.Disconnect();
    showmessage('Отправлено'); // до сюда не доходит.
  finally
    Free;
    FreeAndNil(IdMessage1);
  end; 
end;
Не знаю, может быть я чего-то недопонял, но у меня функция исполняется полностью, затем указывается время, во сколько эта функция была исполнена

Код:
 Text :=GetHTML('http://www.softmaker.kz/get_an_external_ip_address.php');
    Add('Файл отправлен в: ' + timetostr(time));
Далее этот список я пытаюсь отправить на свою почту, а зависает именно на конекте,


IP-определяется, но не высылается в общем, уже всю голову сломал
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 27.07.2014, 20:29   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а зависает именно на конекте,
Пинговал яндекс?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2014, 00:11   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Это вроде в командной строке делается, кто-нибудь сможет подробнее объяснить почему мой код не работает, или эта нужно создавать тему в другом разделе?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets dmitrii6120 Помощь студентам 6 14.11.2011 20:10
Не верно считает T.A.T.A.R.I.N Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 11.03.2011 16:41
верно или не верно????? Polusha Помощь студентам 1 19.04.2010 20:16
[B]Народ! Проверки мне верно или не верно? мне надо завтра сдавать[/B] Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 6 04.06.2008 14:34
как узнать ip адрес зная mac адрес Roman Работа с сетью в Delphi 9 25.06.2007 12:39