Advertisement
Guest User

Untitled

a guest
Feb 17th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.89 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <stdio.h>
  4. #include <iptypes.h>
  5. #include <iphlpapi.h>
  6. #include <lmserver.h>
  7. #include <lm.h>
  8.  
  9. using namespace std;
  10.  
  11. #define ADAPTER_COUNT 3
  12. #define ONE_KB 16384
  13.  
  14. void DisplayAdapterInfoStruct(int i, IP_ADAPTER_INFO ipAdptrInfo){
  15. printf("ADAPTER[%d]\n", i);
  16. cout << "\t" << "Adapter info: " << ipAdptrInfo.Description << endl;
  17. ULONG j = ipAdptrInfo.AddressLength;
  18. printf("\tMac address: ");
  19. for (ULONG k = 0; k < j; k++){
  20. printf("%02X", ipAdptrInfo.Address[k]);
  21. k == j - 1 ? printf("\n") : printf("-");
  22. }
  23. }
  24.  
  25. void GetAdaptersInfo(){
  26.  
  27. PIP_ADAPTER_INFO pAdapterInfo = (PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO) * ADAPTER_COUNT);
  28. ULONG ulBufLen = sizeof(IP_ADAPTER_INFO) * ADAPTER_COUNT;
  29.  
  30. ULONG errCode = GetAdaptersInfo(pAdapterInfo, &ulBufLen);;
  31.  
  32. switch (errCode){
  33. case ERROR_BUFFER_OVERFLOW:
  34. cout << "Buffer overflow." << endl;
  35. break;
  36. case ERROR_SUCCESS:
  37. cout << "Retrieved adapters info successfully." << endl;
  38. break;
  39. case ERROR_INVALID_DATA:
  40. cout << "Invalid adapter information was retrieved." << endl;
  41. break;
  42. case ERROR_INVALID_PARAMETER:
  43. cout << "Invalid parameter provided." << endl;
  44. break;
  45. case ERROR_NO_DATA:
  46. cout << "No adapter information exists for the local computer." << endl;
  47. break;
  48. case ERROR_NOT_SUPPORTED:
  49. cout << "The GetAdaptersInfo function is not supported by the operating system running on the local computer." << endl;
  50. break;
  51. }
  52.  
  53. if (errCode == ERROR_SUCCESS){
  54. PIP_ADAPTER_INFO pAdapterInfoCurr = pAdapterInfo;
  55. int i = 1;
  56. while (pAdapterInfoCurr){
  57. DisplayAdapterInfoStruct(i++, *pAdapterInfoCurr);
  58. pAdapterInfoCurr = pAdapterInfoCurr->Next;
  59. }
  60. }
  61. free(pAdapterInfo);
  62. }
  63.  
  64. void DisplayNetResourceStruct(int i, LPNETRESOURCE lpnrLocal)
  65. {
  66. printf("NETRESOURCE[%d] Scope: ", i);
  67. switch (lpnrLocal->dwScope) {
  68. case (RESOURCE_CONNECTED):
  69. printf("connected\n");
  70. break;
  71. case (RESOURCE_GLOBALNET):
  72. printf("all resources\n");
  73. break;
  74. case (RESOURCE_REMEMBERED):
  75. printf("remembered\n");
  76. break;
  77. default:
  78. printf("unknown scope %d\n", lpnrLocal->dwScope);
  79. break;
  80. }
  81.  
  82. printf("NETRESOURCE[%d] Type: ", i);
  83. switch (lpnrLocal->dwType) {
  84. case (RESOURCETYPE_ANY):
  85. printf("any\n");
  86. break;
  87. case (RESOURCETYPE_DISK):
  88. printf("disk\n");
  89. break;
  90. case (RESOURCETYPE_PRINT):
  91. printf("print\n");
  92. break;
  93. default:
  94. printf("unknown type %d\n", lpnrLocal->dwType);
  95. break;
  96. }
  97.  
  98. printf("NETRESOURCE[%d] DisplayType: ", i);
  99. switch (lpnrLocal->dwDisplayType) {
  100. case (RESOURCEDISPLAYTYPE_GENERIC):
  101. printf("generic\n");
  102. break;
  103. case (RESOURCEDISPLAYTYPE_DOMAIN):
  104. printf("domain\n");
  105. break;
  106. case (RESOURCEDISPLAYTYPE_SERVER):
  107. printf("server\n");
  108. break;
  109. case (RESOURCEDISPLAYTYPE_SHARE):
  110. printf("share\n");
  111. break;
  112. case (RESOURCEDISPLAYTYPE_FILE):
  113. printf("file\n");
  114. break;
  115. case (RESOURCEDISPLAYTYPE_GROUP):
  116. printf("group\n");
  117. break;
  118. case (RESOURCEDISPLAYTYPE_NETWORK):
  119. printf("network\n");
  120. break;
  121. default:
  122. printf("unknown display type %d\n", lpnrLocal->dwDisplayType);
  123. break;
  124. }
  125.  
  126. printf("NETRESOURCE[%d] Usage: 0x%x = ", i, lpnrLocal->dwUsage);
  127. if (lpnrLocal->dwUsage & RESOURCEUSAGE_CONNECTABLE)
  128. printf("connectable ");
  129. if (lpnrLocal->dwUsage & RESOURCEUSAGE_CONTAINER)
  130. printf("container ");
  131. printf("\n");
  132. printf("NETRESOURCE[%d] Localname: %s\n", i, lpnrLocal->lpLocalName);
  133. printf("NETRESOURCE[%d] Remotename: %s\n", i, lpnrLocal->lpRemoteName);
  134. printf("NETRESOURCE[%d] Comment: %s\n", i, lpnrLocal->lpComment);
  135. printf("NETRESOURCE[%d] Provider: %s\n", i, lpnrLocal->lpProvider);
  136. printf("\n");
  137. }
  138.  
  139. void DisplayWNetErrorInfo(DWORD Error, LPSTR lpErrorBuf, LPSTR lpNameBuf){
  140. printf("Error code: %d\nErrorDescription: %s\nProvider: %s", Error, lpErrorBuf, lpNameBuf);
  141. }
  142.  
  143. BOOL EnumerateLocalResources(LPNETRESOURCE lpnr){
  144. HANDLE hEnum;
  145. DWORD errCode = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpnr, &hEnum);
  146. // For extended errors
  147. DWORD Error;
  148. DWORD nErrorBufSize = 500;
  149. DWORD nNameBufSize = 500;
  150. LPSTR lpErrorBuf = (LPSTR)malloc(sizeof(char) * nErrorBufSize);
  151. LPSTR lpNameBuf = (LPSTR)malloc(sizeof(char) * nNameBufSize);
  152.  
  153. if (errCode != NO_ERROR) {
  154. printf("WnetOpenEnum failed with error: ");
  155. switch (errCode){
  156. case ERROR_NOT_CONTAINER:
  157. printf("ERROR_NOT_CONTAINER");
  158. break;
  159. case ERROR_INVALID_PARAMETER:
  160. printf("ERROR_INVALID_PARAMETER");
  161. break;
  162. case ERROR_NO_NETWORK:
  163. printf("ERROR_NO_NETWORK");
  164. break;
  165. case ERROR_EXTENDED_ERROR:
  166. if (NO_ERROR == WNetGetLastErrorA(&Error, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize)){
  167. DisplayWNetErrorInfo(Error, lpErrorBuf, lpNameBuf);
  168. }
  169. break;
  170. case ERROR_INVALID_ADDRESS:
  171. printf("ERROR_INVALID_ADDRESS");
  172. break;
  173. }
  174. printf("\n");
  175. return FALSE;
  176. }
  177.  
  178. free(lpErrorBuf);
  179. free(lpNameBuf);
  180.  
  181. DWORD cbBuffer = ONE_KB;
  182. LPNETRESOURCE lpnrLocal = (LPNETRESOURCE)malloc(cbBuffer);
  183. DWORD dwResultEnum;
  184. DWORD cEntries = -1;
  185. DWORD i;
  186. do {
  187. ZeroMemory(lpnrLocal, cbBuffer);
  188. dwResultEnum = WNetEnumResource(hEnum, &cEntries, lpnrLocal, &cbBuffer);
  189. if (dwResultEnum == NO_ERROR) {
  190. for (i = 0; i < cEntries; i++) {
  191. DisplayNetResourceStruct(i, &lpnrLocal[i]);
  192. if (RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER))
  193. if (!EnumerateLocalResources(&lpnrLocal[i]))
  194. printf("EnumerateLocalResources returned FALSE\n");
  195. }
  196. }
  197. else if (dwResultEnum != ERROR_NO_MORE_ITEMS) {
  198. printf("WNetEnumResource failed with error %d\n", dwResultEnum);
  199. break;
  200. }
  201. }
  202. while (dwResultEnum != ERROR_NO_MORE_ITEMS);
  203. free(lpnrLocal);
  204. errCode = WNetCloseEnum(hEnum);
  205. if (errCode != NO_ERROR) {
  206. printf("WNetCloseEnum failed with error %d\n", errCode);
  207. return FALSE;
  208. }
  209. cout << "Retrieved network resource info successfully." << endl;
  210. return TRUE;
  211. }
  212.  
  213. void EnumerateServers(){
  214. LPSERVER_INFO_101 pBuf = NULL;
  215. LPSERVER_INFO_101 pTmpBuf;
  216. DWORD dwLevel = 100;
  217. DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
  218. DWORD dwEntriesRead = 0;
  219. DWORD dwTotalEntries = 0;
  220. DWORD dwTotalCount = 0;
  221. DWORD dwServerType = SV_TYPE_WORKSTATION;
  222. DWORD dwResumeHandle = 0;
  223. NET_API_STATUS nStatus;
  224. LPWSTR pszServerName = NULL;
  225. LPWSTR pszDomainName = NULL;
  226. DWORD i;
  227.  
  228. nStatus = NetServerEnum(pszServerName,
  229. dwLevel,
  230. (LPBYTE *) & pBuf,
  231. dwPrefMaxLen,
  232. &dwEntriesRead,
  233. &dwTotalEntries,
  234. dwServerType,
  235. pszDomainName,
  236. &dwResumeHandle);
  237. if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) {
  238. if ((pTmpBuf = pBuf) != NULL) {
  239.  
  240. for (i = 0; i < dwEntriesRead; i++) {
  241. if (pTmpBuf == NULL) {
  242. printf("An access violation has occurred\n");
  243. break;
  244. }
  245.  
  246. printf("\tPlatform: %d\n", pTmpBuf->sv101_platform_id);
  247. wprintf(L"\tName: %s\n", pTmpBuf->sv101_name);
  248. pTmpBuf++;
  249. dwTotalCount++;
  250. }
  251. printf("\nEntries enumerated: %d\n", dwTotalCount);
  252.  
  253. } else {
  254. printf("No servers were found\n");
  255. printf("The buffer (bufptr) returned was NULL\n");
  256. printf("entries read: %d\n", dwEntriesRead);
  257. printf("total entries: %d\n", dwEntriesRead);
  258. }
  259.  
  260. } else
  261. printf("NetServerEnum failed with error: %d\n", (int)nStatus);
  262. if (pBuf != NULL)
  263. NetApiBufferFree(pBuf);
  264. }
  265.  
  266. int main()
  267. {
  268. setlocale(LC_ALL, "russian");
  269. GetAdaptersInfo();
  270. cout << endl;
  271. LPNETRESOURCE lpnr = NULL;
  272. EnumerateLocalResources(lpnr);
  273. EnumerateServers();
  274. cout << "Press any key..." << endl;
  275. getchar();
  276. Sleep(100000);
  277. return 0;
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement