Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Oggetto networkstream
lunedì 06 febbraio 2006 - 17.35
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Jumpa
Profilo
| Junior Member
176
messaggi | Data Invio:
lun 6 feb 2006 - 17:35
eccomi con un nuovo rompicapo!! giusto per tenere allenate le menti,
bene questa volta il giochino quale è ? sto configurando un firewall cisco pix 501 in automatico tramite la classe messa in oggetto!
bene che dire tutto va una bomba se lancio il codice di botto mi configura il mondo in 3 nanosecondi... mbe voi vi chiederete... emmoche vole questo???
non riesco ad intercettare le riposte del fiirewall, ovvero le risposte che mi vengono dall'oggetto networkstream sono obsolete... ovvero non mi riporta l'ultima risposta del firewall..... mettoun pezzo di codice che facciamo prima
Dim NetStream As NetworkStream
Dim MyResponse As String
tcpC = New TcpClient
Try
tcpC.Connect(ip_firewall, 23)
Catch MyEx As Exception
'Errore durante la connessione
End Try
'recupera il messaggio inviato dal firewall
Try
NetStream = tcpC.GetStream()
MyResponse = GetResponse(NetStream)
Catch MyEx As Exception
' s è verificato un errore
End Try
' Il primo messaggio invia la user name
MyResponse = SendCommand(NetStream, "username" & vbCrLf)
' e qui dovrei ricevere dallo stream la stringa "Password:"
' Il secondo messaggio invia la password
MyResponse = SendCommand(NetStream, "password" & vbCrLf)
' e qui dovrei ricevere dallo stream una stringa su due righe:
'Type help or '?' for a list of available commands.
'pix501>
vado avanti lanciando un altra manciata di comandi ed ad un certo punto vorrei intercettare la risposta,
il fatto è che se vado in esecuzine step by step quindi molto lentamente la riposta la intercetto,
se vado in modalita esecuzione normale, quindi velocissima non intercetto un bel niente!!!
p.s. uso queste due funzioni di supporto
Private Function GetResponse(ByRef NetStream As NetworkStream)
Dim bytes(tcpC.ReceiveBufferSize) As Byte
NetStream.Read(bytes, 0, bytes.Length)
'NetStream.r()
Dim ReturnData As String = Encoding.ASCII.GetString(bytes)
Return ReturnData
End Function
Private Function SendCommand(ByRef NetStream As NetworkStream, ByVal sToSend As String)
Dim bData() As Byte = Encoding.ASCII.GetBytes(sToSend.ToCharArray)
NetStream.Write(bData, 0, bData.Length())
Return GetResponse(NetStream)
End Function
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
lun 6 feb 2006 - 22:45
>eccomi con un nuovo rompicapo!! giusto per tenere allenate le
>menti,
>bene questa volta il giochino quale è ? sto configurando un firewall
>bene che dire tutto va una bomba se lancio il codice di botto
>mi configura il mondo in 3 nanosecondi... mbe voi vi chiederete...
>emmoche vole questo???
Ciao,
allora premesso che ci sono altri sistemi (da sistemista) ben più veloci ed affidabili di questo (vedi script) o altre utilities fornite dai produttori dei Firewall, ti posso dire come procedo io.
Con due modi, usando Socket (classe Socket) Sincroni o Asincroni. Ti sconsiglio vivamente la classe TcpClient.
Ti consiglierei in questo caso di usare Socket Sincroni che funzionano a botta e risposta.
Scrivi byte, leggi byte, scrivi byte, leggi byte.
Naturalmente devi sapere preventivamente come risponde l'apparato.
Diversamente se fai una Read() e l'apparato non invia più niente il software va in blocking.
Sull'SDK di .NET ci sono esempi dell'uso di Socket semplici che possono fare al caso tuo.
Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Jumpa
Profilo
| Junior Member
176
messaggi | Data Invio:
mar 7 feb 2006 - 11:08
>Ciao,
>allora premesso che ci sono altri sistemi (da sistemista) ben
>più veloci ed affidabili di questo (vedi script) o altre utilities
>fornite dai produttori dei Firewall, ti posso dire come procedo
>io.
questo è vero!! e poi per dirla tutta mi piace da matti quando si entra a lavorare in consolle per fare ste cosine,
ma questo pacchetto che sto cercando di costruire rientra in un progetto come dire cucito su misura!
>
>Con due modi, usando Socket (classe Socket) Sincroni o Asincroni.
>Ti sconsiglio vivamente la classe TcpClient.
>Ti consiglierei in questo caso di usare Socket Sincroni che funzionano
>a botta e risposta.
>Scrivi byte, leggi byte, scrivi byte, leggi byte.
partendo dal presupposto che so bene come deve rispondere l'apparato diciamo che l'idea del botta e risposta è proprio quella che piace di piu anche a me, ed è proprio quello che stavo tentando di fare... ho spulciato un po nell'sdk ma non ho trovato ( forse mi si sta abbassando la vista ) qualcosa che fa di questo... sai mica darmi un indicazione un po piu diretta??
-------------------------
Follow the White Rabbit...
http://www.jumpa.org
-------------------------
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 9 feb 2006 - 17:16
>partendo dal presupposto che so bene come deve rispondere l'apparato
>diciamo che l'idea del botta e risposta è proprio quella che
>piace di piu anche a me, ed è proprio quello che stavo tentando
>di fare... ho spulciato un po nell'sdk ma non ho trovato ( forse
>mi si sta abbassando la vista ) qualcosa che fa di questo...
> sai mica darmi un indicazione un po piu diretta??
Non è molto difficile, ti riporto un esempio dal Framework SDK della classe Socket:
Dim lipa As IPHostEntry = Dns.Resolve("host.contoso.com")
Dim lep As New IPEndPoint(lipa.AddressList(0), 11000)
Dim s As New Socket(lep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
Try
s.Connect(lep)
Catch e As Exception
Console.WriteLine(("Exception Thrown: " + e.ToString()))
End Try
Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
' Blocks until send returns.
Dim i As Integer = s.Send(msg, 0, msg.Length, SocketFlags.None)
' Blocks until read returns.
Dim bytes(1024) As Byte
s.Receive(bytes, 0, s.Available, SocketFlags.None)
'Displays to the screen.
Console.WriteLine(Encoding.ASCII.GetString(bytes))
s.Shutdown(SocketShutdown.Both)
s.Close()
End Sub 'SendReceive4
Si connette all'host host.contoso.com sulla porta 11000 e poi manda con la Send() dei dati di test e riceve in seguito la risposta con la Receive() quello che devi fare tu, è continuare a mandare dati Send() e riceverli Receive() tutto qui.
ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Jumpa
Profilo
| Junior Member
176
messaggi | Data Invio:
sab 11 feb 2006 - 13:56
mi sa che il server telnet cisco è un po str....ino,
ho eseguito le istruzioni che mi hai postato e ricevo sempre lo stesso problema.. .non viene interpretato a modino quello che mi ritorna.. ovvero ogni tanto ritorn qualcosa ogni tanto no!!!!
vabbe per il momento ho implementato la mia procedura.. al buio!! diciamo che la gestioen delel rispsote la faccio a priori!!!!
speramo bene!!!
-------------------------
Follow the White Rabbit...
http://www.jumpa.org
-------------------------
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
lun 13 feb 2006 - 15:44
>mi sa che il server telnet cisco è un po str....ino,
>ho eseguito le istruzioni che mi hai postato e ricevo sempre
>lo stesso problema.. .non viene interpretato a modino quello
>che mi ritorna.. ovvero ogni tanto ritorn qualcosa ogni tanto
>no!!!!
L'implementazione di soluzioni con Socket non è banale. Ci sono tempi di trasferimento di byte da un endpoint all'altro quindi non sempre nel buffer c'è ciò che ti aspetti.
Di solito per esempio quando si lavora con POP3 il server a fine risposta manda sempre la sequenza \r\n.\r\n.
Quindi tu puoi concatenare tutti i byte arrivati fino a che nella risposta c'è quella sequenza. A quel punto hai i tuoi dati e sei sicuro che siano terminati.
Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !