Hallllliiii halloo, habe einen chat server ....aber der Funzt nur über lan....
Wie mach ich jetzt das der Server ans Netzt geht (ports) und der Client sich mit dem Port verbindet??
Wenn möglich sollen die momentanen Admin befehle bleiben....
Der Server:
Code:
#Include <ButtonConstants.Au3>
#Include <EditConstants.Au3>
#Include <GUIConstantsEx.Au3>
#Include <StaticConstants.Au3>
#Include <WindowsConstants.Au3>
#Include <File.Au3>
#Include <String.Au3>
#NoTrayIcon
Opt ('GUIOnEventMode', 1)
Global $Max = 10, $Socket[$Max + 1], $User[$Max + 1], $Server = -1, $Admin = -1, $Admin_Pw = 'password', $Connected = 0
For $A = 1 To $Max
$Socket[$A] = -1
$User[$A] = -1
Next
$GUI = GUICreate ('Server Settings', 180, 100, -1, -1, -1, 128)
GUISetOnEvent ($GUI_EVENT_CLOSE, '_Exit')
GUICtrlCreateGroup ('', 5, 0, 170, 94)
$IP = GUICtrlCreateInput (@IpAddress1, 12, 13, 100, 21, 1)
$Port = GUICtrlCreateInput (50, 117, 13, 50, 21, 1)
$Start = GUICtrlCreateButton ('Start', 12, 39, 46, 20, $WS_GROUP)
GUICtrlSetOnEvent ($Start, '_Start')
$Stop = GUICtrlCreateButton ('Stop', 63, 39, 49, 20, $WS_GROUP)
GUICtrlSetState ($Stop, $GUI_DISABLE)
GUICtrlSetOnEvent ($Stop, '_Stop')
$Pw = GUICtrlCreateInput ($Admin_Pw, 12, 65, 100, 21, BitOr (1, $ES_PASSWORD))
$Set = GUICtrlCreateButton ('Set Pw', 118, 66, 49, 20, $WS_GROUP)
GUICtrlSetOnEvent ($Set, '_Set')
GUISetState (@SW_SHOW)
WinSetOnTop ($GUI, '', 1)
While 1
If $Server <> -1 Then
If $Connected < $Max Then
$Accept = TcpAccept ($Server)
If $Accept <> -1 Then
If _IsBanned (_SocketGetIP ($Accept)) = 0 Then
$Open = _Open ()
$Timer = TimerInit ()
Do
Sleep (15)
$Recv = TcpRecv ($Accept, 1000000)
Until $Recv <> '' Or TimerDiff ($Timer) >= 500
If $Recv <> '' Then
If _Check ($Recv) = 1 Then
$User[$Open] = $Recv
$Socket[$Open] = $Accept
$Connected = $Connected + 1
_SendAll ('[%Time] ' & $User[$Open] & ' has connected.')
Else
TcpSend ($Accept, 'Error:Username.Exists;')
Sleep (250)
TcpCloseSocket ($Accept)
EndIf
Else
TcpCloseSocket ($Accept)
EndIf
Else
TcpSend ($Accept, 'Error:IP.Banned;')
Sleep (250)
TcpCloseSocket ($Accept)
EndIf
EndIf
ElseIf $Connected = $Max Then
$Accept = TcpAccept ($Server)
If $Accept <> -1 Then
$Timer = TimerInit ()
Do
Sleep (15)
$Recv = TcpRecv ($Accept, 1000000)
Until $Recv <> '' Or TimerDiff ($Timer) >= 500
Sleep (250)
TcpSend ($Accept, 'Error:Max.Connections;')
TcpCloseSocket ($Accept)
EndIf
EndIf
For $A = 1 To $Max
If $Socket[$A] <> -1 And $User[$A] <> -1 Then
$Recv = TcpRecv ($Socket[$A], 1000000)
If @Error Then _Disconnect ($A)
If $Recv <> '' Then
If StringLeft ($Recv, 6) = '.admin' Then
If $Admin <> -1 Then
TcpSend ($Socket[$A], '[%Time] Server : An admin is already logged in.')
Else
If StringTrimLeft ($Recv, 7) == $Admin_Pw Then
$Admin = $User[$A]
_SendAll ('[%Time] ' & $User[$A] & ' is now an admin.')
Else
TcpSend ($Socket[$A], '[%Time] Server : Incorrect admin password.')
EndIf
EndIf
ElseIf StringLeft ($Recv, 7) = '.logout' Then
If $User[$A] == $Admin Then
$Admin = -1
_SendAll ('[%Time] ' & $User[$A] & ' is no longer an admin.')
Else
TcpSend ($Socket[$A], '[%Time] Server : You do not have this power.')
EndIf
ElseIf StringLeft ($Recv, 5) = '.kick' Then
If $User[$A] == $Admin Then
$Who = StringTrimLeft ($Recv, 6)
If $Who = $Admin Then
TcpSend ($Socket[$A], '[%Time] Server : You cannot kick an admin.')
ElseIf _UserGetSocket ($Who) <> -1 Then
_Disconnect (_UserGetSocket ($Who))
Else
TcpSend ($Socket[$A], '[%Time] Server : User does not exist.')
EndIf
Else
TcpSend ($Socket[$A], '[%Time] Server : You do not have this power.')
EndIf
ElseIf StringLeft ($Recv, 6) = '.stats' Then
$Stats = @CRLF & 'Total Online : ' & $Connected & @CRLF
For $B = 1 To $Max
If $Socket[$B] <> -1 And $User[$B] <> -1 Then
$Stats = $Stats & '[' & $B& '] ' & $User[$B] & @CRLF
EndIf
Next
TcpSend ($Socket[$A], $Stats)
ElseIf StringLeft ($Recv, 3) = '.ip' Then
If $User[$A] == $Admin Then
$Who = StringTrimLeft ($Recv, 4)
$wID = _UserGetSocket ($Who)
If $wID <> -1 Then
TcpSend ($Socket[$A], '[%Time] Server : ' & $Who & "'s IP : " & _SocketGetIP ($Socket[$wID]))
Else
TcpSend ($Socket[$A], '[%Time] Server : User does not exist.')
EndIf
Else
TcpSend ($Socket[$A], '[%Time] Server : You do not have this power.')
EndIf
ElseIf StringLeft ($Recv, 4) = '.ban' Then
If $User[$A] == $Admin Then
$Who = StringTrimLeft ($Recv, 5)
$wID = _UserGetSocket ($Who)
If $Who = $Admin Then
TcpSend ($Socket[$A], '[%Time] Server : You cannot ban an admin.')
ElseIf $wID <> -1 Then
$IP = _SocketGetIP ($Socket[$wID])
FileWriteLine ('Banned.txt', $IP)
For $B = 1 To $Max
If $Socket[$B] <> -1 And $User[$B] <> -1 Then
If _SocketGetIP ($Socket[$B]) = $IP Then _Disconnect ($B)
EndIf
Next
_SendAll ('[%Time] IP : ' & $IP & ' has been banned.')
Sleep (500)
TcpSend ($Socket[$A], '.log Ban Added : Username : ' & $Who & ', IP : ' & $IP)
Else
TcpSend ($Socket[$A], '[%Time] Server : User does not exist.')
EndIf
Else
TcpSend ($Socket[$A], '[%Time] Server : You do not have this power.')
EndIf
ElseIf StringLeft ($Recv, 6) = '.unban' Then
If $User[$A] == $Admin Then
$IP = StringTrimLeft ($Recv, 7)
If _IsBanned ($IP) = 1 Then
_Remove ($IP)
_SendAll ('[%Time] IP ' & $IP & ' is un-banned.')
Sleep (500)
TcpSend ($Socket[$A], '.log Ban Removed : ' & $IP)
Else
TcpSend ($Socket[$A], '[%Time] Server : ' & $IP & ' is not banned.')
EndIf
Else
TcpSend ($Socket[$A], '[%Time] Server : You do not have this power.')
EndIf
Else
_SendAll ('[%Time] ' & $User[$A] & ' says : ' & $Recv)
EndIf
EndIf
EndIf
Next
EndIf
Sleep (15)
WEnd
Func _IsBanned ($Data)
For $A = 1 To _FileCountLines ('Banned.txt')
If FileReadLine ('Banned.txt', $A) = $Data Then Return 1
Next
Return 0
EndFunc
Func _Remove ($IP)
$Count = _FileCountLines ('Banned.txt')
If $Count = 1 And FileReadLine ('Banned.txt', 1) = $IP Then
FileDelete ('Banned.txt')
ElseIf $Count > 0 Then
For $A = 1 To $Count
$Line = FileReadLine ('Banned.txt', $A)
If $Line <> $IP Then FileWriteLine ('Banned_Temp.txt', $Line)
Next
EndIf
FileCopy ('Banned_Temp.txt','Banned.txt', 1)
FileDelete ('Banned_Temp.txt')
EndFunc
Func _SocketGetIP ($Data)
Local $Struct, $Return
$Struct = DllStructCreate ('short;ushort;uint;char[8]')
$Return = DllCall ('Ws2_32.dll','int','getpeername','int', $Data, 'ptr', DllStructGetPtr ($Struct), 'int*', DllStructGetSize($Struct))
If @Error Or $Return[0] <> 0 Then Return 0
$Return = DllCall ('Ws2_32.dll','str','inet_ntoa','int', DllStructGetData ($Struct, 3))
If @Error Then Return 0
$Struct = 0
Return $Return[0]
EndFunc
Func _UserGetSocket ($Data)
For $A = 1 To $Max
If $User[$A] = $Data Then Return $A
Next
Return -1
EndFunc
Func _Check ($Data)
For $A = 1 To $Max
If $User[$A] = $Data Then Return 0
Next
Return 1
EndFunc
Func _Disconnect ($ID)
_SendAll ('[%Time] ' & $User[$ID] & ' has disconnected.')
If $User[$ID] = $Admin Then $Admin = -1
TcpCloseSocket ($Socket[$ID])
$Socket[$ID] = -1
$User[$ID] = -1
$Connected = $Connected - 1
EndFunc
Func _SendAll ($Msg)
For $A = 1 To $Max
If $Socket[$A] <> -1 And $User[$A] <> -1 Then
TcpSend ($Socket[$A], $Msg)
EndIf
Next
EndFunc
Func _Open ()
For $A = 1 To $Max
If $Socket[$A] = -1 And $User[$A] = -1 Then Return $A
Next
EndFunc
Func _Start ()
If GUICtrlRead ($IP) == '' Or GUICtrlRead ($Port) == '' Then Return @Error
TcpStartUp ()
$Server = TcpListen (GUICtrlRead ($IP), GUICtrlRead ($Port))
If $Server = -1 Or @Error Then
WinSetOnTop ($GUI, '', 0)
Sleep (100)
MsgBox (16, 'Fatal Error','Unable to start the server, change your settings and try again.')
WinSetOnTop ($GUI, '', 1)
TcpCloseSocket ($Server)
_Reset ()
Else
GUICtrlSetState ($IP, $GUI_DISABLE)
GUICtrlSetState ($Port, $GUI_DISABLE)
GUICtrlSetState ($Start, $GUI_DISABLE)
GUICtrlSetState ($Stop, $GUI_ENABLE)
EndIf
EndFunc
Func _Stop ()
TcpCloseSocket ($Server)
$Server = -1
$Connected = 0
$Admin = -1
_Reset ()
EndFunc
Func _Set ()
$Admin_Pw = GUICtrlRead ($Pw)
EndFunc
Func _Reset ()
For $A = 1 To $Max
If $Socket[$A] <> -1 Or $User[$A] <> -1 Then
TcpCloseSocket ($Socket[$A])
$Socket[$A] = -1
$User[$A] = -1
EndIf
Next
TcpShutDown ()
GUICtrlSetState ($IP, $GUI_ENABLE)
GUICtrlSetState ($Port, $GUI_ENABLE)
GUICtrlSetState ($Start, $GUI_ENABLE)
GUICtrlSetState ($Stop, $GUI_DISABLE)
EndFunc
Func _Exit ()
Exit
EndFunc
Eigentlich sollte der auch über's Netz gehen.
Falls du 'n Router hast, musst du den Server (zumindest geht das so bei meinem Router) auf deine interne Netzwerk IP forwarden.
normalerweise hat ein router eine firewall und die soll ja verhindern, dass jemand von außerhalb großartig ohne genehmigung auf die rechner zugreift.
wenn du deinen rechner wie einen (chat-)server nutzen willst, musst du die entsprechenden ports öffnen.
es wäre aber definitiv schlauer, den chat auf nem richtigen server laufen zu lassen, denn dafür sind die teile ja da.
nur dann kommst du wohl nicht mit autoit weiter
Übers Hacken :D 09/04/2010 - WarRock - 4 Replies Also wir alle und ich glaube diese komischen macher von wr wollen ja das die hacker verschwinden..oder besser gesagt das es keine hacks mehr gibt warum machen sie dann nicht regelmäßig ein update...z.B jeden 2-3 tag ein hackshield update
Übers Reinstellen! 03/23/2010 - Combat Arms Hacks, Bots, Cheats & Exploits - 5 Replies Ich finde es eigentlich mehr alls unnötig das man files oder dateien
mehr alls drei mal in einem forum reinstellt .
Deshalb fand ich es mal angebrach dies irgendwie zu regeln!
Zum beispiel:
Das man reinschreibt das der erst Realest ist ,
Oder das schon in den forum drin ist.
Wie weis ich net dehalb bitte ich euch um eure hilfe.
Jeder der kein mist reinschreibt grigt ein tanks!!!!
zb.:New Publication= Neue Herausgabe
50 € monatlich übers Internet 03/09/2010 - Tutorials - 10 Replies Auf dieser Seite:
GProfit - Warum nicht?
könnt ihr mindestens . 50€ monatlich verdienen, kostenlos!
Es isn neuer Paidmailer der viel schneller vergütet als sonstige andere.
Hier ein paar Gutscheine die ihr beim Anmeldungen eingeben könnt, um sofort Euros zu bekommen:
GUTSCHEINE:
Übers AH von Stormwind! 03/31/2007 - WoW Exploits, Hacks, Tools & Macros - 12 Replies Hallo!
Mein Imba Video XD
Lied: Korn - Twisted Transistor (Falls es jmd wissen will -.-) !