[Aporte][Batch] Funcion ID de red

Iniciado por Zomkar, 21 Mayo 2014, 04:32 AM

0 Miembros y 1 Visitante están viendo este tema.

Zomkar

Bueno pues el funcionamiento de este script (llamemosle funcion) es el de averiguar la IP y a partir de esa información deducir el ID de red.

El ID de red para el que no lo sepa es sencillamente el rango de IP posibles en una red:
p. ej: en una red tipica clase C domestica, si la IP es 192.168.1.10 pues el ID es 192.168.1.0

No es que sea nada revolucionario pero si que si a alguien le hace falta le puede ahorrar el trabajo. La idea es usar éste codigo con call. (modificarlo)

Ahi va:

@echo off
REM PARA WIN7
REM LINEAS QUE PONE DEBUG SON LINEAS QUE HAY QUE DESCOMENTAR
REM PARA PODER ENCONTRAR FALLOS AL HACER EL CODIGO

setlocal EnableDelayedExpansion

set ip_address_string="IPv4"
Set IpIsDefined=0
set yo_cuento=0
SET "direccionIp="

call :GetIp
REM - PARA DEBUG - ECHO !direccionIp!

call :SetNetwId
pause
exit

:GetIp
echo Network Connection Test
for /f "usebackq tokens=2 delims=:" %%G in (`ipconfig ^| findstr /c:%ip_address_string%`) do (
SET "direccionIp=%%G"
SET /A yo_cuento=!yo_cuento! + 1
IF !yo_cuento! GTR 3 goto :bucle_infinito_Getip
REM como se usa la expansion de variables - ver inicio del batch
REM es necesario hacer la comprobacion de un modo similar al que vemos debajo, para que IF
REM funcione como deseamos aunque no haya valores asignados
IF "!direccionIp!"=="" goto :GetIp
goto :eof
)

:SetNetwId
REM funcion pensada para redes clase C o sea donde nos importan los 3 primeros tokens
REM modificable a conveniencia
set yo_cuento=0
FOR /F  "usebackq tokens=1,2,3,4 delims=." %%H IN (`echo !direccionIp!`) do (
SET /A yo_cuento=!yo_cuento! + 1
SET TokenIp!yo_cuento!=%%H
SET /A yo_cuento=!yo_cuento! + 1
SET TokenIp!yo_cuento!=%%I
SET /A yo_cuento=!yo_cuento! + 1
SET TokenIp!yo_cuento!=%%J
SET /A yo_cuento=!yo_cuento! + 1
SET TokenIp!yo_cuento!=%%K
)
REM Quitar REM para DEBUG
REM ECHO !TokenIp1!
REM ECHO !TokenIp2!
REM ECHO !TokenIp3!
REM ECHO !TokenIp4!
Set NetworkId=!TokenIp1!.!TokenIp2!.!TokenIp3!.0
ECHO !NetworkId!
goto :eof

:bucle_infinito_Getip
Echo Imposible detectar IP, Cerrando..  
PAUSE  
EXIT


También es para que me deis alguna idea si la teneis, de cosas que tenga que controlar para evitar errores y no haya controlado, etc (dentro de lo razonable porque es batch).

No usé el coloreador de código porque no funciona bien y me lo modifica de:
SET TokenIp!yo_cuento!=%%H
a:
SET TokenIp!yo_cuento!=%% style="color: #448888;">H

Alguien sabe porque?

Bueno gracias y un saludo!!

PS: ahora que lo pienso debe ser un fallo bueno pero no creo que sea importante, o si?
Si vas a por ellos te llamarán violento.
Si explotas a cientos te verán como un ejemplo.

engel lex

por que basada en clases si eso desapareció hace muchos años? :s

para eso está la mascara....

busca la mascara de subred haces un xor y listo, porque puedes tener una subred por ejemplo 192.168.1.94 con mascara 255.255.255.192 y la ip de red (lo que tu le llamas la id) sería 192.168.1.64

así como puede ser la 172.30.0.1 y la direccion de red sería 172.16.0.0 (mascara 255.240.0.0)

no lo hago yo porque realmente poco se de batch (posiblemente lo haría en c++ o por  ser flojo, lo con php XD)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Zomkar

vale, es cierto, no es el id de red verdadero.

para lo que yo necesito, me vale, ya que asumo máscaras estandar, pero es verdad que podria no servir.

mirare a ver si lo amplio para lo que comentas no tendria que ser muy dificil creo.
Si vas a por ellos te llamarán violento.
Si explotas a cientos te verán como un ejemplo.