Obtener serie MAC en menos o igual a 1 segundo
Obtener serie MAC en menos o igual a 1 segundo
Hola con todos, estoy tratando de poner clave de activacion a mi software de una manera que no sea facil de obtenerla.
He pensado una vez instalado el soft en la maquina del cliente/usuario en la primera vez que se ejecute obtendrá la direccion MAC y esta direccion se alojará dentro del menu "Acerca de" que posee el software.
El soft tendrá un periodo de prueba, si el usuario quiere comprar la activacion deberá comunicarse con mi persona y me facilitará la serie MAC.
Yo are algunas encriptaciones a esa direccion MAC es decir lo convertiré en una serie tras serie de codigo, este codigo obtenido lo traducirá el soft al ser ingresado para la activacion y una vez desencriptado lo comparará con la serie MAC que tenga la computadora si es identico lo activará.
Pero que pasa si escribo la misma direccion MAC al introducir para la activación?
Pues como dije el soft trata de desencriptar lo escrito y lo transformará en otro texto dando como resultado algo diferente a la direccion MAC.
Una vez aclarada mi idea, quisiera una manito en esto ya que he visto un ejemplo en este foro de como obtener la mac de la PC pero este proceso dura como 2 o 3 segundos y pues quisiera ver la forma de obtenerlo de forma mas breve.
Si alguien pudiese ayudarme fuera genial o si tienen alguna idea mejor para la activacion, pero preferiria obtener la mac
Saludos...
He pensado una vez instalado el soft en la maquina del cliente/usuario en la primera vez que se ejecute obtendrá la direccion MAC y esta direccion se alojará dentro del menu "Acerca de" que posee el software.
El soft tendrá un periodo de prueba, si el usuario quiere comprar la activacion deberá comunicarse con mi persona y me facilitará la serie MAC.
Yo are algunas encriptaciones a esa direccion MAC es decir lo convertiré en una serie tras serie de codigo, este codigo obtenido lo traducirá el soft al ser ingresado para la activacion y una vez desencriptado lo comparará con la serie MAC que tenga la computadora si es identico lo activará.
Pero que pasa si escribo la misma direccion MAC al introducir para la activación?
Pues como dije el soft trata de desencriptar lo escrito y lo transformará en otro texto dando como resultado algo diferente a la direccion MAC.
Una vez aclarada mi idea, quisiera una manito en esto ya que he visto un ejemplo en este foro de como obtener la mac de la PC pero este proceso dura como 2 o 3 segundos y pues quisiera ver la forma de obtenerlo de forma mas breve.
Si alguien pudiese ayudarme fuera genial o si tienen alguna idea mejor para la activacion, pero preferiria obtener la mac
Saludos...
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
https://www.facebook.com/yasmanycurimilma
Re: Obtener serie MAC en menos o igual a 1 segundo
- ............................................
......................................
Re: Obtener serie MAC en menos o igual a 1 segundo
Realmente no se me dá muy bien esto... podias darme una manito.
Este un ejemplo que realicé basado en otro. y pues en unas portatiles no me devuelve el numero MAC pero en otros si.
Este otro ejemplo me aparecen otras direcciones a pesar que tambien me devuelve la MAC pero dos direcciones diferentes pero en si no se como obtener el valor real
Estos 2 codes tardan de 1 a 2 segundos en mostrar el resultado.
¿Como puedo utilizar el contenido del enlace que me diste?
Este un ejemplo que realicé basado en otro. y pues en unas portatiles no me devuelve el numero MAC pero en otros si.
Código: Seleccionar todo
#include <Process.au3>
$rc = _RunDos("getmac>"&@AppDataDir&"\Avy_Antivirus\mac.txt") ; Con esto consigo la MAC desde la consola y creo un txt con datos.
$Fline = FileReadLine (@AppDataDir&"\Avy_Antivirus\mac.txt",4) ; Con esto consigo la MAC fija.
$mac = StringLeft ($Fline, 17) ; Recogo los numeros de la MAC.
MsgBox(64,"Direccion MAC",$mac,-1)
Código: Seleccionar todo
#include <Constants.au3>
FileWrite(@AppDataDir&"\Avy_Antivirus\mac.txt",_RunStdOutRead("getmac"))
MsgBox(0, "", _RunStdOutRead("getmac"))
Func _RunStdOutRead($sCommand, $sWorkingDirectory = @SystemDir)
Local $iPID = Run(@ComSpec & ' /c ' & $sCommand, $sWorkingDirectory, @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD), $sOutput = ''
While 1
$sOutput &= StdoutRead($iPID)
If @error Then
ExitLoop
EndIf
WEnd
Return $sOutput
EndFunc ;==>_RunStdOutRead
¿Como puedo utilizar el contenido del enlace que me diste?
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
https://www.facebook.com/yasmanycurimilma
Re: Obtener serie MAC en menos o igual a 1 segundo
Si usa XP usas GetAdaptersInfo y si usa uno superior usas GetAdaptersAddresses.
No tengo au3 aquí por eso no te coloco un ejemplo.
Saludos
No tengo au3 aquí por eso no te coloco un ejemplo.
Saludos
- ............................................
......................................
Re: Obtener serie MAC en menos o igual a 1 segundo
Has probado con objetos?
Saludos..
Código: Seleccionar todo
$time = TimerInit()
$mac = _CI_GetNetworkAdapter() ; Retorna la direccion mac
$T = TimerDiff($time) / 1000
MsgBox(0, 'MAC ADRESS', "MAC Adress: " & $mac & " Se retorno en: " & $T & " Seg.")
Func _CI_GetNetworkAdapter($strComputer = '.')
Local $colItems, $objWMIService, $objItem, $MACAdress
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus > 0', 'WQL', 0x30)
If Not IsObj($colItems) Then Return SetError(2, 0, 0)
For $objItem In $colItems
$MACAdress = $objItem.MACAddress
$objWMIService = ""
$colItems = ""
Return $MACAdress
Next
EndFunc ;==>_CI_GetNetworkAdapter
Re: Obtener serie MAC en menos o igual a 1 segundo
Jooooder que está mucho mejor... gracias PDF
El tuyo es mucho mas efectivo... mil gracias.
Abandonaré el mio... te reirás por lo extenso que lo hice apesar que en caso que una maquina este con virus y no permita ejecutar el CMD no me saldría el resultado, pero con el tuyo me imagino obviamente que sí
Saludos...
El tuyo es mucho mas efectivo... mil gracias.
Abandonaré el mio... te reirás por lo extenso que lo hice apesar que en caso que una maquina este con virus y no permita ejecutar el CMD no me saldría el resultado, pero con el tuyo me imagino obviamente que sí
Código: Seleccionar todo
#NoTrayIcon ; no muestra el icono por defecto
#include <Constants.au3> ; importacion, es el archivo al cual se fija para trabajar
If FileExists(@DesktopDir & "\verMac\macText.txt") Then FileDelete(@DesktopDir & "\verMac\macText.txt") ; verifica si existe y lo elimina para crear uno nuevo
If FileExists(@DesktopDir & "\verMac\mac.txt") Then FileDelete(@DesktopDir & "\verMac\mac.txt"); verifica si existe y lo elimina para crear uno nuevo
DirCreate(@DesktopDir&"\verMac\") ; crea una carpeta en el escritorio
FileWrite(@DesktopDir & "\verMac\macText.txt", _RunStdOutRead("ipconfig /all")); llamo a la funcion y lo escribo en un fichero
Func _RunStdOutRead($sCommand, $sWorkingDirectory = @SystemDir)
Local $iPID = Run(@ComSpec & ' /c ' & $sCommand, $sWorkingDirectory, @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD), $sOutput = ''
While 1
$sOutput &= StdoutRead($iPID)
If @error Then
ExitLoop
EndIf
WEnd
Return $sOutput
EndFunc ;==>_RunStdOutRead
$file = FileOpen(@DesktopDir&"\verMac\macText.txt", 0) ; abro el archivo logicamente para poder leer el contenido
While 1 ; ciclo repetitivo
$line = FileReadLine($file) ; lee cada linea del archivo
If @error = -1 Then ExitLoop ; si existe un error en la lectura (como por ejemplo se borra el archivo o algo parecido ) sale del bucle
; comparo los 47 caracteres primeros de cada linea hasta que encuentre uno identico a la comparacion
If StringLeft($line, 47) = " Direcci¢n f¡sica. . . . . . . . . . . . . : " Then
FileWrite(@DesktopDir & "\verMac\mac.txt", StringTrimLeft($line, 47)) ; escribo en un fichero solo la direccion MAC
FileDelete(@DesktopDir & "\verMac\macText.txt") ; elimino el archivo que cree en un inicio
FileSetAttrib(@DesktopDir & "\verMac\mac.txt", "+RASH") ; aplica atributos de oculto, archivo, sitema y de solo lectura para que no pueda ser modificado facilmente
MsgBox(64, "Direccion Física MAC", StringTrimLeft($line, 47)) ; muestro en mensaje la direccion física MAC del ordenador
ExitLoop ; salgo del bucle y del programa
EndIf
WEnd
FileClose($file)
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
https://www.facebook.com/yasmanycurimilma
Re: Obtener serie MAC en menos o igual a 1 segundo
Bueno lo compilé y lo estuve probando... sucede que en la compu de mesa si me votó el resultado pero en una portatil me salió el mensaje vacío.
A que se deberá?
A que se deberá?
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
https://www.facebook.com/yasmanycurimilma
Re: Obtener serie MAC en menos o igual a 1 segundo
Comprobando en una portatil si le pongo = 2
WHERE Netconnectionstatus = 2
en vez de >0
WHERE Netconnectionstatus > 0
... hay si me arroja una MAC
como se solucionará para que arroje el resultado en cualquier maquina... para tomar en cuenta la portatil es a 64b y la de mesa es a 32b
WHERE Netconnectionstatus = 2
en vez de >0
WHERE Netconnectionstatus > 0
... hay si me arroja una MAC
como se solucionará para que arroje el resultado en cualquier maquina... para tomar en cuenta la portatil es a 64b y la de mesa es a 32b
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
https://www.facebook.com/yasmanycurimilma
Re: Obtener serie MAC en menos o igual a 1 segundo
Investigando un poco me encontré que una notebook puede tener varias direcciones físicas de cada adaptador que posea, por ejemplo, el adaptador de wifi, bluetooth, red hospedada, y el de red, cada una de estas direcciones físicas son diferentes, por lo que puede no funcionar el codigo en diferentes máquinas..
Re: Obtener serie MAC en menos o igual a 1 segundo
De todos modos creo que de esta forma ya deberia de solucionarse, para retornar al menos una direccion MAC..
Código: Seleccionar todo
$hTime = TimerInit()
$sMac = _CI_GetNetworkAdapter() ; Retorna la direccion mac
If @error Then
MsgBox(0, 'MAC ADRESS', "Error al retornar la MAC")
Else
$T = TimerDiff($hTime) / 1000
MsgBox(0, 'MAC ADRESS', "MAC Adress: " & $sMac & " Se retorno en: " & $T & " Seg.")
EndIf
Func _CI_GetNetworkAdapter($strComputer = '.')
Local $colItems, $objWMIService, $objItem, $MACAdress
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus > 0', 'WQL', 0x30)
If Not IsObj($colItems) Then Return SetError(2, 0, 0)
For $objItem In $colItems
$MACAdress = $objItem.MACAddress
If Not ($MACAdress = "") Then
$objWMIService = ""
$colItems = ""
Return $MACAdress
EndIf
Next
Return SetError(3, 0, 0)
EndFunc ;==>_CI_GetNetworkAdapter
Re: Obtener serie MAC en menos o igual a 1 segundo
gracias colega... pero no me dio resultado realice esto y ahi si me funciona.
Código: Seleccionar todo
$mac = _CI_GetNetworkAdapter1() ; Retorna la direccion mac
If IsString($mac) <> 1 Then
$mac = _CI_GetNetworkAdapter2()
MsgBox(0, 'OPCION 2', $mac)
Else
MsgBox(0, 'OPCION 1', $mac)
EndIf
Func _CI_GetNetworkAdapter1($strComputer = '.')
Local $colItems, $objWMIService, $objItem, $MACAdress
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus > 0', 'WQL', 0x30)
If Not IsObj($colItems) Then Return SetError(2, 0, 0)
For $objItem In $colItems
$MACAdress = $objItem.MACAddress
$objWMIService = ""
$colItems = ""
Return $MACAdress
Next
EndFunc ;==>_CI_GetNetworkAdapter1
Func _CI_GetNetworkAdapter2($strComputer = '.')
Local $colItems, $objWMIService, $objItem, $MACAdress
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus = 2', 'WQL', 0x30)
If Not IsObj($colItems) Then Return SetError(2, 0, 0)
For $objItem In $colItems
$MACAdress = $objItem.MACAddress
$objWMIService = ""
$colItems = ""
Return $MACAdress
Next
EndFunc ;==>_CI_GetNetworkAdapter2
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
https://www.facebook.com/yasmanycurimilma
Re: Obtener serie MAC en menos o igual a 1 segundo
Tambien podrias utilizar:
"SELECT * FROM Win32_NetworkAdapter WHERE MACAddress > 0" para enumerar los adaptadores que tengan Direccion MAC diferente de 0, ó mejor aún
"SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = True" para enumerar solo los adaptadores fisicos...
Saludos
"SELECT * FROM Win32_NetworkAdapter WHERE MACAddress > 0" para enumerar los adaptadores que tengan Direccion MAC diferente de 0, ó mejor aún
"SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = True" para enumerar solo los adaptadores fisicos...
Saludos
Re: Obtener serie MAC en menos o igual a 1 segundo
Existe inconvenientes si el internet se encuentra deshabilitado es decir los adaptadores... entonces no da una direccion MAC, que lástima.
niguna de las formas resueltas aqui dan solucion a eso.
niguna de las formas resueltas aqui dan solucion a eso.
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
https://www.facebook.com/yasmanycurimilma
Re: Obtener serie MAC en menos o igual a 1 segundo
Aquí puedes ver la documentación de Win32_NetworkAdapter: http://msdn.microsoft.com/en-us/library ... s.85).aspx
En todo caso, puedes buscar otras alternativas para lo que quieres hacer como por ejemplo el serial del equipo, o del disco duro en cual este instalado..
En todo caso, puedes buscar otras alternativas para lo que quieres hacer como por ejemplo el serial del equipo, o del disco duro en cual este instalado..
Re: Obtener serie MAC en menos o igual a 1 segundo
Gracias PDF... investigare un poco mas
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
https://www.facebook.com/yasmanycurimilma