Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Пинг IP адреса


Автор: Annuta 27.8.2007, 15:07
Есть ип адрес, - как мне проверить, можно ли его использовать 
/т.е. назначить внешнему устройству/ ?
Т.е. как проверить данный ип в сети уже задействовван или нет ?... 
 спасибо....

Автор: MaXL 27.8.2007, 16:42
Чтобы сделать пинг, нужно использоваться функции из библиотеки ICMP.DLL 
В этой библиотеке есть функции: IcmpCloseFile, IcmpCreateFile, IcmpSendEcho. Погугли в их сторону, сможешь найти примеры использования.
А вообще по сабжу думаю следующее, не все машины в сети можно пропинговать, на многих может стоять какой-нибудь файрвол которое сделать её невидимой. Поэтому думаю что этот способ не очень эффективен.

Автор: bel_nikita 27.8.2007, 17:38
Annuta, копай в сторону DHCP

Автор: Annuta 27.8.2007, 18:50
MaXL -- а есть ли более эффективный способ ?... Поведай - если знаешь...
 DHCP - натолкните пожаста на мысль о том, как с помощью этого протокола - узнать есть ип уже в сети или нету 
. спасибо!

Автор: jonie 27.8.2007, 19:40
а я бы копал в сторону ARP ... конкретно слал бы запрос ARP request....(ip2mac) если я чего не путаю ..... ежели ниче не пришло тогда можно юзать...
для винда когда-то писал такое:
Код

#include <stdio.h>
// IP helper funct
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iphlpapi.h>

#define SIZEOF(x) sizeof(x)/sizeof(x[0])


#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"iphlpapi.lib")


/*
    Get MAC from IP (using IPHelper function)
    params : targetIP
*/
int main(int argc, char **argv)
{
    try{
        if(argc<2){
            
            throw L"USAGE : ip2mac.exe IP_ADDR";
        }
        ULONG AddrLen=6;
        ULONG MacAddr[2];
        IPAddr ipaddr = inet_addr(argv[1]);
        memset(MacAddr,0xFF,sizeof(MacAddr));
        if(SendARP(ipaddr,0,MacAddr,&AddrLen)!= NO_ERROR) throw L""/*(L"SendARP Failed!")*/;
        PBYTE lpMAC = reinterpret_cast<PBYTE>(MacAddr);
        for(;AddrLen;AddrLen--,lpMAC++){
            wprintf(L"%02X",*lpMAC);
        }
    }
    catch(TCHAR* mes){
        fwprintf(stderr,L"%s",mes);
        return 1;
    }
    catch(...){
        fwprintf(stderr,L"Unexcepted Error!");
        return 1;
    }
    return 0;
}

Автор: Annuta 28.8.2007, 13:24
jonie, Спасибо! У меня всё получилось, вашим способом!!!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)