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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2009, 20:14   #1
ikot
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 56
По умолчанию Блокируем порт 80

Добрый день ,уже не раз поднимал подобную тему на многих форумах. Необходимо из программы заблокировать доступ в интернет, т.е. порт 80.
Все получается, если соединение происходит не через proxy. Вопрос, как можно заблокировать доступ в интернет, если используется прокси.
Много советовали, просто закрыть порт 80, но как это сделать? Если средствами сокетов, то вылетает ошибка о том, что порт занят.
ikot вне форума Ответить с цитированием
Старый 17.10.2009, 00:08   #2
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Можно попробывать так, но за прокси я не ручаюсь, в принципе должно работать.
Код:

program BlockAdapter;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, Winsock,
  winpkf in '..\winpkf.pas',
  iphlp in '..\iphlp.pas';

var
  iIndex: DWORD;
  hFilt: THANDLE;
  Adapts: TCP_AdapterList;
  AdapterMode: ADAPTER_MODE;
  hEvent: THANDLE;
  hAdapter: THANDLE;

procedure ReleaseInterface();
begin
  AdapterMode.dwFlags := 0;
  AdapterMode.hAdapterHandle := hAdapter;
  SetAdapterMode ( hFilt, @AdapterMode );
  SetPacketEvent (hFilt, hAdapter, 0);
  if hEvent <> 0 then CloseHandle(hEvent);
  CloseFilterDriver (hFilt);
  FreeNDISAPI();
end;

begin
  iIndex := 1;
  InitNDISAPI();
  hFilt := OpenFilterDriver('NDISRD');
  if IsDriverLoaded(hFilt) then begin
      ExitProc := @ReleaseInterface;
      GetTcpipBoundAdaptersInfo (hFilt, @Adapts);
      hAdapter := Adapts.m_nAdapterHandle[iIndex];
      AdapterMode.dwFlags := MSTCP_FLAG_SENT_TUNNEL or MSTCP_FLAG_RECV_TUNNEL;
      AdapterMode.hAdapterHandle := hAdapter;
      hEvent := CreateEvent(nil, TRUE, FALSE, nil);
      if (hEvent <> 0) and (SetPacketEvent (hFilt, hAdapter, hEvent) <> 0) then begin
          SetAdapterMode ( hFilt, @AdapterMode );
          while true do begin
            WaitForSingleObject ( hEvent, INFINITE );
            ResetEvent(hEvent);
          end;
      end;
  end;
end.
Этот код требует наличия драйвера WinpkFilter 3.0 ( http://www.ntkernel.com/products/winpkfilter.htm ), с дельфийскими заголовками winpkf.pas и iphlp.pas. Блокируется не порт, а целый сетевой адаптер (точнее бы сказать интефейс, ну да ладно) под номером iIndex (у меня 1, на нём и-нет висит).

Последний раз редактировалось BaronTreep; 17.10.2009 в 05:15.
BaronTreep вне форума Ответить с цитированием
Старый 17.10.2009, 00:22   #3
ikot
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 56
По умолчанию

Цитата:
Блокируется не порт, а целый сетевой адаптер (точнее бы сказать интефейс, ну да ладно) под номером iIndex (у меня 1, на нём и-нет висит).
Этот код будет работать, если нужно, чтобы локальная сеть при этом осталась активной?
ikot вне форума Ответить с цитированием
Старый 17.10.2009, 00:37   #4
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Да все остальные сетевые карты/устройства остаются нетронутыми, но на них тоже можно повесить подобные заглушки/сниферы/фаерволы. Это всё таки интерфейс. Кстати, их номера постоянно меняются, там в указанном пакете есть утилита listadapters.exe с её помощью можно посмотреть интерфейсы и их номера, ну или api использовать.
BaronTreep вне форума Ответить с цитированием
Старый 17.10.2009, 00:44   #5
ikot
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 56
По умолчанию

WinpkFilter - насколько я понял является платным продуктом, а нет ли решения без посторонних продуктов?
ikot вне форума Ответить с цитированием
Старый 17.10.2009, 01:13   #6
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Цитата:
free for private or educational use
Для меня это тайна :) у них лежит архив, исходники драйверов, примеры и справка... Все свободно и работает, даже не знаю. В любом случае нужен драйвер для такой функциональности, можете в принципе поискать, либо переделать то что у них открыто ;)

Последний раз редактировалось BaronTreep; 17.10.2009 в 01:17.
BaronTreep вне форума Ответить с цитированием
Старый 17.10.2009, 01:33   #7
ikot
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 56
По умолчанию

Цитата:
Сообщение от BaronTreep Посмотреть сообщение
Для меня это тайна у них лежит архив, исходники драйверов, примеры и справка... Все свободно и работает, даже не знаю. В любом случае нужен драйвер для такой функциональности, можете в принципе поискать, либо переделать то что у них открыто
Буду пробовать
ikot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
COM-порт daunito Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 15.01.2009 18:50
обновление в блоге - Блокируем Ctrl-Alt-Del Pblog Обсуждение статей 0 12.01.2009 17:10
COM порт SanekIrk Win Api 2 28.12.2008 06:20
ИК порт. Делфи Simply-Art Общие вопросы Delphi 2 06.04.2008 13:40
порт ps/2 _Dmitry Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.10.2007 21:28