Hallo Community!
Ich habe hier ein Script welche zwar läuft aber nach 4-5 Tagen mit einer Fehlermeldung sich aufhängt.
Die Fehlermeldung habe ich grade leider nicht zu Hand werde sie aber nachreichen.
Viellecht erkennt ja einer von euch woran es liegen könnte.
Leider ist es für euch schwer das Script zu testen da das Script datenbankgestüzt ist.
Spoiler anzeigen
#NoTrayIcon
#include <Array.au3>
#include <MySQL.au3>
$objErr = ObjEvent("AutoIt.Error", "MyErrFunc")
[/autoit] [autoit][/autoit] [autoit]Dim $oldOnline[1]
Dim $newOnline[1]
TCPStartup()
[/autoit] [autoit][/autoit] [autoit]If RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers', 'MySQL ODBC 3.51 Driver') <> 'Installed' Then
MsgBox(0, 'Treiber', 'Der Treiber, der benöigt wird um eine Datenbankverbindung herzustellen, fehlt!')
Exit
EndIf
While 1
$ini_read = 'ihk-emden'
_status()
$sql = _MySQLConnect("user", "pass", "db", "ip")
_Query($sql, "TRUNCATE users")
For $i = 1 To UBound($newOnline) - 1
_Query($sql, "INSERT INTO users (pcname, MAC, scan_time) VALUE ('" & $newOnline[$i] & "', '" & _arp(TCPNameToIP($newOnline[$i])) & "', '" & @HOUR & ":" & @MIN & ":" & @SEC & "')")
Next
_MySQLEnd($sql)
Sleep(120000)
WEnd
TCPShutdown()
Func check_online()
;By GtaSpider
Local $stdBuffer, $sreBuffer
$Pid = Run(@ComSpec & ' /c net view /DOMAIN:' & $ini_read, '', @SW_HIDE, 2 + 4)
While Not @error
$stdBuffer &= StdoutRead($Pid)
WEnd
$sreBuffer = StringRegExp($stdBuffer, "\\\\([a-zA-Z0-9-_]*)", 3)
$usre = UBound($sreBuffer)
ReDim $sreBuffer[$usre + 1]
_ArrayPush($sreBuffer, $usre, 1)
ProcessClose($Pid)
Return $sreBuffer
EndFunc ;==>check_online
Func _arp($pcip)
If $pcip = @IPAddress1 Then
Return _GetMACFromIP()
Else
$Pid = Run(@ComSpec & " /c arp -a " & $pcip, "", "", 2)
$ausgabe = StdoutRead($Pid)
While ProcessExists($Pid)
Sleep(100)
WEnd
$return = StringMid($ausgabe, StringInStr($ausgabe, "-", 0, -5) - 2, 17)
Return StringReplace($return, "-", ":")
EndIf
EndFunc ;==>_arp
Func _status()
ReDim $oldOnline[1]
ReDim $newOnline[1]
;//DB List
$sql = _MySQLConnect("user", "pass", "db", "ip")
$oUer = _Query($sql, "SELECT pcname FROM users;")
With $oUer
While Not .EOF
_ArrayAdd($oldOnline, .Fields("pcname" ).value)
.MoveNext
WEnd
EndWith
_MySQLEnd($sql)
;//NetView
$pcs = check_online()
For $i = 1 To $pcs[0]
If Ping($pcs[$i]) > 0 Then
_ArrayAdd($newOnline, $pcs[$i])
EndIf
Next
For $i = 1 To UBound($newOnline) - 1
If _ArraySearch($oldOnline, $newOnline[$i]) = -1 Then
$sql = _MySQLConnect("user", "pass", "db", "ip")
_Query($sql, "INSERT INTO log (DATE, TIME, EVENT, USER) VALUE ('" & @MDAY & "." & @MON & "." & @YEAR & "', '" & @HOUR & ":" & @MIN & ":" & @SEC & "', 'Online: " & $newOnline[$i] & "' , 'Scan');")
_Query($sql, "UPDATE profile SET LastLogin='" & @MDAY & "." & @MON & "." & @YEAR & "', Status='On' WHERE pcname='" & $newOnline[$i] & "';")
_MySQLEnd($sql)
EndIf
Next
For $i = 1 To UBound($oldOnline) - 1
If _ArraySearch($newOnline, $oldOnline[$i]) = -1 Then
$sql = _MySQLConnect("user", "pass", "db", "ip")
_Query($sql, "INSERT INTO log (DATE, TIME, EVENT, USER) VALUE ('" & @MDAY & "." & @MON & "." & @YEAR & "', '" & @HOUR & ":" & @MIN & ":" & @SEC & "', 'Offline: " & $oldOnline[$i] & "' , 'Scan');")
_Query($sql, "UPDATE profile SET Status='Off' WHERE pcname='" & $oldOnline[$i] & "';")
_MySQLEnd($sql)
EndIf
Next
EndFunc ;==>_status
Func _GetMACFromIP($sIP = @IPAddress1, $mode = 1)
Local $xMac, $xMACSize
Local $i, $s, $r, $xIP
$xMac = DllStructCreate("byte[6]")
$xMACSize = DllStructCreate("int")
DllStructSetData($xMACSize, 1, 6)
$r = DllCall("Ws2_32.dll", "int", "inet_addr", _
"str", $sIP)
$xIP = $r[0]
$r = DllCall("iphlpapi.dll", "int", "SendARP", "int", $xIP, "int", 0, "ptr", DllStructGetPtr($xMac), "ptr", DllStructGetPtr($xMACSize))
$s = ""
If $mode = 0 Then
For $i = 0 To 5
$s &= Hex(DllStructGetData($xMac, 1, $i + 1), 2)
Next
ElseIf $mode = 1 Then
For $i = 0 To 5
If $i Then $s = $s & ":"
$s = $s & Hex(DllStructGetData($xMac, 1, $i + 1), 2)
Next
ElseIf $mode = 2 Then
For $i = 0 To 5
If $i Then $s = $s & "-"
$s = $s & Hex(DllStructGetData($xMac, 1, $i + 1), 2)
Next
EndIf
Return $s
EndFunc ;==>_GetMACFromIP
Func MyErrFunc()
[/autoit] [autoit][/autoit] [autoit]$hexnum = Hex($objErr.number,
[/autoit] [autoit][/autoit] [autoit]MsgBox(0, "", "We intercepted a COM Error!!" & @CRLF & @CRLF & _
"err.description is: " & $objErr.description & @CRLF & _
"err.windescription is: " & $objErr.windescription & @CRLF & _
"err.lastdllerror is: " & $objErr.lastdllerror & @CRLF & _
"err.scriptline is: " & $objErr.scriptline & @CRLF & _
"err.number is: " & $hexnum & @CRLF & _
"err.source is: " & $objErr.source & @CRLF _
)
$cSql = 0
TCPSend($CLIENTSOCKET, '~exit')
Sleep(200)
Exit
EndFunc ;==>MyErrFunc
Ich hoffe es kann mir jemand helfen.
Mfg Aiden
bernd670: AutoIt-Tag's eingefügt!
bernd670: Zeile 25 erzeugt beim Highlighting noch einen Fehler! Vorübergehend auskommentiert!
bernd670: Fehler behoben!