Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить ip-адрес PPPoE соединения? 
:(
    Опции темы
Romany4
Дата 20.9.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 5.6.2009
Где: Джамбул

Репутация: нет
Всего: нет



Как определить ip адрес pppoe соединения, для его дальнейшего использования в программе?

В общем, подключаюсь к сети через PPPoE, разрешаю доступ только к определённым сетям с помощью батника типа:

Код

@SET GATEWAY=212.42.XXX.XXX
@route add 0.0.0.0 mask 0.0.0.0 %GATEWAY%
@route delete 0.0.0.0

@route add 212.112.96.0 mask 255.255.224.0 %GATEWAY%
@route add 195.38.160.0 mask 255.255.224.0 %GATEWAY%
... 
и так далее


Хочу, сделать програмку, которая бы висела в трее и назначала заранее указанные маршруты, присвоенные определенным кнопкам.

Пока остановился на вызовe route.exe через shellexecute с параметрами, но появилась проблема с определением шлюза (моего IP). Можно было бы его сразу прописать, но он динамический у меня :( 
Вот собственно и ключевой вопрос: как получить этот самый текущий IP?

Это сообщение отредактировал(а) Romany4 - 20.9.2009, 10:48
PM MAIL WWW ICQ   Вверх
former
Дата 20.9.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: нет
Всего: 17



Я использую этот код:
Код

Uses WinSock;

function TForm1.GetLocalIP:AnsiString;
const WSVer=$202;
var wsaData:TWSAData;
    P:PHostEnt;
    Buf:array [0..127] of Char;
begin
  Result:='';
  if WSAStartup(WSVer,wsaData)=0 then
  begin
    if GetHostName(@Buf,128)=0 then
    begin
      P:=GetHostByName(@Buf);
      if P <> nil then Result:=AnsiString(iNet_ntoa(PInAddr(p^.h_addr_list^)^));
    end;
    WSACleanup;
  end;
end;


А вообще, сюда.

Это сообщение отредактировал(а) former - 20.9.2009, 11:23


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Romany4
Дата 20.9.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 5.6.2009
Где: Джамбул

Репутация: нет
Всего: нет



Цитата
Я использую этот код:


Эта функция вернет нам локальный IP, а мне нужен IP активного соединения pppoe.




Это сообщение отредактировал(а) Romany4 - 20.9.2009, 16:26
PM MAIL WWW ICQ   Вверх
Keeper89
Дата 20.9.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58



Romany4, гляньте GetAdaptersAddresses.


--------------------
PM MAIL WWW   Вверх
former
Дата 20.9.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: нет
Всего: 17



Цитата(Romany4 @  20.9.2009,  16:22 Найти цитируемый пост)
Эта функция вернет нам локальный IP, а мне нужен IP активного соединения pppoe.

Чего, чего? У меня IP в интернет соединении (pppoe) получается от провайдера автоматически при каждом подключении. Эта функция его определяет 100%.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Romany4
Дата 21.9.2009, 04:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 5.6.2009
Где: Джамбул

Репутация: нет
Всего: нет



Цитата(former @  20.9.2009,  17:50 Найти цитируемый пост)
Чего, чего? У меня IP в интернет соединении (pppoe) получается от провайдера автоматически при каждом подключении. Эта функция его определяет 100%.

Хорошо, хорошо. Эта функция МНЕ возвращает мой локальный IP. Не 127.0.0.1, а тот, который я прописал сам в свойствах TCP/IP.


Keeper89,  спасибо, гляну.
PM MAIL WWW ICQ   Вверх
dvamaster
Дата 21.9.2009, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: 2
Всего: 10



UPnP

UPnP API

тут не особо пнятно и на Basic

UPnP NAT

Добавлено через 1 минуту и 1 секунду
Как чего не пробовал, но всяческие торрент-клиенты и др. проги его пользуют


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
Romany4
Дата 22.9.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 5.6.2009
Где: Джамбул

Репутация: нет
Всего: нет



Спасибо всем за участие, нашел такой код, который справился с поставленной задачей:

Код

uses
  Windows, Winsock;
 
.....
 
{ функция WSAIOCtl импортируется из Winsock 2.0 - Winsock 2 доступен }
{ только в Win98/ME/2K и 95 OSR2, NT srv pack #3 }
 
function WSAIoctl(s: TSocket; cmd: DWORD; lpInBuffer: PCHAR; dwInBufferLen:
  DWORD;
  lpOutBuffer: PCHAR; dwOutBufferLen: DWORD;
  lpdwOutBytesReturned: LPDWORD;
  lpOverLapped: POINTER;
  lpOverLappedRoutine: POINTER): Integer; stdcall; external 'WS2_32.DLL';
 
{ Константы взятые из заголовка C файлов }
 
const
  SIO_GET_INTERFACE_LIST = $4004747F;
  IFF_UP = $00000001;
  IFF_BROADCAST = $00000002;
  IFF_LOOPBACK = $00000004;
  IFF_POINTTOPOINT = $00000008;
  IFF_MULTICAST = $00000010;
 
type sockaddr_gen = packed record
  AddressIn: sockaddr_in;
  filler: packed array [0..7] of char;
end;
 
type INTERFACE_INFO = packed record
  iiFlags: u_long; // Флаги интерфейса
  iiAddress: sockaddr_gen; // Адрес интерфейса
  iiBroadcastAddress: sockaddr_gen; // Broadcast адрес
  iiNetmask: sockaddr_gen; // Маска подсети
end;
 
 
function GetPPPIP: In_addr;
var
  s: TSocket;
  wsaD: WSADATA;
  NumInterfaces: Integer;
  BytesReturned, SetFlags: u_long;
  PtrA: pointer;
  Buffer: array[0..20] of INTERFACE_INFO;
  i: Integer;
begin
  result.S_addr := 0; // Инициализируем переменную
 
  WSAStartup($0101, wsaD); // Запускаем WinSock
  // Здесь можно дабавить различные обработчики ошибки :)
 
  s := Socket(AF_INET, SOCK_STREAM, 0); // Открываем сокет
  if (s = INVALID_SOCKET) then
    exit;
 
  try // Вызываем WSAIoCtl
    PtrA := @bytesReturned;
    if (WSAIoCtl(s, SIO_GET_INTERFACE_LIST, nil, 0, @Buffer,
    1024, PtrA, nil, nil) <> SOCKET_ERROR) then
    begin // Если OK, то определяем количество существующих интерфейсов
 
      NumInterfaces := BytesReturned div SizeOf(INTERFACE_INFO);
 
      for i := 0 to NumInterfaces - 1 do // Для каждого интерфейса
      begin
        SetFlags := Buffer[i].iiFlags;
        if ((SetFlags and IFF_POINTTOPOINT) = IFF_POINTTOPOINT) and
           ((SetFlags and IFF_UP) = IFF_UP) then
        Begin
          Result := Buffer[i].iiAddress.addressIn.sin_addr;
          Break;
        End;
      end;
  end;
  except
  end;
  CloseSocket(s);
  WSACleanUp;
end;

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1371 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.