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 » |
|
А нельзя ли поподробнее?) 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_
Шеф-повар
Опытный
Offline
|
|
« Ответ #12 : 02-05-2008 04:52 » |
|
zubr, переставь пункты местами )
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #13 : 02-05-2008 06:03 » |
|
marat_, не а, с пунктами все правильно. Если бы было время + вдохновение, может что и написал...
|
|
|
Записан
|
|
|
|
|