Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Флудильня :) (не знаешь где спросить? спрашивай здесь!)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

HNKTO



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имя сетевого диска (в формате напр. Z:\)передаётся как параметр запускаемой программы.

Код:
#pragma warning( disable : 4996 )
 
#include <windows.h>
//#include <Winnetwk.h>//требует Mpr.lib //все три последующих заголовка включены в windows.h (по крайней мере в MSVS2005)
//#include <winsock2.h>//требует Ws2_32.lib
//#include <ws2tcpip.h>//требует Ws2_32.lib
#include <stdio.h>
#include <conio.h>
 
char* ProcessWNGUErrors(int err)
{
    switch(err)
    {
    case NO_ERROR:
        return "No Error";
    case ERROR_BAD_DEVICE:
        return "ERROR_BAD_DEVICE";
    case ERROR_CONNECTION_UNAVAIL:
        return "ERROR_CONNECTION_UNAVAIL";
    case ERROR_EXTENDED_ERROR:
        return "ERROR_EXTENDED_ERROR, do WNetGetLastError to get details!";
    case ERROR_MORE_DATA:
        return "ERROR_MORE_DATA";
    case ERROR_NOT_SUPPORTED:
        return "ERROR_NOT_SUPPORTED";
    case ERROR_NO_NET_OR_BAD_PATH:
        return "ERROR_NO_NET_OR_BAD_PATH";
    case ERROR_NO_NETWORK:
        return "ERROR_NO_NETWORK";
    case ERROR_NOT_CONNECTED:
        return "ERROR_NOT_CONNECTED";
    }
    return "uncnown error";
}
 
int main(int argc, char *argv[ ], char *envp[ ])
{
    int err;
    char Buffer[1000];
    DWORD BufferSz = 1000;
    UNIVERSAL_NAME_INFO *puni = (UNIVERSAL_NAME_INFO*) &Buffer;
    REMOTE_NAME_INFO *prni = (REMOTE_NAME_INFO*) &Buffer;
    if(argc < 2)
    {
        printf("No argument!");
        return 1;
    }
    char *dest = argv[1];
    if(dest[1] != ':')
    {
        printf("Local paths only!");
        return 1;
    }
    printf("Passed path: %s\n", dest);
    //WNetGetUniversalName Раскрывает данные смонтированного сетевого диска
    //UNIVERSAL_NAME_INFO_LEVEL даёт просто строку, переданную в мастере подключения диска
    //REMOTE_NAME_INFO_LEVEL выдаёт расширенную информацию о созданном подключении
    err = WNetGetUniversalName(dest, UNIVERSAL_NAME_INFO_LEVEL, (LPVOID) &Buffer, &BufferSz);
    printf("WNetGetUniversalName for UNIVERSAL_NAME_INFO_LEVEL processed with error %i (%s)\n", err, ProcessWNGUErrors(err));
    if(err == NO_ERROR)
        printf("returned params:\nUniversalName: %s\n", puni->lpUniversalName);
    printf("============================================\n");
    err = WNetGetUniversalName(dest, REMOTE_NAME_INFO_LEVEL, &Buffer, &BufferSz);
    printf("WNetGetUniversalName for REMOTE_NAME_INFO_LEVEL processed with error %i (%s)\n", err, ProcessWNGUErrors(err));
    if(err == NO_ERROR)
        printf("returned params:\nConnectionName: %s\nRemainingPath: %s\nUniversalName: %s\n",  
            prni->lpConnectionName, prni->lpRemainingPath, prni->lpUniversalName);
    printf("press any key to retrive host info...\n");
    getch();
    printf("============================================\n");
    char HostName[260] = {0};
    { //тут находим конец имени хоста в полном пути
        int ln=2;
        while(ln<260)
        {
            if(prni->lpUniversalName[ln] == '\\')
                break;
            ln++;
        }
        ln -= 2;
        memcpy(HostName, prni->lpUniversalName+2, ln); //и вырезаем его
    }
    if(!isalpha(HostName[0]))
    {
        printf("NO host name, IP is: %s\n", HostName);
        return 0;
    }
    printf("host name is: %s\n", HostName);
//далее выковыриваем IP адрес из имени хоста
    // Declare and initialize variables
    DWORD dwError;
    WSADATA wsaData;
    int iResult;
    struct hostent *remoteHost;
    struct in_addr addr;
    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0)  
    {
        printf("WSAStartup failed: %d\n", iResult);
        return 1;
    }
    printf("Calling gethostbyname with %s\n", HostName);
    remoteHost = gethostbyname(HostName);
    if (remoteHost == NULL)
    {
        dwError = WSAGetLastError();
        if (dwError != 0)
        {
            if (dwError == WSAHOST_NOT_FOUND)  
            {
                printf("Host not found\n");
                return 1;
            }  
            else if (dwError == WSANO_DATA)  
            {
                printf("No data record found\n");
                return 1;
            }
            else  
            {
                printf("Function failed with error: %ld\n", dwError);
                return 1;
            }
        }
    }  
    else
    {
        printf("Function returned:\n");
        printf("\tOfficial name: %s\n", remoteHost->h_name);
        printf("\tAlternate names: %s\n", remoteHost->h_aliases);
        printf("\tAddress type: ");
        switch (remoteHost->h_addrtype)  
        {
        case AF_INET:
            printf("AF_INET\n");
            break;
        /*case AF_INET6:
            printf("AF_INET\n");
            break;*/
        case AF_NETBIOS:
            printf("AF_NETBIOS\n");
            break;
        default:
            printf(" %d\n", remoteHost->h_addrtype);
            break;
        }
        printf("\tAddress length: %d\n", remoteHost->h_length);
        addr.s_addr = *(u_long *) remoteHost->h_addr_list[0];
        printf("\tFirst IP Address: %s\n", inet_ntoa(addr));
    }
 
 
        
    return 0;
}

Всего записей: 2103 | Зарегистр. 30-01-2010 | Отправлено: 18:28 24-11-2014
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Флудильня :) (не знаешь где спросить? спрашивай здесь!)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru