j'avais fait un petit prog ya qq temps pour récupérer le syslog de mon modem/routeur, il a été librement inspiré du FTP_Lib de jesaisplusqui, si ca peut t'aider :
Code : Tout sélectionner
;-************************************
;- NE PAS ACTIVER LE MODE UNICODE
;-************************************
#_Debug_ = 0
OpenConsole()
InitNetwork()
#CRLF = Chr(13) + Chr(10)
#MaxLines = 600
#Value_Time_Out = 2500
Global CLog.s
Global serveur$ = "10.0.0.138" ;mettre le nom du serveur ou adr IP
Global port.l = 23
Global Longueur.l = 32000
Global CnxID.l
Global temp.s = "@", Temp_Txt.s, Txt.s, Text.s, SysLog.s
Global indice_tableau.l = 0, GetDATA.l, pos.l, Result.l
Global Dim Lignes.s(#MaxLines)
;-************************************
#nbcmd = 15
#nbopt = 9
Global Dim num_cmd.l(#nbcmd)
Global Dim lib_cmd.s(#nbcmd)
Global Dim num_opt.l(#nbopt)
Global Dim lib_opt.s(#nbopt)
Restore DATA_Command
For i = 0 To #nbcmd
Read num_cmd(i)
Next i
Restore DATA_Command_lib
For i = 0 To #nbcmd
Read lib_cmd(i)
Next i
Restore DATA_Option
For i = 0 To #nbopt
Read num_opt(i)
Next i
Restore DATA_Option_lib
For i = 0 To #nbopt
Read lib_opt(i)
Next i
;-************************************
Procedure.s Clean_DATA(TT.s,longueur.l)
Protected deb.l, Cmd_TXT.s, Cmd.l, i.l, j.l, k.l
; Print("HEX:")
; For i = 1 To longueur
; Print(RSet(Hex(Asc(Mid(TT,i,1))),2,"0")+" ")
; Next i
; PrintN("")
;PrintN("Clean_DATA ("+tt+","+Str(longueur)+")")
deb = 1
Cmd_TXT.s = ""
While deb <= longueur
Cmd = Asc(Mid(TT,deb,1))
If Cmd = 255 ;AIC
Cmd_TXT = ""
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; For k = deb To deb+2
; Cmd = Asc(Mid(TT,k,1))
; Print("|"+RSet(Hex(Cmd),2,"0")+"|")
; For i = 0 To #nbcmd
; If num_cmd(i) = Cmd : Print(" "+lib_cmd(i)+" ") : EndIf
; Next i
;
; For j = 0 To #nbopt
; If num_opt(j) = Cmd : Print(" "+lib_opt(j)+" ") : PrintN("") : EndIf
; Next j
; Next k
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
deb + 2
Else
Cmd_TXT + Chr(Cmd)
EndIf
deb + 1
Wend
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; PrintN("ASC:|"+Cmd_TXT+"|")
; PrintN("----------------------")
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ProcedureReturn Cmd_TXT
EndProcedure
Procedure.s GET_Data(connection.l)
Protected Time_Out.l = #Value_Time_Out
*BufferMemoire = AllocateMemory(Longueur)
If *BufferMemoire > 0
Command.s = "" : Text.s = ""
Repeat
t1 = ElapsedMilliseconds()
Size = -1
Repeat
Result = NetworkClientEvent(CnxID)
If Result <> 2 : Delay(10) : EndIf
t2 = ElapsedMilliseconds()-t1
Until (Result = 2 Or t2 >= Time_out)
If Result > 0 ; = 2
Taille = ReceiveNetworkData(CnxID, *BufferMemoire, Longueur)
Size = Taille
If Size
Text + PeekS(*BufferMemoire,Size)
EndIf
Else
; PrintN("Break - Size = "+Str(size))
Break
EndIf
If size > 150
Time_out = 1000
Else
Time_out = 50
EndIf
Until size < 1
If Text
Command=Clean_DATA(Text,Taille)
; PrintN("*** Command ***")
Else
Command = "<NO_DATA>"
; PrintN("Command = "+Command)
EndIf
FreeMemory(*BufferMemoire)
ProcedureReturn Command
Else
PrintN("*** ERROR: Cannot allocate memory !")
End
EndIf
EndProcedure
;-************************************
Print("PROTOCOLE TELNET ==> ")
PrintN("http://www.scit.wlv.ac.uk/~jphb/comms/telnet.html") : PrintN("")
CnxID = OpenNetworkConnection(Serveur$, Port)
PrintN("ID Connexion : "+Str(CnxID))
PrintN("----------------------")
If CnxID
b$="" : c$=""
PrintN("=>TELNET on "+serveur$+" PORT "+Str(Port)+" ...")
GET_Data(CnxID)
user$=GET_Data(CnxID)
If UCase(Left(user$,4)) = "USER"
PrintN("=>Sending Username ...")
SendNetworkString(CnxID, "<user_name>"+#CRLF)
Delay(1500)
SendNetworkString(CnxID, "<password>"+#CRLF)
PrintN("=>Sending Password ...")
Delay(1500)
SendNetworkString(CnxID, "systemlog show"+#CRLF)
PrintN("=>List of SystemLog (wait a while)...")
Delay(1500)
GetDATA = #True ; On charge les données du routeur
Txt = GET_Data(CnxID)
SysLog = Txt
pos = FindString(Txt, #CRLF, 1) ; Obligatoire de faire une 1ère recherche
While GetDATA ; Tant que l'on a pas "=>"
temp=Mid(Txt,1,pos-1) ; on extrait la partie avant le #CRLF
If txt = "<NO_DATA>"
GetDATA = #False ; On arrête de charger les données du routeur
Else
Txt = GET_Data(CnxID)
SysLog + Txt
EndIf
Wend
PrintN("Syslog = "+SysLog)
;-************************************
PrintN("")
Else
PrintN("*** ERROR: Cannot find label 'Username' !"+#CRLF+"DUMP:"+user$)
End
EndIf
CloseNetworkConnection(CnxID)
Else
PrintN("Connexion a echoué !")
EndIf
PrintN("")
Print("Appuyez sur [Entree] pour quitter")
Input()
CloseConsole()
End
DataSection
DATA_Command:
; nb=16
Data.l 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
DATA_Command_lib:
Data.s "SE","NOP","DM","BRK","IP","AO","AYT","EC","EL","GA","SB"
Data.s "WILL","WONT","DO","DONT","-IAC-"
DATA_Option:
; nb=10
Data.l 1,3,5,6,24,31,32,33,34,36
DATA_Option_lib:
Data.s "ECHO","SUPPRESS_GO_AHEAD","STATUS","TIMING_MARK","TERMINAL_TYPE"
Data.s "WINDOW_SIZE","TERMINAL_SPEED","REMOTE_FLOW_CONTROL","LINEMODE"
Data.s "ENVIRONMENT_VARIABLES"
EndDataSection