Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Builder C++ Перехват коннектящихся IP адрессов и блок портов  (Прочитано 16647 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
All
Гость
« : 12-04-2008 11:05 » 

Подскажите пожалуйста,  как делать программу на Builder c++ , чтоб все коннектящиеся Ip можно было разрешить/отклонить к соединению с имеющимся компьютером Не понял

зы. былобы хорошо есиб ето можно было сделать без  написания  дополнительно  драйвера)
« Последнее редактирование: 30-04-2008 18:59 от All » Записан
All
Гость
« Ответ #1 : 16-04-2008 10:13 » 

 Улыбаюсь
« Последнее редактирование: 30-04-2008 18:09 от All » Записан
All
Гость
« Ответ #2 : 16-04-2008 13:58 » 

в общем задача основная:

Как использовать в Builder C++ команду типа rundll32 shell32,Control_RunDLL (для командной строки);

Если возможно  обьясните как сделать- Создаю кнопку Button1 , в каком  виде надо туда на fastcall засунуть  эту команду  , чтоб она выполнялась. Проще  говоря  я не понимаю как ее  описать в  билдере.
Записан
All
Гость
« Ответ #3 : 16-04-2008 14:03 » 

в общем  уже не актуально,извините  за тупизм  вопроса , просто  под градусом   все казалось  более менее понятным)

ShellExecute(Handle, NULL, "rundll32.exe","shell32,Control_RunDLL","", SW_SHOWNORMAL);
вот это мне  было нужно))



хотя  там есть еще  одна часть  вопроса. Используя билдер , надо взять под контроль все порты , и если с какого-то порта  хочет передаться  какая-либо  инфа на чей-то еще  ip адресс  и обратно , чтоб выдавалось предупреждение/выбор разрешить  передачу/прием  или  отклонить)
« Последнее редактирование: 30-04-2008 18:15 от All » Записан
zubr
Гость
« Ответ #4 : 16-04-2008 14:48 » 

хотя  там есть еще  одна часть  вопроса. Используя билдер , надо взять под контроль все порты , и если с какого-то порта  хочет передаться  какая-либо  инфа на чей-то еще  ip адресс  и обратно , чтоб выдавалось предупреждение/выбор разрешить  передачу/прием  или  отклонить)
Самый простой способ (не лезть в сторону сетевого драйвер-фильтра или перехват API-функций) мне видится:
1. Опрашивать в потоке статистику соединений функцией GetTcpTable
2. Изменять (разрывать) соединения функцией SetTcpEntry
Записан
All
Гость
« Ответ #5 : 30-04-2008 12:37 » new

А нельзя ли поподробнее?) GetTcpTable и SetTcpEntry в хелпе Builder'a C++ отсутствует поэтому  не  могу  понять как  его вообще влепить)
« Последнее редактирование: 30-04-2008 18:01 от All » Записан
All
Гость
« Ответ #6 : 30-04-2008 13:08 » 

понял , что нужно приписывать  библиотеку  #include <iphlpapi.h>   .

а как будут выглядеть сами ети функции  если  они  будут поставлены  OnButtonClick ?

DWORD
WINAPI
GetTcpTable(
    OUT    PMIB_TCPTABLE pTcpTable,
    IN OUT PDWORD        pdwSize,
    IN     BOOL          bOrder
    );

видимо так?

а теперь вопрос  , как результат ну  список  етот вывести в ListBox1  Не понял
« Последнее редактирование: 30-04-2008 20:41 от All » Записан
zubr
Гость
« Ответ #7 : 30-04-2008 23:45 » 

Пример из MSDN:
Код:
// Declare and initialize variables
PMIB_TCPTABLE pTcpTable;

pTcpTable = (MIB_TCPTABLE*) malloc(sizeof(MIB_TCPTABLE));
DWORD dwSize = 0;

// Make an initial call to GetTcpTable to
// get the necessary size into the dwSize variable
if (GetTcpTable(pTcpTable, &dwSize, TRUE) == ERROR_INSUFFICIENT_BUFFER) {
  GlobalFree(pTcpTable);
  pTcpTable = (MIB_TCPTABLE*) malloc ((UINT) dwSize);
}

// Make a second call to GetTcpTable to get
// the actual data we require
if ((dwRetVal = GetTcpTable(pTcpTable, &dwSize, TRUE)) == NO_ERROR) {
  for (int i = 0; i < (int) pTcpTable->dwNumEntries; i++) {
    printf("State: %ld\n", pTcpTable->table[i].dwState);
  }
}

else {
  printf("\tCall to GetTcpTable failed.\n");

  LPVOID lpMsgBuf;

  if (FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER |
    FORMAT_MESSAGE_FROM_SYSTEM |
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    dwRetVal,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    (LPTSTR) &lpMsgBuf,
    0,
    NULL ))
  {
    printf("\tError: %s", lpMsgBuf);
  }
  LocalFree( lpMsgBuf );
}
Записан
All
Гость
« Ответ #8 : 01-05-2008 08:38 » 

пример видимо  хороший  но в  билдере  он не работает, ошибки выдает на dwRetVal и printf)
Записан
zubr
Гость
« Ответ #9 : 01-05-2008 17:04 » 

All, включай мозг, тупое копипаст к хорошему не приводит.
Записан
All
Гость
« Ответ #10 : 01-05-2008 19:01 » 

я никогда  не  общался  ни с какими средами программирования  поэтому   перевести один код в  другой  для меня  задаче  нереальная. Хоть я  обвключаюсь  мозгом
Записан
zubr
Гость
« Ответ #11 : 02-05-2008 03:37 » 

All, этот пример из MSDN тебе нужен только для того, чтобы понять как работать с функцией GetTcpTable. Просто перевести этот пример в C++Builder для твоей задачи не имеет смысла. См. мое сообщение №5. А писать за тебя программу....
1. Нет времени.
2. Извини, бесплатно не работаю.
Записан
marat_
Шеф-повар
Опытный

ru
Offline Offline

« Ответ #12 : 02-05-2008 04:52 » 

zubr, переставь пункты местами )
Записан
zubr
Гость
« Ответ #13 : 02-05-2008 06:03 » 

marat_, не а, с пунктами все правильно. Если бы было время + вдохновение, может что и написал...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines