Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Windows [игнор отключен] [закрыт для гостей] / Как программно определить маску сети в которой я нахожусь (windows xp) / 3 сообщений из 3, страница 1 из 1
30.04.2013, 08:02
    #38244732
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программно определить маску сети в которой я нахожусь (windows xp)
Как программно определить маску сети в которой я нахожусь (windows xp)
...
Рейтинг: 0 / 0
30.04.2013, 09:32
    #38244798
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программно определить маску сети в которой я нахожусь (windows xp)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_IP4RouteTable WHERE InterfaceIndex != 1 AND Metric1 != 1 AND Mask != '0.0.0.0' AND Mask != '240.0.0.0' AND Mask != '255.255.255.255'",,48) 
For Each objItem in colItems 
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "Win32_IP4RouteTable instance"
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "Mask: " & objItem.Mask
    Wscript.Echo "NextHop: " & objItem.NextHop
Next
...
Рейтинг: 0 / 0
30.04.2013, 10:18
    #38244884
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программно определить маску сети в которой я нахожусь (windows xp)
Спасибо, я эту проблему уже решил (точнее нашел):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
//--------------------------------------------------
DWORD GetNetMask(DWORD &ip, DWORD &mask){
// возвращает диагностику (NO_ERROR - без ошибок)
AnsiString s;
MIB_IPADDRTABLE  *pIPAddrTable;
DWORD            dwSize = 0;
DWORD            dwRetVal=NO_ERROR;

pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
	free( pIPAddrTable );
	pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize );
}
if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) {
	return dwRetVal;
}
if (pIPAddrTable)
		free(pIPAddrTable);
mask=pIPAddrTable->table[0].dwMask;
ip=pIPAddrTable->table[0].dwAddr;
return dwRetVal;
}


теперь я вычисляю широковещательный адрес подсети :
Wikipedia//На уровне L3 используются широковещательные адреса, вид которых зависит от протокола.
// Так, в IP-сетях широковещательные адреса формируются следующим образом:
//к адресу подсети прибавляется побитовая инверсия маски подсети
//(то есть все биты адреса подсети, соответствующие нулям в маске, устанавливаются в «1»).
//Например, если адрес сети равен 192.168.0.0, маска подсети 255.255.255.0,
// то широковещательный адрес будет 192.168.0.255

Однако connect с сокетом сервера не проходит.
Может потому что я веду отладку и клиента и сервера на одном и том же компьютере?
...
Рейтинг: 0 / 0
Форумы / Windows [игнор отключен] [закрыт для гостей] / Как программно определить маску сети в которой я нахожусь (windows xp) / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]