IP da placa de rede

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

cl@udio
Usuário Nível 2
Usuário Nível 2
Mensagens: 88
Registrado em: 25 Jan 2007 16:47

Re: IP da placa de rede

Mensagem por cl@udio »

Desculpe sygecom
Mas seria o mac address da placa de rede.
Agora acabei lembrando de um outro fator.
Rodo os meus sistemas tudo via putty, mesmo que funcionasse em linux, acredito que nao iria funcionar pois iria pegar o mac address do servidor.
Isto tambem nao serve para mim.
[]s
claudio
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: IP da placa de rede

Mensagem por sygecom »

Para MAC em Linux tem essa função que esta em anexo do Luiz Culik.
Anexos
mac_linux.zip
(871 Bytes) Baixado 88 vezes
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Re: IP da placa de rede

Mensagem por clodoaldomonteiro »

Fiz a seguinte função para verificar o MAC da placa de rede:

Código: Selecionar todos

//Funçao para retornar o MAC da placa de rede
Function GetMAC
   local mValor, cText
   mValor:='GetMac /fo CSV > c:\scp10h\mac.txt | more '
   
   Run (mValor)
   
   IF !File( 'c:\scp10h\mac.txt' )
      Return 'NIL'
   ENDIF

   cText := MemoRead( 'c:\scp10h\mac.txt' )

   Return MemoLine( cText, 80, 3, , .t. )
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
cacg57
Usuário Nível 1
Usuário Nível 1
Mensagens: 17
Registrado em: 28 Nov 2009 13:06
Localização: Florianopolis - SC

Re: IP da placa de rede

Mensagem por cacg57 »

Sygecom



Utilizo o xHarbour 1.2.1 e acusa a falta da TIP.Lib.

Onde consigo a mesma.

Obrigado
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: IP da placa de rede

Mensagem por marcos.gurupi »

Vc consegue na pasta LIB do seu xhb

Marcos Roberto.
Marcos Roberto
NetService Software
Avatar do usuário
vailton
Colaborador
Colaborador
Mensagens: 390
Registrado em: 17 Nov 2005 19:08
Localização: Brasil
Contato:

IP da placa de rede

Mensagem por vailton »

Bom dia.
Ressuscitando o tópico, fiz alguns ajustes no código acima para rodar com Harbour e a biblioteca hbwin. Eis o código atualizado:

Código: Selecionar todos

FUNCTION Teste()
   mb := GetMBInfo()
   bios := GetBiosInfo()
   macs := GetMACAddr(.t.)
   ips := GetNICs(.t.)
 
   cls
   ? '1/4 Exibe o modelo e versão da placa-mãe:'
   ? valtoprg(mb)
   wait
   
   cls
   ? '2/4 Exibe a versão e data da bios:'
   ? valtoprg(bios)
   wait

   cls
   ? '3/4 Exibe os endereços MACs encotrados no sistema:'
   ? valtoprg(macs)
   wait

   cls
   ? '4/4 Mostra todos os endereços IPs disponíveis:'
   ? valtoprg(ips)
   wait
   return

   //Eis o código-fonte das rotinas desenvolvidas, qualquer comentário e sugestões fiquem à vontade para se expressarem pois estou à disposição:

#include 'common.ch'
/*
* Retorna os nomes, IPs, Mascara de redes e os endereçõs MAC das placas de rede
* instaladas na CPU atual. O parametro opcional indica se deve-se filtrar apenas
* as interfaces de rede válidos!
* Versão 1.0, 24/2/2007 11:14:23 - Vailton Renato da Silva
*
* Requer Windows Vista, Windows XP, Windows 2000 Professional ou Windows NT WK 4.0 SP4 >
* link: http://msdn2.microsoft.com/en-gb/library/aa394217.aspx
*/
FUNCTION GetNICs( lOnlyValids )
   local oLoc, oSrv, oJbs, oJob, nic, mac, ip, msk, gtw
   local Result := {}
  
   default lOnlyValids to False

      oLoc := WIN_OLECREATEOBJECT( "wbemScripting.SwbemLocator" )
      oSrv := oLoc:ConnectServer()
      oJbs := oSrv:ExecQuery( "SELECT Description, IPAddress, IPSubnet, IPConnectionMetric," +;
       "MACAddress, DefaultIPGateway FROM Win32_NetworkAdapterConfiguration" )

      FOR EACH oJob IN oJbs
         nic := ToString(oJob: Description)
         ip := oJob:IPAddress

         if Valtype(ip) == 'A' .and. Len(ip) > 0
            ip := ip[1]
         else
            ip := ToString(ip)
         end

         mac := oJob:MACAddress
         if Empty(mac)
            if !lOnlyValids
               mac := '00:00:00:00:00:00'
            else
               loop
            end
         end

         msk := oJob:IPSubnet
         if Valtype(msk) == 'A' .and. Len(msk) > 0
            msk := msk[1]
         else
            msk := ToString(msk)
         end

         gtw := oJob: DefaultIPGateway

         if Valtype(gtw) == 'A' .and. Len(gtw) > 0
            gtw := gtw[1]
         else
            gtw := ToString(gtw)
         end

         if Empty(ip) .and. lOnlyValids
            loop
         end
         AADD( Result, nic + ', (' + ip + ', ' +msk + ', ' + gtw + ') ['+mac+']' )
      NEXT

   RETURN Result

/*
* Retorna os nomes e os endereços MAC das placas de rede instaladas na
* CPU atual. O parametro opcional indica se deve-se filtrar apenas NIC válidos!
* Versão 1.0, 24/2/2007 10:23:49 - Vailton Renato da Silva
*
* Requer Windows Vista, Windows XP, Windows 2000 Professional ou Windows NT WK 4.0 SP4 >
* link: http://msdn2.microsoft.com/en-gb/library/aa394216.aspx
*/
FUNCTION GetMACAddr( lOnlyValids )
   local oLoc, oSrv, oJbs, oJob, mb, mac, typ
   local Result := {}

   default lOnlyValids to False

      oLoc := WIN_OLECREATEOBJECT( "wbemScripting.SwbemLocator" )
      oSrv := oLoc:ConnectServer()
      oJbs := oSrv:ExecQuery( "SELECT * FROM Win32_NetworkAdapter "+;
       "WHERE ConfigManagerErrorCode = 0" )

      FOR EACH oJob IN oJbs
         mb := ToString(oJob: Description)
         mac := ToString(oJob:MACAddress)
         typ := ToString(oJob:AdapterType)

         if Empty(mac)
            if !lOnlyValids
               mac := '00:00:00:00:00:00'
            else
               loop
            end
         end

         if Empty(typ) .and. lOnlyValids
            loop
         end

         AADD( Result, mb + ', ' + mac + ' ['+typ+']' )
      NEXT
   RETURN Result

/*
* Puxa as informações da BIOS do micro atual e retorna string formatada.
* Versão 1.0, 24/2/2007 10:06:51 - Vailton Renato da Silva
*
* Requer Windows Vista, Windows XP, Windows 2000 Professional ou Windows NT WK 4.0 SP4 >
* link: http://msdn2.microsoft.com/en-gb/library/aa394077.aspx
*/
FUNCTION GetBiosInfo()
   local oLoc, oSrv, oJbs, oJob, mb, bd

      oLoc := WIN_OLECREATEOBJECT( "wbemScripting.SwbemLocator" )
      oSrv := oLoc:ConnectServer()
      oJbs := oSrv:ExecQuery( "SELECT * FROM Win32_BIOS" )
      mb := ''

      FOR EACH oJob IN oJbs
         MB += ToString(oJob:Manufacturer) + ', '
         bd := ToString(oJob:ReleaseDate)

         if Empty( bd )
            bd := '00/00/0000'
         else
            bd := Subst( bd, 7, 2 ) + '/' + Subst( bd, 5, 2 ) + '/' + Subst( bd, 1, 4 )
         end

         MB += bd + ' #'
         MB += ToString(oJob:SerialNumber) + ' ('
         MB += ToString(oJob:Version) + ')'
      NEXT
   RETURN mb

/*
* Puxa as informações da MotherBoard instalada no PC e retorna string formatada
* Versão 1.0,24/2/2007 09:45:32 - Vailton Renato da Silva
*
* Requer Windows Vista, Windows XP, Windows 2000 Professional ou Windows NT WK 4.0 SP4 >
* link: http://msdn2.microsoft.com/en-gb/library/aa394072.aspx
*/
FUNCTION GetMBInfo()
   local oLoc, oSrv, oJbs, oJob, mb

      oLoc := WIN_OLECREATEOBJECT( "wbemScripting.SwbemLocator" )
      oSrv := oLoc:ConnectServer()
      oJbs := oSrv:ExecQuery( "SELECT * FROM Win32_BaseBoard" )
      mb := ''

      FOR EACH oJob IN oJbs
         MB += ToString(oJob:Manufacturer) + ', ' + ;
          ToString(oJob: Product) + ' #' +;
          ToString(oJob:SerialNumber)
      NEXT

   RETURN mb

