ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

определения типа соединения
  #1  
Старый 01.05.2007, 23:19
Аватар для gevara
gevara
Познающий
Регистрация: 30.11.2006
Сообщений: 49
Провел на форуме:
36434

Репутация: 28
По умолчанию определения типа соединения

необходимо омределить локальный ИП адрес компьютера. я делаю это при помощи gethostbyname(0). выдаётся несколько IP адресов. Необходимо отфильтровать все интернет (ADSL/DIALUP/TAP/PPP) соединения.
Вопрос: как определить тип соединения для каждого IP адреса?
 
Ответить с цитированием

  #2  
Старый 02.05.2007, 15:14
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

2 gevara А ты не пробывал просто проверять по маске эти IP.
т.е. если у тебя же в любом случае будут IP которые практически одинаковы.
т.е. если сеть, то к примеру 192,168,*,* или чтото в этом роде.
Конечно есть вариант еще вот какой:
Запускаешь прогу ipconfig, считываешь всё что она тебе написала и от туда выдираешь типы подключений и IP
 
Ответить с цитированием

  #3  
Старый 02.05.2007, 15:19
Аватар для Sn@k3
Sn@k3
Познавший АНТИЧАТ
Регистрация: 13.04.2006
Сообщений: 1,738
Провел на форуме:
5151669

Репутация: 1198


Отправить сообщение для Sn@k3 с помощью ICQ
По умолчанию

slesh прав, вот только можно через командную строку удобнее (cmd.exe) и запускаем банально ipconfig с флагом /all =)
 
Ответить с цитированием

  #4  
Старый 02.05.2007, 18:18
Аватар для Nix*
Nix*
Banned
Регистрация: 22.04.2007
Сообщений: 10
Провел на форуме:
102087

Репутация: -23
По умолчанию

Цитата:
slesh прав, вот только можно через командную строку удобнее (cmd.exe) и запускаем банально ipconfig с флагом /all =)
А вот лучше так не делать. так как зависит от системы..
Какая ОС стоит.XP выдаёт немного другие данные.
Показывает все подключени на машине но при этом бывают глюги у SP1.
Лучше пробуй 1.вриант.
 
Ответить с цитированием

  #5  
Старый 02.05.2007, 18:45
Аватар для Ch3ck
Ch3ck
Познавший АНТИЧАТ
Регистрация: 09.06.2006
Сообщений: 1,359
Провел на форуме:
5301021

Репутация: 1879


По умолчанию

Код:
uses 
  WinInet; 

const 
  MODEM = 1; 
ADLS = 2; 
  PROXY = 4; 
  BUSY = 8; 

function GetConnectionKind(var strKind: string): Boolean; 
var 
  flags: DWORD; 
begin 
  strKind := ''; 
  Result := InternetGetConnectedState(@flags, 0); 
  if Result then 
  begin 
	if (flags and MODEM) = MODEM then strKind := 'Modem'; 
	if (flags and ADSL) = ADSL then strKind := 'ADSL'; 
	if (flags and PROXY) = PROXY then strKind := 'Proxy'; 
	if (flags and BUSY) = BUSY then strKind := 'Modem Busy'; 
  end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
  strKind: string; 
begin 
  if GetConnectionKind(strKind) then 
	ShowMessage(strKind); 
end;
Вот проверил работает.
Переписать немного можно.
 
Ответить с цитированием

  #6  
Старый 02.05.2007, 20:33
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

2 BlackLogic Если я не ошибаюсь, то выведет данные только текущего соединения, а не всех. Может у человека на компе Спутник+ADSL+LAN+ еще чтонить и ему нужно оперделить типы всех соединений!
 
Ответить с цитированием

  #7  
Старый 03.05.2007, 12:07
Аватар для gevara
gevara
Познающий
Регистрация: 30.11.2006
Сообщений: 49
Провел на форуме:
36434

Репутация: 28
По умолчанию

Что касается проверки по маске - бред. ничего хорошего тут не получится. вот, например, у меня при подключении по локальной сети, пров выделил мне адрес 10.20.16.188. подключение локальное, НО тип соединения PPPoE, а это подключение к интернету. С другой стороны существуют стандартные маски локальных адресов:
10.*.*.*, 192.168.*.*, 172.х.з.* вроде так. но часто находятся сети, в которых адреса распределены по другому.

Всем пасиб за ответы, особенно BlackLogic. Только вот надо бы тоже самое для всех адресов, выдаваемых gethostbyname(0). попробую дизасмить эту функцию.

Ещё. у меня она выдаёт значение 0x51.

Последний раз редактировалось gevara; 03.05.2007 в 12:20..
 
Ответить с цитированием

  #8  
Старый 03.05.2007, 13:41
Аватар для [53x]Shadow
[53x]Shadow
Leaders of Antichat
Регистрация: 25.01.2007
Сообщений: 341
Провел на форуме:
3372120

Репутация: 2565
По умолчанию

Цитата:
Сообщение от gevara  
необходимо омределить локальный ИП адрес компьютера. я делаю это при помощи gethostbyname(0). выдаётся несколько IP адресов. Необходимо отфильтровать все интернет (ADSL/DIALUP/TAP/PPP) соединения.
Вопрос: как определить тип соединения для каждого IP адреса?
Я думаю, тебе надо юзать RAS API, в частности для получения типов соединений:

