lowbyte1
Goto Top

mac aus vendor list auslesen zu jeder mac in einer mac adress tabelle

helo

was ich genau möchte ist, aus einer mac list.txt die hersteller auslesen.
das geht ganz gut doch es liest mir in der 2.ten for schleife immer nur die letzte teil mac ein!!
ich möchte aber nicht nur die letze sondern von 1rsten bis zum letzen. eintrag in der formatlist.txt .
ich verstehe schon warum das passiert doch ich weis nicht wie ich das realisieren kann..?

bibers hilfe könnte ich jetz mehr als gebrauchen...

cyu lowbyte


@echo off


@For /F "tokens=2" %%i in (arp_req.txt) do @Echo. %%i >> formatlist.txt  
	for /F  %%f in (formatlist.txt) do @set "stringfmac=%%f"  
	Set request=%stringfmac:~0,8%

echo.%request%



type IEEEMACLIST.txt | find /I "%request%" >> test.txt  
for /F "delims=" %%i in (test.txt) do if not defined string set "string=%%i" >nul  
echo.%string%

Content-ID: 76786

Url: https://administrator.de/forum/mac-aus-vendor-list-auslesen-zu-jeder-mac-in-einer-mac-adress-tabelle-76786.html

Ausgedruckt am: 25.12.2024 um 12:12 Uhr

bastla
bastla 28.12.2007 um 18:21:26 Uhr
Goto Top
Hallo lowbyte1!

Da Du keine Namenskonventionen für die zu erzeugenden neuen Textdateien genannt hast, verwende ich einfach eine laufende (sechsstellige) Nummer:
@echo off & setlocal
set "SourceFile=D:\Deine Textdatei.txt"  
set "TargetDir=D:\Test"  

if not exist "%TargetDir%" md "%TargetDir%"  
set /a Nr=1000001
for /f "usebackq delims=" %%i in ("%SourceFile%") do call :ProcessLine "%%i"  
goto :eof

:ProcessLine
echo %~1>"%TargetDir%\%Nr:~-6%.txt"  
set /a Nr+=1

Grüße
bastla

[Edit] Die Problemstellung hat sich während des Schreibens meiner Antwort aber sehr verändert (siehe Titel des Kommentars) ... [/Edit]
bastla
bastla 28.12.2007 um 18:40:57 Uhr
Goto Top
Hallo lowbyte1!

Falls auch meine Unterstützung akzeptabel wäre ...

Ein Lösungsansatz wäre auch in diesem Fall der Aufruf eines Unterprogramms:
@echo off & setlocal
for /f "tokens=2" %%i in (arp_req.txt) do echo. %%i >> formatlist.txt  
for /f %%f in (formatlist.txt) do call :ProcessLine "%%f"  
goto :eof

:ProcessLine
set "stringfmac=%~1"  
set request=%stringfmac:~0,8%
echo.%request%

set string=
type IEEEMACLIST.txt | find /I "%request%" >> test.txt  
for /f "delims=" %%i in (test.txt) do if not defined string set "string=%%i" >nul  
echo.%string%
Soferne Du keine besondere Verwendung für die "formatlist.txt" hast und auch die "test.txt" keinen anderen Sinn hätte, als die passenden Zeilen der "EEEMACLIST.txt" zwischenzuspeichern, um dann deren erste weiter verwenden zu können, sollte auch genügen:
@echo off & setlocal
for /f "tokens=2" %%i in (arp_req.txt) do call :ProcessLine "%%i"  
goto :eof

:ProcessLine
set "stringfmac=%~1"  
set request=%stringfmac:~0,8%
echo.%request%

set string=
for /f "delims=" %%i in ('findstr /i "%request%" IEEEMACLIST.txt') do if not defined string set "string=%%i"  
echo.%string%
Da Du keine näheren Infos zum Aufbau der beiden Textdateien angeführt hast, sind die obigen Versionen ungetestet.

Grüße
bastla

[Edit] Fehlinterpretation hinsichtlich des gewünschten Tokens aus den Zeilen der "arp_req.txt" korrigiert. [/Edit]
lowbyte1
lowbyte1 28.12.2007 um 19:41:21 Uhr
Goto Top
helo

thx für deine reply

ich bediente mich ein bischen deiner kunst..

so sollte es gehen..
es geht auch aber die asugabe ist falsch,aber was ist daran falsch face-sad

@echo off & setlocal
for /f "tokens=2" %%i in (arp_req.txt) do echo. %%i >> formatlist.txt  
for /f "usebackq delims=" %%i in ("formatlist.txt") do call :ProcessLine "%%i"  



pause
goto :eof



:ProcessLine
	set "sss=%~1%"  
	set "var=%sss:~1,8%"  
	echo.%var%
	for /f "delims=" %%p in ('findstr /i "%var%" IEEEMACLIST.txt') do if not defined string set "string=%%p"  
	echo.%string%
die anderen macs werden zwar übernomen aber in der 2ten for schleife läuft was falsch...


danke bastala

ps:die mac list der ieee kannst du hier entnehmen http://standards.ieee.org/regauth/oui/oui.txt
ps:die arp_req.txt sieht so aus

172.16.0.1 00-30-1e-04-e2-51 dynamisch
172.16.0.2 00-a0-c9-df-83-14 dynamisch
172.16.0.4 08-00-46-95-75-5a dynamisch


cyu lowbyte
lowbyte1
lowbyte1 28.12.2007 um 20:06:51 Uhr
Goto Top
helo


so ich habe es geschaft !


@echo off & setlocal
for /f "tokens=2" %%i in (arp_req.txt) do echo. %%i >> formatlist.txt  
for /f "usebackq delims=" %%i in ("formatlist.txt") do call :ProcessLine "%%i"  


pause
goto :eof


:ProcessLine
	set var=
	set "sss=%~1%"  
	set "var=%sss:~1,8%"  
	echo.%var%
	findstr /i "%var%" IEEEMACLIST.txt  

viel einfacher als ich gedacht habe..

aber danke bastala.

ps: ich werde das ganze programm unter einem weiteren update meines ARP Subnet Scanners

in den batch tutorials posten als update 6!!


cyu lowbyte
bastla
bastla 28.12.2007 um 20:24:31 Uhr
Goto Top
Hallo lowbyte1!

Freut mich, dass es klappt. face-smile

Etwas verkürzen ließe sich das Ganze noch:
@echo off & setlocal
for /f "tokens=2" %%i in (arp_req.txt) do call :ProcessLine "%%i"  

pause
goto :eof

:ProcessLine
set "sss=%~1"  
set "var=%sss:~0,8%"  
echo.%var%
findstr /i "%var%" IEEEMACLIST.txt  
Noch kürzer wäre:
@echo off & setlocal enabledelayedexpansion
for /f "tokens=2" %%i in (arp_req.txt) do set "sss=%%i" & set "var=!sss:~0,8!" & (echo.!var!) & findstr /i "!var!" IEEEMACLIST.txt  
Hierzu allerdings der Hinweis, dass wegen der "delayedexpansion" alle "!" bei der Ausgabe der Herstellernamen verloren gehen - beim derzeitigen Stand der "IEEEMACLIST.txt " beträfe das allerdings nur "AMAZING CONTROLS! INC.".

Grüße
bastla
lowbyte1
lowbyte1 28.12.2007 um 22:01:00 Uhr
Goto Top
helo

du legst dich aber richtig ins zeug für mich .. thx

ja das mit der 2 ten for schleife habe ich gekürtz das habe ich übersehen.

jedoch mus ich das ganze noch ein wenig umschreiben wegen meinem" ARP tool".
wen ich fertig bin poste ich mal.


cyu lowbyte
lowbyte1
lowbyte1 29.12.2007 um 17:40:25 Uhr
Goto Top
helo bastala

das fertige programm ist unten im text.. wen zu teil auch ein bischen unordentlicher code..
soweit so gut ..
Ich weis das dass in einer Programmiersprache wie C oder C++ viel einfacher und effizienter wäre... es war einfach eine idee das ich nur mit boardmitteln ein arpscanner schreibe ..
ist mir auch gelungen denke ich.

alerdings werde ich es noch in C schreiben.


lowbyte
@Echo off & Color 0A & Setlocal
Title  Lowbyte

REM ~~~~~~~
for /L %%q in (1,1,25) do call :demo
cls
echo.
echo.
echo.
echo.
echo.
echo.
echo.                              ) LOADING
echo.
echo.
echo.
ping -n 3 localhost>nul & endlocal & setlocal
  CLS
  Title MP-ARP sweeper
goto :MainC


:demo
cls
echo.
echo.
echo.
echo.                                %random%
echo.                                %random%
echo.                                %random%
echo.                              ) LOWBYTE
echo.                                %random%
echo.                                %random%
echo.                                %random%
ping -n 1 localhost>nul
goto :eof

:MainC
REM ~~~~~~~


:RE

  Echo.________________________________________________________________________
  Echo.
  Echo.                        MP_ARP sweeper 1.45
  Echo.________________________________________________________________________
  Echo.
  Echo.
  Echo.Die ersten 3 Oktette der Address Range angeben ...
  Echo.
  Echo.Syntax ( 172.16.3 ) -255)
  Echo.
  Echo.Input: & set /P A=

  Set TMEM=%SYSTEMROOT%\TEMP\
  PUSHD %TMEM%

  for /L %%r in (16,1,32) do if %A:~0,6% == 172.%%r goto:go_main
  for /L %%m in (1,1,255) do if %A:~0,4% == 10.%%m goto:go_main
  if %A:~0,7% == 192.168  goto:go_main

  if exist messg1.vbs (

        goto:Jumpx

            ) else (

      Echo msgbox"Only Private Class C Network",vbCritical , "Only Private-net"> messg1.vbs  

        )

:Jumpx

  start messg1.vbs
  CLS

goto:RE

:go_main



  CLS
  Echo.
  Echo.Die Range %A%.1 - %A%.255 wird gescannt ..
  Echo.
  Ping -n 2 localhost>NUL

  ipconfig | findstr "Standardgateway" > sgw.txt  
  for /F "delims=" %%p in (sgw.txt) do @set VARGW=%%p  
  	set SGW=%VARGW:~44,56%
  @Ping -n 1 -w 50 %SGW%>NUL
  @Arp -d

  For /L %%i in (1,1,255) do Echo ping -n 1 -l 0 -f -i 2 -w 1 %A%.%%i>nul >> treath%%i.cmd
  For /L %%y in (1,1,255) do Echo.Exit  >> treath%%y.cmd

          Echo For /L %%%%z in (1,1,25) do Start /HIGH /B treath%%%%z.cmd>NUL >> treathpool_id1.cmd & Echo.Exit >> treathpool_id1.cmd
           Echo For /L %%%%w in (26,1,50) do Start /HIGH /B treath%%%%w.cmd>NUL >> treathpool_id2.cmd & Echo.Exit >> treathpool_id2.cmd
            Echo For /L %%%%x in (51,1,75) do Start /HIGH /B treath%%%%x.cmd>NUL >> treathpool_id3.cmd & Echo.Exit >> treathpool_id3.cmd
             Echo For /L %%%%u in (76,1,100) do Start /HIGH /B treath%%%%u.cmd>NUL >> treathpool_id4.cmd & Echo.Exit >> treathpool_id4.cmd
              Echo For /L %%%%q in (101,1,125) do Start /HIGH /B treath%%%%q.cmd>NUL >> treathpool_id5.cmd & Echo.Exit >> treathpool_id5.cmd
          Echo For /L %%%%d in (126,1,150) do Start /HIGH /B treath%%%%d.cmd>NUL >> treathpool_id6.cmd & Echo.Exit >> treathpool_id6.cmd
     	   Echo For /L %%%%h in (151,1,175) do Start /HIGH /B treath%%%%h.cmd>NUL >> treathpool_id7.cmd & Echo.Exit >> treathpool_id7.cmd
     	    Echo For /L %%%%t in (175,1,200) do Start /HIGH /B treath%%%%t.cmd>NUL >> treathpool_id8.cmd & Echo.Exit >> treathpool_id8.cmd
	     Echo For /L %%%%s in (201,1,225) do Start /HIGH /B treath%%%%s.cmd>NUL >> treathpool_id9.cmd & Echo.Exit >> treathpool_id9.cmd
	      Echo For /L %%%%r in (226,1,255) do Start /HIGH /B treath%%%%r.cmd>NUL >> treathpool_id10.cmd & Echo.Exit >> treathpool_id10.cmd


	For /L %%b in (1,1,10) do Start /HIGH /B /I treathpool_id%%b.cmd >NUL & Echo. & Echo.Subnet zu %%b0%% Prozent gescannt .. & Ping -n 1 -w 100 localhost>NUL & CLS & Echo.  &  Echo.
	Ping -n 2 -w 1 localhost>NUL

	POPD


	Ping -n 1 localhost>NUL && arp -a >> arpcache.txt

  	type arpcache.txt | findstr "statisch">> arp_req.txt  
  	type arpcache.txt | findstr "dynamisch">> arp_req.txt  

	CLS & echo. & echo. & echo.

  Echo.Scannvorgang der Ip-Range %A%.1 - %A%.255 ist abgeschlossen ..

  Echo. & Echo. & Echo.

  Ipconfig | findstr "IP-Adresse"> LocalIP.txt  
  For /F "delims=" %%k in (LocalIP.txt) do @set "Pvar=%%k"  
  Set request=%Pvar:~44,60%
  Echo. %request%  -UP-   Localhost

  For /F "tokens=1,2" %%i in (arp_req.txt) do call :ProcessLine "%%i" "%%j"  

  echo. & echo. & echo.


  Echo.
  Echo.
  Echo.
  Echo.
  Echo.
  Echo.All Activ Hosts im Subnet ..
  Echo.
  Echo.
  Echo.
  Echo.Output saving ?..y/n

	Set /P NOYES=
	if y == %NOYES%  goto:c_logf
	if Y == %NOYES%  goto:c_logf

