mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-30 05:50:53 +03:00
winws: show adapter names in --nlm-list
This commit is contained in:
parent
d165c410ec
commit
3e1f705932
Binary file not shown.
Binary file not shown.
120
nfq/darkmagic.c
120
nfq/darkmagic.c
@ -963,8 +963,7 @@ void tcp_rewrite_winsize(struct tcphdr *tcp, uint16_t winsize, uint8_t scale_fac
|
||||
|
||||
static HANDLE w_filter = NULL;
|
||||
static OVERLAPPED ovl = { .hEvent = NULL };
|
||||
static const struct str_list_head *wlan_filter_ssid = NULL;
|
||||
static const struct str_list_head *nlm_filter_net = NULL;
|
||||
static const struct str_list_head *wlan_filter_ssid = NULL, *nlm_filter_net = NULL;
|
||||
static DWORD logical_net_filter_tick=0;
|
||||
uint32_t w_win32_error=0;
|
||||
INetworkListManager* pNetworkListManager=NULL;
|
||||
@ -991,22 +990,81 @@ static bool str2guid(const char* str, GUID *guid)
|
||||
return true;
|
||||
}
|
||||
|
||||
static const char *sNetworkCards="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards";
|
||||
// get adapter name from guid string
|
||||
static bool AdapterID2Name(const GUID *guid,char *name,DWORD name_len)
|
||||
{
|
||||
char sguid[39],sidx[32],val[256];
|
||||
HKEY hkNetworkCards,hkCard;
|
||||
DWORD dwIndex,dwLen;
|
||||
bool bRet = false;
|
||||
|
||||
if (name_len<2) return false;
|
||||
|
||||
if ((w_win32_error = RegOpenKeyExA(HKEY_LOCAL_MACHINE,sNetworkCards,0,KEY_ENUMERATE_SUB_KEYS,&hkNetworkCards)) == ERROR_SUCCESS)
|
||||
{
|
||||
for (dwIndex=0;;dwIndex++)
|
||||
{
|
||||
dwLen=sizeof(sidx)-1;
|
||||
w_win32_error = RegEnumKeyExA(hkNetworkCards,dwIndex,sidx,&dwLen,NULL,NULL,NULL,NULL);
|
||||
if (w_win32_error == ERROR_SUCCESS)
|
||||
{
|
||||
sidx[dwLen]='\0';
|
||||
|
||||
guid2str(guid, sguid+1);
|
||||
sguid[0]='{';
|
||||
sguid[37]='}';
|
||||
sguid[38]='\0';
|
||||
|
||||
if ((w_win32_error = RegOpenKeyExA(hkNetworkCards,sidx,0,KEY_QUERY_VALUE,&hkCard)) == ERROR_SUCCESS)
|
||||
{
|
||||
dwLen=sizeof(val)-1;
|
||||
if ((w_win32_error = RegQueryValueExA(hkCard,"ServiceName",NULL,NULL,val,&dwLen)) == ERROR_SUCCESS)
|
||||
{
|
||||
val[dwLen]='\0';
|
||||
if (!strcmp(val,sguid))
|
||||
{
|
||||
name_len--;
|
||||
if ((w_win32_error = RegQueryValueExA(hkCard,"Description",NULL,NULL,name,&name_len)) == ERROR_SUCCESS)
|
||||
{
|
||||
name[name_len]='\0';
|
||||
bRet = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
RegCloseKey(hkCard);
|
||||
}
|
||||
if (bRet) break;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
RegCloseKey(hkNetworkCards);
|
||||
}
|
||||
|
||||
return bRet;
|
||||
}
|
||||
|
||||
bool win_dark_init(const struct str_list_head *ssid_filter, const struct str_list_head *nlm_filter)
|
||||
{
|
||||
win_dark_deinit();
|
||||
wlan_filter_ssid = LIST_EMPTY(ssid_filter) ? NULL : ssid_filter;
|
||||
nlm_filter_net = LIST_EMPTY(nlm_filter) ? NULL : nlm_filter;
|
||||
if (nlm_filter_net)
|
||||
if (LIST_EMPTY(ssid_filter)) ssid_filter=NULL;
|
||||
if (LIST_EMPTY(nlm_filter)) nlm_filter=NULL;
|
||||
if (nlm_filter)
|
||||
{
|
||||
if (SUCCEEDED(w_win32_error = CoInitialize(NULL)))
|
||||
{
|
||||
if (FAILED(w_win32_error = CoCreateInstance(&CLSID_NetworkListManager, NULL, CLSCTX_ALL, &IID_INetworkListManager, (LPVOID*)&pNetworkListManager)))
|
||||
{
|
||||
win_dark_deinit();
|
||||
CoUninitialize();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
nlm_filter_net = nlm_filter;
|
||||
wlan_filter_ssid = ssid_filter;
|
||||
return true;
|
||||
}
|
||||
bool win_dark_deinit(void)
|
||||
@ -1030,40 +1088,64 @@ bool nlm_list(bool bAll)
|
||||
INetworkListManager* pNetworkListManager;
|
||||
if (SUCCEEDED(w_win32_error = CoCreateInstance(&CLSID_NetworkListManager, NULL, CLSCTX_ALL, &IID_INetworkListManager, (LPVOID*)&pNetworkListManager)))
|
||||
{
|
||||
IEnumNetworks* pEnum;
|
||||
if (SUCCEEDED(w_win32_error = pNetworkListManager->lpVtbl->GetNetworks(pNetworkListManager, NLM_ENUM_NETWORK_ALL, &pEnum)))
|
||||
IEnumNetworks* pEnumNetworks;
|
||||
if (SUCCEEDED(w_win32_error = pNetworkListManager->lpVtbl->GetNetworks(pNetworkListManager, NLM_ENUM_NETWORK_ALL, &pEnumNetworks)))
|
||||
{
|
||||
INetwork* pNet;
|
||||
INetwork *pNet;
|
||||
INetworkConnection *pConn;
|
||||
IEnumNetworkConnections *pEnumConnections;
|
||||
VARIANT_BOOL bIsConnected, bIsConnectedInet;
|
||||
GUID idNet;
|
||||
NLM_NETWORK_CATEGORY category;
|
||||
GUID idNet, idAdapter, idConn;
|
||||
BSTR bstrName;
|
||||
char Name[128];
|
||||
char Name[128],Name2[128];
|
||||
int connected;
|
||||
for (connected = 1; connected >= !bAll; connected--)
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
if (FAILED(w_win32_error = pEnum->lpVtbl->Next(pEnum, 1, &pNet, NULL)))
|
||||
if (FAILED(w_win32_error = pEnumNetworks->lpVtbl->Next(pEnumNetworks, 1, &pNet, NULL)))
|
||||
{
|
||||
bRet = false;
|
||||
break;
|
||||
}
|
||||
if (!pNet) break;
|
||||
if (w_win32_error != S_OK) break;
|
||||
if (SUCCEEDED(w_win32_error = pNet->lpVtbl->get_IsConnected(pNet, &bIsConnected)) &&
|
||||
SUCCEEDED(w_win32_error = pNet->lpVtbl->get_IsConnectedToInternet(pNet, &bIsConnectedInet)) &&
|
||||
SUCCEEDED(w_win32_error = pNet->lpVtbl->GetNetworkId(pNet, &idNet)) &&
|
||||
SUCCEEDED(w_win32_error = pNet->lpVtbl->GetCategory(pNet, &category)) &&
|
||||
SUCCEEDED(w_win32_error = pNet->lpVtbl->GetName(pNet, &bstrName)))
|
||||
{
|
||||
if (!!bIsConnected == connected)
|
||||
{
|
||||
if (WideCharToMultiByte(CP_UTF8, 0, bstrName, -1, Name, sizeof(Name), NULL, NULL))
|
||||
{
|
||||
printf("Name : %s", Name);
|
||||
printf("Name : %s", Name);
|
||||
if (bIsConnected) printf(" (connected)");
|
||||
if (bIsConnectedInet) printf(" (inet)");
|
||||
printf("\n");
|
||||
printf(" (%s)\n",
|
||||
category==NLM_NETWORK_CATEGORY_PUBLIC ? "public" :
|
||||
category==NLM_NETWORK_CATEGORY_PRIVATE ? "private" :
|
||||
category==NLM_NETWORK_CATEGORY_DOMAIN_AUTHENTICATED ? "domain" :
|
||||
"unknown");
|
||||
guid2str(&idNet, Name);
|
||||
printf("NetID : %s\n", Name);
|
||||
printf("NetID : %s\n", Name);
|
||||
if (connected && SUCCEEDED(w_win32_error = pNet->lpVtbl->GetNetworkConnections(pNet, &pEnumConnections)))
|
||||
{
|
||||
while ((w_win32_error = pEnumConnections->lpVtbl->Next(pEnumConnections, 1, &pConn, NULL))==S_OK)
|
||||
{
|
||||
if (SUCCEEDED(w_win32_error = pConn->lpVtbl->GetAdapterId(pConn,&idAdapter)))
|
||||
{
|
||||
guid2str(&idAdapter, Name);
|
||||
if (AdapterID2Name(&idAdapter,Name2,sizeof(Name2)))
|
||||
printf("Adapter : %s (%s)\n", Name2, Name);
|
||||
else
|
||||
printf("Adapter : %s\n", Name);
|
||||
}
|
||||
pConn->lpVtbl->Release(pConn);
|
||||
}
|
||||
pEnumConnections->lpVtbl->Release(pEnumConnections);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
else
|
||||
@ -1080,9 +1162,9 @@ bool nlm_list(bool bAll)
|
||||
if (!bRet) break;
|
||||
}
|
||||
if (!bRet) break;
|
||||
pEnum->lpVtbl->Reset(pEnum);
|
||||
pEnumNetworks->lpVtbl->Reset(pEnumNetworks);
|
||||
}
|
||||
pEnum->lpVtbl->Release(pEnum);
|
||||
pEnumNetworks->lpVtbl->Release(pEnumNetworks);
|
||||
}
|
||||
else
|
||||
bRet = false;
|
||||
@ -1124,7 +1206,7 @@ static bool nlm_filter_match(const struct str_list_head *nlm_list)
|
||||
bRet = false;
|
||||
break;
|
||||
}
|
||||
if (!pNet) break;
|
||||
if (w_win32_error != S_OK) break;
|
||||
if (SUCCEEDED(w_win32_error = pNet->lpVtbl->GetNetworkId(pNet, &idNet)) &&
|
||||
SUCCEEDED(w_win32_error = pNet->lpVtbl->GetName(pNet, &bstrName)))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user