Для того чтобы узнать все устройства установленные на компьютере, через которые возможно совершить подключение используется функция RasEnumDevice:

DWORD RasEnumDevices(
LPRASDEVINFO lpRasDevInfo,
LPDWORD lpcb,
LPDWORD lpcDevices
);

Первым же параметром этой функции является указатель на структуру RASDEVINFO:

typedef struct tagRASDEVINFO {
DWORD dwSize;
TCHAR szDeviceType[RAS_MaxDeviceType + 1];
TCHAR szDeviceName[RAS_MaxDeviceName + 1];
} RASDEVINFO;

Как и в двух предыдущих случаях, первое поле dwSize содержит размер структуры в байтах. Второй член этой структуры содержит тип найденного устройства и может быть равен одному из следующих значений:

#define RASDT_Modem TEXT("modem")
#define RASDT_Isdn TEXT("isdn")
#define RASDT_X25 TEXT("x25")
#define RASDT_Vpn TEXT("vpn")
#define RASDT_Pad TEXT("pad")
#define RASDT_Generic TEXT("GENERIC")
#define RASDT_Serial TEXT("SERIAL")
#define RASDT_FrameRelay TEXT("FRAMERELAY")
#define RASDT_Atm TEXT("ATM")
#define RASDT_Sonet TEXT("SONET")
#define RASDT_SW56 TEXT("SW56")
#define RASDT_Irda TEXT("IRDA")
#define RASDT_Parallel TEXT("PARALLEL")
#if (WINVER >= 0x501)
#define RASDT_PPPoE TEXT("PPPoE")
#endif

Поле szDeviceName просто содержит название устройства.

Второй аргумент функции RasEnumDevice должен содержать размер буфера lpRasDevInfo. В третьий параметр функция передает число найденных устройств.

А так же:

Для получения адреса и др. свойств существет структура RASENTRY, которая описывает все возможные настройки и свойства соединения. Ее используют две функции. Итак, рассмотрим многочисленные поля RASENTRY:

typedef struct tagRASENTRY {
DWORD dwSize;
DWORD dwfOptions;
// Настройки телефонного номера
DWORD dwCountryID;
DWORD dwCountryCode;
TCHAR szAreaCode[ RAS_MaxAreaCode + 1 ];
TCHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
DWORD dwAlternateOffset;
//
// PPP(Протокол Point-to-point)/Ip
//
RASIPADDR ipaddr;
RASIPADDR ipaddrDns;
RASIPADDR ipaddrDnsAlt;
RASIPADDR ipaddrWins;
RASIPADDR ipaddrWinsAlt;
// Протокол
DWORD dwFrameSize;
DWORD dwfNetProtocols;
DWORD dwFramingProtocol;
// Сценарии
TCHAR szScript[ MAX_PATH ];
// Автодозвон
TCHAR szAutodialDll[ MAX_PATH ];
TCHAR szAutodialFunc[ MAX_PATH ];
// Устройство
TCHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
TCHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
// X.25
TCHAR szX25PadType[ RAS_MaxPadType + 1 ];
TCHAR szX25Address[ RAS_MaxX25Address + 1 ];
TCHAR szX25Facilities[ RAS_MaxFacilities + 1 ];
TCHAR szX25UserData[ RAS_MaxUserData + 1 ];
DWORD dwChannels;
// Зарезервировано
DWORD dwReserved1;
DWORD dwReserved2;
#if (WINVER >= 0x401)
// Подключение из многих соединений
DWORD dwSubEntries;
DWORD dwDialMode;
DWORD dwDialExtraPercent;
DWORD dwDialExtraSampleSeconds;
DWORD dwHangUpExtraPercent;
DWORD dwHangUpExtraSampleSeconds;
// Время простоя до разъединения
DWORD dwIdleDisconnectSeconds;
#endif
#if (WINVER >= 0x500)
DWORD dwType;
DWORD dwEncryptionType;
DWORD dwCustomAuthKey;
GUID guidId;

TCHAR szCustomDialDll[MAX_PATH];
DWORD dwVpnStrategy;
#endif
#if (WINVER >= 0x501)
DWORD dwfOptions2;
DWORD dwfOptions3;
TCHAR szDnsSuffix[RAS_MaxDnsSuffix];
DWORD dwTcpWindowSize;
TCHAR szPrerequisitePbk[MAX_PATH];
TCHAR szPrerequisiteEntry[RAS_MaxEntryName + 1];
DWORD dwRedialCount;
DWORD dwRedialPause;
#endif
} RASENTRY;

функция RasGetEntryProperties позволяет программно получить настройки существующего соединения, функция объявлена следующим образом:

DWORD RasGetEntryProperties(
LPCTSTR lpszPhonebook,
LPCTSTR lpszEntry,
LPRASENTRY lpRasEntry,
LPDWORD lpdwEntryInfoSize,
LPBYTE lpbDeviceInfo,
LPDWORD lpdwDeviceInfoSize
);
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
А как вы так видео типа сжимаете? до ~1мб... PEPSICOLA Комментарии к видео 5 06.08.2007 10:06
Методика Захвата Соединения Tcp/ip k00p3r Чужие Статьи 0 08.06.2005 15:00
и мне помогите ломануть чат!!! типа java или cgi Чаты 6 06.11.2002 23:23



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