Arptool

  • Hi Leute da ich Netzwerkadmin bin habe ich viel mit MAC-Adressen zutun. Da die aber ewig lang sind und man die nie weis habe ich ein Tool geschrieben was mir ein klein bischen Arbeit abnimmt.

    Das Tool bassiert auf den Dos-Befehlen:

    • Ping <IP-Adresse>
    • Arp -a <IP-Adresse>


    Getestet wurde es unter dem Betriebssystemen

    • Windows Vista
    • Windows XP
    • Windows 2000


    Beschreibung:

    Es können Rechner Remote oder lokal abgefragt werden.
    Nach Eingabe der IP-Adresse, wird ein Ping auf das Gerät abgesetzt um zusehen ob es online ist.
    Sollte ein Name angegeben werden wird dieser mit der Function "TCPNameToIP" umgesetzt da eine Arpanfrage nur auf eine IP funktioniert.
    Sollte keine Adresse angegeben werden, wird das lolale Gerät abgefragt.
    Das Ergebniss wird dann in einem Editfeld angezeigt und in die Zwischenablage kopiert. (Das erspart falsches abschreiben :schild4: )
    Mit "Strg + V" kann sie somit überall eingefügt werden.

    Feedback:
    So schreibt bitte was Ihr von dem Tool haltet und ob es für Euch von Interesse ist.

    Edit: Neue Version 1.3
    Changes:
    - Auflösung nach IP und DNS-Name.
    - Fehlermeldung korrigiert.

    Edit: Neue Version 1.4
    Changes:
    - Checkbox kopieren ja nein eingebunden.
    - Gui verändert.

    Edit: Neue Version 1.5
    Changes:
    - GUI an Vista angepasst.
    - Fehler durch Autoitversion 3.2.2.0 behoben


    Der Quellcode:

    Spoiler anzeigen
    [autoit]


    #include <GuiStatusBar.au3>
    #include <Inet.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #AutoIt3Wrapper_icon=192.ico
    #AutoIt3Wrapper_outfile=Arptool.exe

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Dim $author = "Der_Doc"
    Dim $version = "1.5"
    Dim $change = "Update: 1.3 | 26.02.2007" & @CRLF & _
    ' -Auflösung nach IP und DNS-Name' & @CRLF & _
    'Update: 1.4 | 05.04.2007 ' & @CRLF & _
    ' -Checkbox kopieren ja nein eingebunden' & @CRLF & _
    ' -Gui erneuert ' & @CRLF & _
    'Update: 1.5 | 23.04.2009 ' & @CRLF & _
    ' -GUI an Vista angepasst'
    Dim $a_PartsRightEdge[2] = [110, -1]
    Dim $a_PartsText[2] = [$author & " 2009", "Version: " & $version]
    Dim $ausgabe

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=arpgui.kxf
    $Arpgui = GUICreate("Arptool", 279, 250, -1, -1)
    $Group1 = GUICtrlCreateGroup("IP oder PC-Name", 6, 7, 265, 55)
    $In_Input = GUICtrlCreateInput("", 14, 27, 249, 21)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Ergebniss der Arpanfrage", 7, 68, 265, 90)
    $Edit = GUICtrlCreateEdit("", 22, 86, 241, 65, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Senden = GUICtrlCreateButton("Senden", 214, 167, 57, 25, $BS_DEFPUSHBUTTON)
    $check1 = GUICtrlCreateCheckbox("Ergebniss in Zwischenablag kopieren", 6, 173, 201, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetState($In_Input, $GUI_FOCUS)
    $MenuItem1 = GUICtrlCreateMenu("&Datei")
    $MenuItem2 = GUICtrlCreateMenuItem("Neu", $MenuItem1)
    $separator2 = GUICtrlCreateMenuItem("", $MenuItem1, 2)
    $MenuItem3 = GUICtrlCreateMenuItem("Beenden", $MenuItem1)
    $dateihelp = GUICtrlCreateMenu("?")
    $menuehelp = GUICtrlCreateMenuItem("Über Arptool", $dateihelp)
    $StatusBar1 = _GUICtrlStatusBar_Create($Arpgui, $a_PartsRightEdge, $a_PartsText)
    GUICtrlCreateGraphic(0, 0, 306, 2, BitOR($SS_NOTIFY, $SS_SUNKEN))
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $MenuItem2
    GUICtrlSetData($Edit, "")
    GUICtrlSetData($In_Input, "")
    ClipPut("")

    Case $Senden
    $Input = GUICtrlRead($In_Input)
    If $Input = "" Then $Input = @ComputerName ; Wenn kein Computername eingegeben wurde wird der locale genommen.

    [/autoit] [autoit][/autoit] [autoit]

    $ping = Ping($Input, 50)
    Select
    Case $ping > 0
    TCPStartup()
    $ausgabe = TCPNameToIP($Input)
    $ausgabe_name = _TCPIpToName($ausgabe, 0)
    GUICtrlSetData($Edit, 'PC-Name: ' & @TAB & $ausgabe_name & @CRLF)
    TCPShutdown()
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & 'IP-Adresse: ' & @TAB & $ausgabe & @CRLF)
    arp()
    If $ausgabe = "" Then ipconfig()
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & 'Mac-Adresse: ' & @TAB & $ausgabe & @CRLF)
    If GUICtrlRead($check1) = 1 Then
    ClipPut($ausgabe)
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & 'Mac-Adresse in Zwischenablage kopiert!' & @CRLF)
    Else
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & 'Mac-Adresse wurde nicht kopiert!' & @CRLF)
    EndIf
    Case $ping = 0
    MsgBox(64, "Fehlermeldung Arptool", "Der Host ist nicht Verfügbar! " & @CRLF & "Bitte neue Abfrage starten!")
    GUICtrlSetData($Edit, "")
    GUICtrlSetData($In_Input, "")
    GUICtrlSetState($In_Input, $GUI_FOCUS)
    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    Case $menuehelp
    $help = GUICreate("Über Arptool ......", 280, 180, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS))
    $help_ok = GUICtrlCreateButton("OK", 112, 136, 75, 25, $BS_DEFPUSHBUTTON)
    $Info = GUICtrlCreateEdit("", 24, 48, 249, 73, BitOR($ES_READONLY, $WS_VSCROLL))
    GUICtrlSetData(-1, "Author: " & $author & @CRLF & _
    'AutoIt Version: 3.2.2.0' & @CRLF & _
    'Datum: 15.01.2007' & @CRLF & _
    $change)
    $Label_help = GUICtrlCreateLabel("Arptool " & $version, 125, 16, 134, 23)
    GUICtrlSetFont(-1, 12, 800, 0, "Times New Roman")
    GUICtrlCreateIcon("shell32.dll", 24, 50, 7, 32, 32, BitOR($SS_NOTIFY, $WS_GROUP))
    GUISetState(@SW_SHOW, $help)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Case $help_ok
    GUIDelete($help)
    GUISetState(@SW_SHOW, $Arpgui)
    GUISwitch($Arpgui)
    ExitLoop
    EndSwitch
    WEnd

    Case $GUI_EVENT_CLOSE
    Exit
    Case $MenuItem3
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func arp()
    $pid = Run(@ComSpec & " /c arp -a " & $ausgabe, "", "", 2)
    $ausgabe = StdoutRead($pid)
    While ProcessExists($pid)
    Sleep(100)
    WEnd
    $ausgabe = StringMid($ausgabe, StringInStr($ausgabe, "-", 0, -5) - 2, 17)
    EndFunc ;==>arp

    [/autoit] [autoit][/autoit] [autoit]

    Func ipconfig()
    $pid = Run(@ComSpec & " /c ipconfig /all", "", "", 2)
    $ausgabe = StdoutRead($pid)
    While ProcessExists($pid)
    Sleep(100)
    WEnd
    $ausgabe = StringMid($ausgabe, StringInStr($ausgabe, "Physikalische Adresse", 0, -1) + 36, 17)
    EndFunc ;==>ipconfig

    [/autoit]

    Als Anlage noch die Kodadatei und das ICON.

    MfG
    Der_Doc

    4 Mal editiert, zuletzt von Der_Doc (23. April 2009 um 16:45)

  • Hi,

    danke für die Anmerkungen.

    1. IP-Adressfelder sind nicht nötig da ich entweder den PC-Namen oder die IP eingeben kann.
    2. Bei ungültigen Eingaben "schmiert" das Script nicht ab, sonder gibt eine Fehlermeldung aus das der Host nicht existiert.
    Habe es trotzdem nochmal geändert. Nun kann eine neue Abfrage starten.
    3. Fehler ist behoben.


    Änderung siehe 1.er Post.


    MfG Der Doc

    2 Mal editiert, zuletzt von Der_Doc (20. März 2007 um 10:19)

  • Hallo!

    Ich habe mir das Tool mal angeschaut.

    Mir gefällt der Aufbau ist übersichtlich.

    Vllt setzt du noch ne Checkbox bei der man wählen kann ob man die Mac-Adresse in die Zwischenablage kopiert haben will.

    Mfg Aiden

  • Nicht schlecht!
    Leider gibt es bei mir anstatt der Mac aus: "Hostname. ".
    Ausserdem überdeckt die Checkbox deinen Namen usw.