ghost-worker
Goto Top

Scannen verschiedener IP-Bereiche

Hallo zusammen,

ich habe hier ein kleines Problem, bei dem ich nicht mehr weiter komme.

Es soll von mehreren Rechnern die in unseren Anlagen verbaut sind ein Backup des integrierten vxworks-Controller gemacht werden.
Der Controller hat immer die IP 10.173.xxx.1 und das Betriebssystem - hier Windows XP - die 10.173.xxx.2.
Da das dritte IP-Oktett immer anders sein kann, habe ich ein Skript zum Scannen der MCs erstellt.

Scan_IPs.cmd
:: Settings
Set IP=10.173
Set Log=MCs.txt


:: Delete log file
If Exist %Log% Del %Log%


:: 1.Start IP, 2.Size of scan step, 3.End IP (D = Third Oktett)
For /L %%D In (0,1,150) DO (

    :: 1.Start IP, 2.Size of scan step, 3.End IP (V = Forth Oktett)
    For /L %%V In (1,1,1) Do (
      ping -n 1 -w 5 %IP%.%%D.%%A|find "TTL=" && Echo %IP%.%%D.%%V>> %Log%  
    )

)

Die MCs.txt wird dann später eingelesen und entsprechend das Backup ausgeführt.
Das funktioniert auch so weit.


MCs.txt
::All available IPs
10.173.110.1


Scan_IPs.cmd
:Read IPs
:: All available IPs
For /F "tokens=1,*" %%i In (%Log%) Do Call :Action %%i  


:Action
If /I "%1" == "10.173.110.1" Goto Machine1  
If /I "%1" == "" Goto NoMachine  

Goto :EOF


:Machine1
Set Name=Machine1

Call MC_Backup.cmd %Name% %1

In der MC_Backup.cmd hole ich mir dann die Daten per FTP vom Controller und zippe sie zusammen.

Allerdings hätte ich noch jetzt gerne die entsprechende Projektnummer in das anschließend Zip-File im Namen integriert.
Die Nummer ist bei uns im Computernamen verankert und kann da ausgelesen werden.
Das sollte dann in etwa so aussehen:
%Projektnummer%_%MC_Backup_Anlage_Datum%.zip

Leider weiß ich nicht wie ich das genau hier unterbringen kann - so dass bei dem Aufruf des Backupscripts auch der Computernamen bzw. die Projektnummer des jeweiligen Rechners mitgeht.

Ich hoffe das ich es nicht allzu kompliziert erklärt habe und hoffe das ihr mir da weiterhelfen könnt.

Thx
GW

Content-Key: 189553

Url: https://administrator.de/contentid/189553

Printed on: April 19, 2024 at 10:04 o'clock

Member: Darkprodukt
Darkprodukt Aug 14, 2012 at 10:44:45 (UTC)
Goto Top
Hallo,

das 1. solte so fungtionieren ;)
:: Settings
Set IP=10.173
Set Log=MCs.txt

:: Delete log file
If Exist %Log% Del %Log%

:: 1.Start IP, 2.Size of scan step, 3.End IP (D = Third Oktett)
For /L %%D in (0,1,150) do ping -n 1 -w 5 %IP%.%%D.1|find "TTL=" && Echo %IP%.%%D.1>>%Log%  

Bei 2. hab ich leider noch keinen Ansatz

Grüße
Darkprodukt
Member: Ghost-Worker
Ghost-Worker Aug 20, 2012 at 19:01:44 (UTC)
Goto Top
Der erste Teil (Scan_IPs.cmd) läuft auch sauber durch.

Um an den jeweiligen Computernamen zu kommen, muss ich über die IP x.x.x.2 auf den Remoterechner drauf und diesen auslesen.
Im Moment mache ich das aus meiner Sicht recht umständlich ...

Ich gehe per PsExec und einen Script auf den Remoterechner, lese den Computernamen aus, schreibe ihn in eine Datei, kopiere diese Datei auf den Rechner von dem das Script ausgeführt wurde und lese die Datei dann aus.
Ist recht umständlich, aber leider sehe ich gerade keine andere Möglichkeit.

Hoffe das jemand von euch noch einen guten Einfall hat.

Danke
GW
Mitglied: 108012
108012 Aug 20, 2012 at 22:01:12 (UTC)
Goto Top
Hallo Ghost-Worker,

ich sage es mal lieber gleich, ich habe Code schreiben und scripten gar keinen plan, also bitte nicht durchdrehen.

Es gibt ein Programm von ColaSoft das heißt MacScanner und listet Dir alle IP Adressen, Mac Adressen und Hostnamen von einem Netzwerk auf wie z.B. 192.168.1.0 /24 und dann kann es das Ergebnis in eine Textdatei exportieren! Es gibt doch Programme die sich minimiert starten lassen mittels eines Kommandos
na und wenn das auch bei dem MacScanner geht dann kann dein Script ja das Programm anweisen und das Ergebnis in eine Textdatei exportieren lassen. Dann Hast Du die IP / MAC / Hostnamen in einer Textdatei!