:ret_log

  if exist arpcache.txt erase arpcache.txt
  if exist arp_req.txt erase arp_req.txt
  if exist LocalIP.txt erase LocalIP.txt
  if exist sgw.txt erase sgw.txt
  if exist messg1.vbs erase messg1.vbs
  Title MP-ARP sweeper

	ENDLOCAL && CLS

goto:RE

:c_logf

  Echo.Scan .. vom ## DATE:%DATE% ## Time:%TIME% ## >> Logfile.log
  Echo. >> Logfile.log
  Echo. %request%  -UP-   Localhost >> Logfile.log
  For /F "tokens=1,2" %%d in (arp_req.txt) do call :ProcessLine "%%d" "%%e" >> Logfile.log  
  Echo. >> Logfile.log
  Echo. >> Logfile.log
  Echo. & Echo. & Echo. >> Logfile.log
  Echo.All activ Host's im Subnet .. >> Logfile.log  
  Echo. & Echo. & Echo. >> Logfile.log
  CLS
  Echo.
  Echo. Output wurde im Logfile gespeichert ...
  ping -n 3 localhost>nul

goto:ret_log

  :ProcessLine

  set "sss=%~2%"  
  set "var=%sss:~0,8%"  
  set "VE=not found"  
  for /f "tokens=2*" %%c in ('findstr /i "%var%" IEEEMACLIST.txt') do set "VE=%%d"  
  Echo. %~1  -UP-   MAC = %~2   -   %VE%
  goto :eof


REM  # lowbyte #
bastla
bastla 29.12.2007 um 18:40:29 Uhr
Goto Top
Hallo lowbyte1!

Am einfachsten wäre es, die gesamte Zeile in ":ProcessLine" auszugeben. Die relevanten Codeblöcke sähen dann so aus:
  ...
  ...
  Echo. %request%  -UP-   Localhost
  for /F "tokens=1,2" %%i in (arp_req.txt) do call :ProcessLine "%%i" "%%j"  

  Echo.
  Echo.
  Echo.
  Echo.
  Echo.
  Echo.All Activ Hosts im Subnet
  ...
  ...
und
  :ProcessLine

  set "sss=%~2%"  
  set "var=%sss:~0,8%"  
  set "V=not found"  
  for /f "tokens=2*" %%a in ('findstr /i "%var%" IEEEMACLIST.txt') do set "V=%%b"  

  Echo. %~1  -UP-   MAC = %~2   -   %V%
  goto :eof

Grüße
bastla
Biber
Biber 29.12.2007 um 19:45:59 Uhr
Goto Top
Moin lowbyte1,

auch wenn es so wie jetzt sicher funktioniert, würde ich aus ästhetischen Gründen vorschlagen, einen mehrfach verwendbaren Block einzubauen:

.....
@Echo off & Color 0A & Setlocal

Title  Lowbyte
for /L %%i in (1,1,25) do call :Werbepause
goto :Hauptfilm
~~~~~~~
:Werbepause
cls
echo.
echo.
echo.
echo.                                %random%
echo.                                %random%
echo.                                %random%
echo.                              ) LOWBYTE
echo.                                %random%
echo.                                %random%
echo.                                %random%
ping -n 1 localhost>nul
goto :eof
~~~~
:Hauptfilm
....

Grüße
Biber
lowbyte1
lowbyte1 29.12.2007 um 19:56:40 Uhr
Goto Top
helo


habe ich jetz gerade angepasst !!!
da copy past ist mir in den kopf gestiegen ...
heheh... (:

den source code habe ich ausgetauscht..


cyu lowbyte
lowbyte1
lowbyte1 29.12.2007 um 21:47:41 Uhr
Goto Top
helo

den endgültigen Source code habe ich oben ersetz

danke an euch 2 ..


und schöne fest tage.
cyu lowbyte


ps:kennt ihr euch in C aus ? kennt ihr eine api func die de system("ping -n 1 172.16.0.10"); ablöst?
bastla
bastla 29.12.2007 um 23:39:55 Uhr
Goto Top
Hallo lowbyte1!

In der Zeile
  set "V=not found"  
sollte die Variable eigentlich ebenfalls VE heißen ...
Hinsichtlich des gesuchten API-Calls kann ich leider nix beitragen ...

Grüße
bastla