Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 02.08.2008, 19:48   #1
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию Смена IP локального подключения

Имеется подключение по локальной сети, требуется реализовать смену IP адреса на статический (например на 192.168.0.3).
Предварительно я пингую данный IP на возможность его присутствия - если не найден - то сменить IP. Вопрос как раз и заключается в коде смены IP подключения на заданный - статика. (Программа запускается исключительно локально на машине)
Denager вне форума Ответить с цитированием
Старый 03.08.2008, 01:31   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Вот код, думаю поможет:

Код:
unit Iptools;
interface
uses Windows,Registry,SysUtils, Variants, Classes,Dialogs,ShellApi;
//-----------------------------------------------------
  var
 Registry1: Tregistry;
 Keyslist:  Tstrings;
 P: Pointer;
//Declarations-----------------------------------------
Procedure Set_IP_AND_MASK98(IP,Mask: String);
Procedure Set_IP_AND_MASKXP(IP,Mask: String);
Procedure Set_IP_AND_MASK (IP,Mask: String);
function GetWinVersion: String;

implementation
function GetWinVersion: String;
var
   VersionInfo : TOSVersionInfo;
   OSName      : String;
begin
      VersionInfo.dwOSVersionInfoSize := SizeOf( TOSVersionInfo );

   if Windows.GetVersionEx( VersionInfo ) then
      begin
         with VersionInfo do
         begin
            case dwPlatformId of
               VER_PLATFORM_WIN32s   : OSName := 'Win32s';
               VER_PLATFORM_WIN32_WINDOWS : OSName := 'Windows 95';
               VER_PLATFORM_WIN32_NT      : OSName := 'Windows NT';
            end; // case dwPlatformId
           // Result := OSName + ' Version ' + IntToStr( dwMajorVersion ) + '.' + IntToStr( dwMinorVersion ) +
             //         #13#10' (Build ' + IntToStr( dwBuildNumber ) + ': ' + szCSDVersion + ')';
             Result:= OSName;
         end; // with VersionInfo
      end // if GetVersionEx
   else
      Result := '';
end;

//--------- Procedure for windowsXP -------------------
Procedure Set_IP_AND_MASKXP(IP,Mask: String);
 var
 i,NumDev: integer;
 p: Pchar;
 s: string;
begin
//Initialization----------------------------------------
s:='netsh interface ip set address "Подключение по локальной сети" source=static addr='+IP+' mask='+Mask;
p:=pchar(s);
WinExec( @p[0], sw_show);
beep;
end;
//--------- Procedure for windows98 -------------------
Procedure Set_IP_AND_MASK98(IP,Mask: String);
 var
 i,NumDev: integer;
begin
//Initialization----------------------------------------
Keyslist:=TstringList.Create;
Registry1:=TRegistry.Create;
//Detect net devices------------------------------------
Registry1.RootKey:= hkey_local_machine;
Registry1.OpenKey('System\CurrentControlSet\Services\Class\Net',True);
Registry1.GetKeyNames(Keyslist);
Registry1.CloseKey;
//Detect phisical net device-----------------------------
  For I:=0 to KeysList.Count-1 do
   Begin
Registry1.OpenKey('System\CurrentControlSet\Services\Class\Net\'+KeysList.Strings[i],True);
If Registry1.ValueExists('IOBaseAddress')=True Then NumDev:=I;
Registry1.CloseKey;
   End;
//Open device  & set setings------------------------------
Registry1.OpenKey('System\CurrentControlSet\Services\Class\NetTrans\'+KeysList.Strings[NumDev],True);
Registry1.WriteString('IPAddress',IP);
Registry1.WriteString('IPMask',Mask);
Registry1.CloseKey;
//Deinitialization--------------------------------------
Registry1.Free;
Keyslist.Free;
Beep;
MessageDlg('Все изменения вступят в силу только после перезагрузки.', mtInformation, [mbOk], 0);
end;
Procedure Set_IP_AND_MASK (IP,Mask: String);
var
s: string;
begin
S:=GetWinVersion;
if S='Windows 95' Then Set_IP_AND_MASK98(IP,Mask);
if S='Windows NT' Then Set_IP_AND_MASKXP(IP,Mask);
end;
end.
Terran вне форума Ответить с цитированием
Старый 03.08.2008, 06:38   #3
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

В сторону Netsh интерфейса IP я уже копал, в итоге IP адрес не меняется, хотя синтаксис 1:1, проверял.
По существу, нашел процедуру смены IP, но там необходимо указывать индекс сетевого адаптера, а вот определение его вызвало новую проблему - как реализовать => Может у кого есть код, определения индексов всех сетевых адаптеров, установленныйх в системе
Denager вне форума Ответить с цитированием
Старый 08.06.2010, 06:38   #4
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Вот программка ближе к варианту Terran'а, работает так:
Через заданное количество времени пингует указанный адрес, если не пингуется (4 неудачи подряд), то изменяет IP адрес (по очереди в заданном диапазоне).

Программа смены IP
Исходники

п.с.
конечно тема старая, но вдруг кому-нибудь будет интересно.
Вложения
Тип файла: rar CMEHA_IP.rar (380.3 Кб, 165 просмотров)
Тип файла: rar ucxoDHuKu_CMEHA_IP.rar (46.9 Кб, 146 просмотров)

Последний раз редактировалось ZBEP; 08.06.2010 в 07:01.
ZBEP вне форума Ответить с цитированием
Старый 12.06.2010, 12:04   #5
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Такой вот вопрос: а как увидеть изменения?
Стандартный способ функции getlocalip всё-равно выбивает старый IP-адрес. =(
Sensizu вне форума Ответить с цитированием
Старый 13.06.2010, 08:23   #6
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Цитата:
Сообщение от Sensizu Посмотреть сообщение
Такой вот вопрос: а как увидеть изменения?
Стандартный способ функции getlocalip всё-равно выбивает старый IP-адрес. =(
Странно, у мя работает..

Код:
function GetLocalIP: String;
const WSVer = $101;
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:= iNet_ntoa(PInAddr(p^.h_addr_list^)^);
end;
WSACleanup;
end;
end;
Код:
Edit2.Text:=GetLocalIP;

Последний раз редактировалось ZBEP; 13.06.2010 в 08:26.
ZBEP вне форума Ответить с цитированием
Старый 28.08.2012, 15:29   #7
A_R_S2012
Новичок
Джуниор
 
Регистрация: 03.04.2012
Сообщений: 1
По умолчанию изменений ip

Цитата:
Сообщение от ZBEP Посмотреть сообщение
Странно, у мя работает..

Код:
function GetLocalIP: String;
const WSVer = $101;
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:= iNet_ntoa(PInAddr(p^.h_addr_list^)^);
end;
WSACleanup;
end;
end;
Код:
Edit2.Text:=GetLocalIP;
Сохраняет ip и т.д. в файл?

Последний раз редактировалось A_R_S2012; 28.08.2012 в 15:33.
A_R_S2012 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка подключения Shouldercannon Общие вопросы Delphi 4 11.08.2008 13:41
Настройка VPN подключения Altera Операционные системы общие вопросы 3 07.02.2008 11:39
Открыть Сетевые подключения ChukCha Win Api 7 11.11.2007 09:37
Ошибка подключения к БД CruiserD БД в Delphi 5 26.10.2007 13:42
Время подключения vitalik007 Работа с сетью в Delphi 1 15.08.2007 12:10


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS