• Hi Leute,
    wie schon öfter geschrieben bin ich Netzwerkadmin und schreibe eben gerne Tools die mir das Leben erleichtern.
    So entstand auch dieses nette Prog :D

    Vorraussetzung:
    Der PC, der abgefragt werden soll, muss mit SNMP nachinstalliert werden, sollte es nicht vorhanden sein.

    Beschreibung:
    NicError erklärt sich eigentlich von selber.
    Es liest per SNMP die Fehler der aktiven Netzwerkkarte aus und gibt diese in einem Listfeld zurück.

    Umgang:
    Der Umgang ist denkbar einfach, es muss entweder der PCname oder die IP, des Rechners eingegeben werden der abgefragt werden soll.
    Wenn keine Eingaben gemacht werden, wir "localhost" abgefragt.

    Eingebundene Programme:
    Folgende Programme habe ich eingebunden:
    - libsnmp.dll
    - snmpwalk.exe
    - snmpget.exe

    Quelltext:
    Da Programme eingebunden sind hänge ich den Quelltext nur zum anschauen mit an, da er nur mit Anpassungen funktioniert.

    Spoiler anzeigen
    [autoit]


    ;~ Author: <Der_Doc>
    ;~ Version: <NicError_1.35>
    ;~ AutoIt Version: 3.2.4.9
    ;~ Datum: 15.06.2007

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

    ;~ Beschreibung:
    ;~ Mit diesem Programm können nach die Fehler der Netzwerkkarte per SNMP ausgelesen werden.
    ;~ Hierbei ist es egal ob der Rechenr der abgefragt werden soll Windows oder Linux ist.

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

    ;~ Vorraussetzungen:
    ;~ Auf dem Rechner muss SNMP nachinstalliet werden.

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

    #include <string.au3>
    #include <array.au3>
    #include <GuiListView.au3>
    #include <GuiList.au3>
    #Include <GuiStatusBar.au3>
    #include <GUIConstants.au3>

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

    #compiler_icon="2220.ico"
    #compiler_outfile="NicError.exe"

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

    Dim $version = " NicError 1.35"
    Dim $author = "Der_Doc"

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

    ;~ Statusbar
    Dim $a_PartsRightEdge[2] = [150,-1]
    Dim $a_PartsText[2] = [$author&" 2007","Version: " &$version]

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

    ;~ Errors
    Dim $Input_Computername_read
    Dim $ifTable_array[5][20]
    Dim $lauf[20][3]
    $lauf[0][0] = "17"
    $lauf[1][0] = "2" ; ifName
    $lauf[1][1] = "Description"
    $lauf[2][0] = "3" ; ifType
    $lauf[2][1] = "Type"
    $lauf[3][0] = "4" ; ifMtu
    $lauf[3][1] = "Mtu"
    $lauf[4][0] = "5" ;ifSpeed
    $lauf[4][1] = "Speed"
    $lauf[5][0] = "6" ;ifSpeed
    $lauf[5][1] = "PhysAddress"
    $lauf[6][0] = "10" ;ifAddress
    $lauf[6][1] = "InOctets"
    $lauf[7][0] = "11" ;ifUcast
    $lauf[7][1] = "InUnicast"
    $lauf[8][0] = "12" ;ifNUcast
    $lauf[8][1] = "InNonUnicast"
    $lauf[9][0] = "13" ;ifDiscards
    $lauf[9][1] = "InDiscards"
    $lauf[10][0] = "14" ;ifErrors
    $lauf[10][1] = "InErrors"
    $lauf[11][0] = "16" ;ifAddress
    $lauf[11][1] = "OutOctets"
    $lauf[12][0] = "17" ;ifUcast
    $lauf[12][1] = "OutUnicast"
    $lauf[13][0] = "18" ;ifNUcast
    $lauf[13][1] = "OutNonUnicast"
    $lauf[14][0] = "19" ;ifDiscards
    $lauf[14][1] = "OutDiscards"
    $lauf[15][0] = "20" ;ifErrors
    $lauf[15][1] = "OutErrors"
    $lauf[16][0] = "21" ;ifErrors
    $lauf[16][1] = "OutQLen"
    $lauf[17][0] = "22" ;ifErrors
    $lauf[17][1] = "Specific"

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

    #Region ### START Koda GUI section ### Form=d:\autoitscripte\nicerror\nicerror.kxf
    $nicerror = GUICreate("NicError", 298, 463, -1, -1)
    $group = GUICtrlCreateGroup("", 8, 0, 273, 441)
    $lable = GUICtrlCreateLabel("Hostname oder IP eingeben", 34, 13, 136, 17)
    $Input_Computername = GUICtrlCreateInput("", 33, 31, 137, 21)
    $list = GUICtrlCreateList("", 33, 60, 230, 58, BitOR($WS_VSCROLL,$WS_BORDER))
    $ok = GUICtrlCreateButton("OK", 187, 29, 73, 25, $BS_DEFPUSHBUTTON)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ;~ ######################
    ;~ # Menue
    ;~ ######################

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

    $dateimenu = GUICtrlCreateMenu ("&Datei")
    $menueneu = GUICtrlCreateMenuitem ("Neu",$dateimenu)
    $separator1 = GUICtrlCreateMenuitem ("",$menueneu,1)
    $menueclose = GUICtrlCreateMenuitem ("Beenden",$dateimenu)
    $StatusBar1 = _GUICtrlStatusBarCreate ($nicerror, $a_PartsRightEdge, $a_PartsText)
    GUISetState(@SW_SHOW)
    $listview = GUICtrlCreateListView("Typ|Wert", 33, 115, 230, 300)
    _GUICtrlListViewSetColumnWidth ( $listview,0, 112 )
    _GUICtrlListViewSetColumnWidth ( $listview,1, 113 )
    file_install()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    del_file()
    Exit

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

    Case $menueclose
    del_file()
    Exit

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

    Case $ok
    SplashTextOn("","Bitte warten" ,"150","30","-1","-1",33,"Times New Roman","14","700")
    _GUICtrlListViewDeleteAllItems ($listview)
    GUICtrlSetData($list,"")

    $Input_Computername_read = GUICtrlRead($Input_Computername)

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

    if $Input_Computername_read ="" Then ; Wenn kein Computername eingegeben wurde wird der locale genommen.
    $Input_Computername_read = @ComputerName
    EndIf

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

    $ping_erg = Ping($Input_Computername_read,100)
    if $ping_erg > 0 then


    $ifNumber_OID = ".1.3.6.1.2.1.2.1.0"
    $ifIndex_OID = ".1.3.6.1.2.1.2.2.1.1"
    $ifTable_OID = ".1.3.6.1.2.1.2.2.1."

    $pid = Run(@ComSpec & " /c snmpget -v2c " & $Input_Computername_read & ' public ' &$ifNumber_OID, @TempDir, "", 2)
    $ifNumber = StdoutRead($pid)
    $ifNumber = StringMid($ifNumber, StringInStr($ifNumber, "=", 0,+1)+2,+1)

    $pid = Run(@ComSpec & " /c snmpwalk -v2c " & $Input_Computername_read & ' public ' &$ifIndex_OID, @TempDir, "", 2)
    $ifIndex = StdoutRead($pid)

    for $pos = 1 to $ifNumber
    $ifIndex_wert = StringMid($ifIndex,StringInStr($ifIndex,"=",0,$pos)+2,StringInStr($ifIndex,@CRLF,0,$pos) - StringInStr($ifIndex,"=",0,$pos)-2)

    $pid = Run(@ComSpec & " /c snmpget -v2c " & $Input_Computername_read & ' public ' &$ifTable_OID& "2." &$ifIndex_wert, @TempDir, "", 2)
    $ifDescr = StdoutRead($pid)
    $ifDescr_wert = StringMid($ifDescr,StringInStr($ifDescr,":")+2,StringInStr($ifDescr,@CRLF,0,-1) - StringInStr($ifDescr,":")-2)

    $ifDescr_name = _HexToString(StringStripWS ($ifDescr_wert,8))
    if @error Then
    $ifDescr_name = StringMid($ifDescr,StringInStr($ifDescr,"=")+2,StringInStr($ifDescr,@CRLF,0,-1) - StringInStr($ifDescr,"=")-2)
    $ifDescr_name = StringReplace($ifDescr_name,'"',"")
    EndIf
    _GUICtrlListInsertItem ($list, $ifDescr_name)


    for $i = 1 to $lauf[0][0]
    $pid = Run(@ComSpec & " /c snmpget -v2c " & $Input_Computername_read & ' public ' &$ifTable_OID&$lauf[$i][0]&"."&$ifIndex_wert, @TempDir, "", 2)
    $ifTable = StdoutRead($pid)

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

    $ifTable = StringReplace($ifTable, "Gauge: ", "")
    $ifTable = StringReplace($ifTable, "Hex: ", "")

    $ifTable_array[$pos][$i] = StringMid($ifTable, StringInStr($ifTable,"=")+2,StringInStr($ifTable,@CRLF) - StringInStr($ifTable,"=")-2)
    $ifTable_array[$pos][0] = StringStripWS ($ifDescr_wert,8)

    Next

    Next

    Else
    SplashOff()
    MsgBox(0,"","Rechner "& $Input_Computername_read &" existiert nicht!")
    EndIf
    SplashOff()
    case $list
    $ret = _GUICtrlListSelectedIndex ($list) ;Zeile im Listenfeld
    $ret += 1
    _GUICtrlListViewDeleteAllItems ($listview)

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

    for $i = 1 to $lauf[0][0]
    if $i = 1 then
    $ifTable_array[$ret][$i] = _HexToString(StringStripWS ($ifTable_array[$ret][$i],8))
    GUICtrlCreateListViewItem($lauf[$i][1] &" | " &$ifTable_array[$ret][$i],$listview)
    $i +=1
    EndIf
    GUICtrlCreateListViewItem($lauf[$i][1] &" | " &$ifTable_array[$ret][$i],$listview)

    Next

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

    case $menueneu
    _GUICtrlListViewDeleteAllItems ($listview)
    GUICtrlSetData($list,"")
    GUICtrlSetData($Input_Computername,"")

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


    EndSwitch
    WEnd

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

    Func file_install()
    FileInstall("..\include\prog\libsnmp.dll", @TempDir&"\libsnmp.dll",1)
    FileInstall("..\include\prog\snmpwalk.exe", @TempDir&"\snmpwalk.exe",1)
    FileInstall("..\include\prog\snmpget.exe", @TempDir&"\snmpget.exe",1)
    EndFunc

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

    Func del_file()
    FileDelete(@TempDir&"\libsnmp.dll")
    FileDelete(@TempDir&"\snmpwalk.exe")
    FileDelete(@TempDir&"\snmpget.exe")
    EndFunc

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

    Programm:
    Das Programm ist in einer Zip-Datei mit allen Datein im Ordner NicError enthalten. Nur ne exe draus machen und los geht es

    So genug ;)

    Lob und sowas natürlich bitte an mich :rock:


    MfG
    Der_Doc

  • Hallo,

    bei mir funktioniert das Porgramm nicht. Er findet die IP nicht.

    Aber wenn ich schon mal hier in dem Thread bin habe ich eine Frage an dich:

    Ich muss informationen von einem Drucker auslesen, also ob er online ist oder nicht. Bis jetzt habe ich das mit getif gemacht und nachher mit snmpget in eine Textdatei geschrieben.
    Habe aber keine brauchbaren Werte gefunden. WEIL! Die Drucker über einen Printserver laufen mit 3 Ports. Im Webinterface werden die 3 angezeigt. Ich weiss nicht wo ich nach suchen muss um an die Ports zu kommen. Weisst du da vielleicht mehr?

    So long,

    Kevin

  • Hallo,

    nein das kann ich leider nicht, da die Drucker an einem Printserver angeschlossen sind.

    Den Printserver kann ich anpingen. Aber wie komme ich weiter an die anderen Drucker, die haben keine Netzwerkkarte.......Deswegen dachte ich, man muss doch über die Oids da dran kommen.

    Hoffe auf eine Antwort


    So long,

    Kevin

  • Hi,
    natürlich bekommt man von dem Drucker mit SNMP infos, wenn er snmp unterstüzt!

    Du müsstest mit einem Toll die Werte auslesen.
    Was du auch versuchen gannst ein snmpwalk auf dei IP des Druckers. und die Ausgabe in eine Textdatei schreiben. Solltest die vorher aber noch die massenden Mib´s einladen sonst bekommst du Zahlen und Werte, weist aber net was sie bedeuten.

    MfG
    Der_Doc

  • Hallo,

    ja der Drucker unterstüzt SNMP.

    Ich lese die Werte mit getIf aus.

    Was meinst du mit den MIBS, was ist das und wie lade ich diese ein?
    Denn ich bekomme nur Zahlen raus. Also das meisste sind Zahlen.

    Ich hole mir dann Infos über snmpwalk.exe und schreibe das in eine TXT Datei.

    Bisher kriege ich über SNMP ein paar Werte mit denen ich was anfangen kann.

    NAME; UP TIME; IP; STELLPLATZ; Wie viel Labels er gedruckt hat

    Das sind so welche mit denen ich was anfangen kann.

    Es muss aber noch viel mehr möglichkeiten geben, wie z.B. Toner-Status; Status des Druckers etc....

    Wäre cool wenn du mir helfen könntest.

    So long,

    Kevin

    Einmal editiert, zuletzt von Kevin (5. November 2007 um 08:50)

  • Hi,
    du solltest mal so einen Auszug der Textdatei posten (5 -10 Zeilen), damit ich weis wie du es angezeigt bekommst.

    Erklärung der Begriffe:
    SNMP
    MIB´s
    Die sogenannten Mib´s bekommst du vom Hersteller der Geräte. In deinem Fall der Druckerhersteller.


    So unter snmp.exe gibt es doch eine Hilfe, da ist angegeben wie man die MIB´s in die SNMPabfrage einbinden kann.

    Einfach mal noch nen bischen googlen und wenn noch Fragen sind wieder melden.

    MfG
    Der_Doc

  • hmm....ich suche gerade auf der internetseite von Intermec https://autoit.de/www.intermec.com und finde da aber keine MIB´S. Intermec ist der Hersteller der Drucker ist PM4i

    Ich werde mal weitersuchen vielleicht findest du da ja was dann kannst du mir bescheid geben und ich auch. Vielleicht rufe ich gleich mal beim Support an oder so.

    hier mal ein kleiner ausschnitt:

    Spoiler anzeigen

    So long,

    McKayo

    Einmal editiert, zuletzt von Kevin (5. November 2007 um 11:51)

  • Hi Kevin,

    also die Zeilen 1 bis 10 (in deinem Beispiel) sind sogenannte "Standard Mib´s" dieser Baum ist für alle Geräte die SNMP unterstützen gleich. Hierfür brauchst du keine Mib´s extra laden.

    Die anderen Zeilen sind "Enterprise" Mibs die der Hersteller selber schreibt und pflegt. Hier findet man spezial angaben zu den Geräten. Dies macht aber nicht jeder Hersteller.

    Wenn du mibs brauchst dann schau mal bei den aktuellen Firmwaredateien, manchmal sind die da dabei.

    MfG
    Der_Doc

  • Einen wunderschönen Guten morgen an alle!

    was gibt es schöneres als ein kleines Erfolgserlebnis? NICHTS!

    Und das schon so früh am Morgen!

    Ich habe mir auf der Seite von Intermec einen Intermec Network Manager mal Installiert. Nach dem ich bei der Firmware nix gefunden habe, habe ich einfach mal die Ordner durchsucht und siehe da!, da gibt es doch tatsächlich eine Mib Datei!


    Sie heisst zwar Mibs.xml aber da stehen ein paar Oids drin!

    Hier meine Mibs die ich nun gefunden habe:

    Spoiler anzeigen

    zusätzlich stehen da noch mehr Drucker von Intermec!

    Juhuuuuu...nach langen im Dunkeln suchen......endlich was gefunden;) :musik1: :tassen: :party4: :klatschen:


    So long,

    Kevin

  • Hallo, ja ich weiß das Thema ist über ein Jahr alt aber dennoch ^^

    Ich muss leider sagen das dein Programm wohl nicht mehr mit der neueren Autoit Version funktioniert.

    Spoiler anzeigen

    Könntest du dein Skript mal als Kompilierte Version anbieten?

    Grüße

  • Äm also ich muss dich leider bis Montag oder Dienstag vertrösten. :S

    Habe eine zu alte Autoitversion unter der funktionierte es noch. Nun nach dem Update auf die neue CHAOS :cursing:
    Montag bin ich aber wieder in der Firma, da meine ich das Skript schon mal angepasst zu haben.

    MfG
    Der_Doc