Oggetto networkstream

lunedì 06 febbraio 2006 - 17.35

Jumpa Profilo | Junior Member

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

>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

>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

>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

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

>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/
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5