Ok Du müsstest natürlich dein Script wohl anweisen erst einen Ordner zu erstellen mit dem derzeitigen Projektnamen, dann die IP Adressen nach und nach aus dieser Textdatei holen lassen und dann
soll es doch mal den Rest der benötigten Daten von diesem Windows XP Computer der zu dieser IP Adresse gehört holen und zum Schluss den dazugehörigen Hostnamen wieder aus der Textdatei holen und fertig. Das wird dann in einer Textdatei die den Hostnamen oder die IP Adresse trägt gespeichert in dem Projektordner gespeichert. Oder ganz wie Du das haben willst und möchtest.

Allerdings hat das auch noch einen Haken, der MacScanner ließt auch die IP / MAC / Hostnamen der Drucker, Scanner und anderer Geräte aus und die haben ja keinen vxworks-Controller und ich weiß auch nicht wie viele davon im Netz sind, aber wenn es nur ein paar sind kann man doch bestimmt mit if name
HP.. then drop IP und das Script läuft weiter durch ohne diese zu beachten.
In 6 Sekunden ca. 80 IP´s / MAC´s / Hostnamen, ich denke der Scanner ist flott.

Falls das nicht funktioniert ein Entschuldigung fürs Zeit stehlen!

Bis dann D.o.b.b.y
Member: Ghost-Worker
Ghost-Worker Aug 21, 2012 at 16:51:10 (UTC)
Goto Top
Hi D.o.b.b.y,

danke für den Tip.
Werde das Tool mal testen.

Thx
GW
Member: Darkprodukt
Darkprodukt Aug 22, 2012 at 23:14:04 (UTC)
Goto Top
Hallo,

Soweit ich das gerade Lese, kommt es mit so vor, als ob die IP'S nur zum herausfinden der Computernamen gebraucht werden.

Wie wäre den einfach gleich mit
net view

Grüße
Darkprodukt
Member: Ghost-Worker
Ghost-Worker Aug 24, 2012 at 16:27:29 (UTC)
Goto Top
@Darkprodukt:
Genau so ...
Ich brauche nur den Computernamen des Remoterechners - mehr nicht.

Mit net view bin ich leider nicht weiter gekommen.

Im Moment lese ich per Remotescript den Computernamen aus und schiebe ihn auf den Hostrechner per Datei rüber, die dann ausgelesen und verarbeitet wird.

Finde das nur etwas umständlich und langsam.

Diese Lösung funktioniert zwar, ist aber etwas umständlich.

Danke
GW
Member: Ghost-Worker
Ghost-Worker Aug 28, 2012 at 17:01:18 (UTC)
Goto Top
Ich bin jetzt etwas weiter gekommen.

Den Computernamen des Remotecomputers kann ich nun per
psexec \\x.x.x.x -u aaa -p bbb reg query "HKEY_LOCAL_MACHINE\System\ControlSet001\Control\ComputerName\ComputerName" >> Name.txt  
In der Name.txt steht dann
! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\System\ControlSet001\Control\ComputerName\ComputerName
    ComputerName        REG_SZ        Rechner1
auslesen.
Im nächsten Schritt wollte ich dann den Namen (Rechner1) direkt einer Variablen zuweisen.
Hierfür habe ich mir das mal zusammengebaut.
For /F "tokens=3 delims=        " %%A In ('psexec \\x.x.x.x -u aaa -p bbb reg query "HKEY_LOCAL_MACHINE\System\ControlSet001\Control\ComputerName\ComputerName"') Do Set Name=%%B  

Echo %Name%

Leider geht das nicht.
Hat hier jemand eine Idee oder einen Tritt in die richtige Richtung?!

Danke
GW
Member: Ghost-Worker
Ghost-Worker Sep 07, 2012 at 06:24:42 (UTC)
Goto Top
Ich habe es jetzt so gelöst ...

Get_computername.cmd
@Echo Off & Setlocal

:: Settings
Set Remote_IP=xx.xx.xx.xx
Set "File=Read_computername.vbs %Remote_IP%"  

:: Read return value
for /f "delims=" %%i in ('cscript //nologo %File%') do set "Computername=%%i"  

:: Output
Echo.
Echo %Remote_IP%
Echo %Computername%
Echo.

Pause


Read_computername.vbs
' Catch Computername  
strIP = wscript.Arguments(0)

' Read computer name  
Set objWMIService = GetObject("winmgmts:\\" & strIP & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)  

For Each objItem in colItems
         strComputername = objItem.CSName
Next

' Return value  
Wscript.echo (strComputername)

Zumindest bekomme ich jetzt den Wert/Namen, den ich brauche.