/*
* Função auxiliar que converter os valores passados para string. Coisa simples
* 24/2/2007 09:20:32
*/
STATIC;
FUNCTION ToString(Arg1)
   LOCAL tipo := ValType(Arg1)

   if tipo $ 'CM' ; return Alltrim(Arg1) ; end
    if tipo == 'N' ; return Alltrim(Str(Arg1)) ; end
    if tipo == 'D' ; return Alltrim(dtoc(Arg1)) ; end
    if tipo == 'U' ; return '' ; end
    RETURN VALTOPRG(Arg1)
    
STATIC FUNCTION VALTOPRG( x, lLineFeed, lInherited )
    LOCAL s := ''
    LOCAL t := VALTYPE( x )
    LOCAL i,j

    IF lInherited == NIL ; lInherited := FALSE    ;endif
    IF lLineFeed  == NIL ; lLineFeed  := TRUE     ;endif

    DO CASE
    CASE ( t == "C" )
      s := '"' + x + '"'
    CASE ( t == "N" )
      s := alltrim(str( x ))
    CASE ( t == "D" )
      s := "CTOD('"+ DTOC(x) +"')"
    CASE ( t == "L" )
      s := iif( x, '.T.', '.F.' )
    CASE ( t == "M" )
      s := '"' + x + '"'
    CASE ( t == "B" )
      s := '{|| NIL } '
    CASE ( t == "U" )
      s := 'NIL'
    CASE ( t == "A" )
      s := "{"
      j := LEN(x)

      FOR i := 1 TO j
          s += ToString( x[i], TRUE )

          IF ( i <> j )
             s += ","
          End

          IF lLineFeed
             IF ( !lInherited ) .and. VALTYPE( x[i] ) == "A" 
                s += CHR(13)+CHR(10)     
             endif
          End
      End

      s += "}"

    CASE ( t == "H" )
      s := "{"
      j := LEN(x)

      FOR i := 1 TO j
          s += ToString( hb_HKeyAt( x, I ), .T. )
          s += ' => '
          s += ToString( hb_HValueAt( x, i ), .T. )

          IF ( i <> j )
             s += ","
          End

          IF lLineFeed
             IF ( !lInherited ) .and. VALTYPE( x[hb_HKeyAt( x, i )] ) $ "AH"
                s += CHR(13)+CHR(10)
             ENDIF
          End
      End

      s += "}"

    CASE ( t == "O" )
      s := x:ClassName()+'():New()'
    End
    RETURN s
Espero que seja útil. Um grande abraço!
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

IP da placa de rede

Mensagem por clodoaldomonteiro »

Só uma pequena contribuição.

Tem uma função em "C" que pode retornar o MAC:

Código: Selecionar todos

   ///////////////////////////////////////////////////////////////////////////////////////////
   // Pega o MAC da placa de Rede
   ///////////////////////////////////////////////////////////////////////////////
   #pragma BEGINDUMP

   #include <winsock.h>
   #include <windows.h>
   #include <stdio.h>
   #include <stdlib.h>
   #include <Iphlpapi.h>
   #include <Assert.h>
   #include "hbapi.h"
   #include "hbapiitm.h"

   HB_FUNC(_CLM)
   {

   IP_ADAPTER_INFO AdapterInfo[16];       // Allocate information for up to 16 NICs
    DWORD dwBufLen = sizeof(AdapterInfo);       // Save the memory size of buffer
    unsigned char ret[ 20 ] ={0};

    DWORD dwStatus = GetAdaptersInfo(           // Call GetAdapterInfo
   AdapterInfo,       									// [out] buffer to receive data
   &dwBufLen);        									// [in] size of receive data buffer
    PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
    assert(dwStatus == ERROR_SUCCESS);   			// Verify return value is valid, no buffer overflow

    sprintf(ret,"%02X-%02X-%02X-%02X-%02X-%02X",
   pAdapterInfo->Address[0], pAdapterInfo->Address[1],
   pAdapterInfo->Address[2], pAdapterInfo->Address[3],
   pAdapterInfo->Address[4], pAdapterInfo->Address[5]);

    hb_retc(ret);

    }
#pragma ENDDUMP
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Responder