[.NET] IPX Gateway schrijven

Pagina: 1
Acties:

  • El_Quedro
  • Registratie: September 2001
  • Laatst online: 04-08-2025

El_Quedro

Pininfarina

Topicstarter
Hallo allemaal!

Ik wilde een programma schrijven wat verschillende LAN protocollen over het internet pushte. (Voor bijvoorbeeld oude spellen die nog over IPX gaan, zoals o.a. Duke3D)

Ik was van plan om het programma in modes te laten draaien, server & client.
Deze zouden dan onderling verbonden zijn via TCP en zouden beide luisteren op het netwerk op het ingestelde protocol en port.

Nu wilde ik eerst proefdraaien, en dat ging al mis. Ik heb een FTP server op internet, en wilde het programma als test port 21 op lokaal laten openen, en zodra er een connectie binnen kwam, gelijk naar de bovengenoemde FTP server connecten.

De bytes die gewoonweg lokaal binnen kwam op port 21, duwde ik gelijk door naar de FTP Server.

Het eerste probleem was dat de bytes in een buffer worden gezet, en ik doodleuk de hele buffer doorstuurde, wat als gevolg gaf:
code:
1
550 Commandline too long


Dit is opgelost, ik knip de buffer af op de door de socket aangegeven aantal ge-received bytes.

maar nu gebeurdt er dit:
code:
1
2
3
4
BindToSocket: 127.0.0.1:2030
SERVER (28): 220 GammaFTP service ready
CLIENT (16): USER el_quedro
SERVER (23): 331 Password required


Nadat er om het password gevraagd wordt, wordt er niet meer gereageerd, de FTP client zegt dat er geen connectie gemaakt kan worden.

Wat ik niet snap is dat ie de 2e keer dat ie wat wilt versturen gaat er gewoonweg niet doorheen.

Zie ik volgens jullie iets fout bij het doorsturen, of heb ik te simpel nagedacht over het forwarden?

  • yodax
  • Registratie: Januari 2000
  • Laatst online: 28-04 08:47
Zou het kunnen dat je de client niet in PASV mode hebt staan? De data sessies worden normaal gesproken op aparte verbindingen gemaakt.

Ik weet dat het pas na het paswoord stuk is, maar het is het proberen waard.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

El_Quedro, ik denk dat het erg moeilijk wordt hier iets zinnigs over te zeggen met de informatie die je nu geeft. Ik kan op dit moment namelijk alleen zeggen: volgens mij doe je iets fout.

Laat wat code zien, debug zelf eens wat, pluis de structuur van je netwerk uit, enzovoorts.

My personal website


  • El_Quedro
  • Registratie: September 2001
  • Laatst online: 04-08-2025

El_Quedro

Pininfarina

Topicstarter
helaas, hetzelfde probleem.

Maar, in een game kan je het ook niet op 'PASV' zetten.

Je zou toch in principe gewoon de bytes moeten kunnen doorduwen en dat de Client denk dat de server lokaal is?

Anders zou het straks ook niet te realiseren zijn via IPX ben ik bang.

Zoals beloofd wat code:

hiermee haal ik de data binnen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    Private Sub Receive()
        'Try
        Dim arrBytes(255) As Byte
        Dim arrBytes2(0) As Byte
        Dim iNumOfBytes As Integer
        Do
            arrBytes.Clear(arrBytes, 0, iNumOfBytes)

            If Sock.ProtocolType = Net.Sockets.ProtocolType.Tcp Then
                iNumOfBytes = Sock.Receive(arrBytes, Net.Sockets.SocketFlags.None)
            ElseIf Sock.ProtocolType = Net.Sockets.ProtocolType.Udp Then
                iNumOfBytes = Sock.ReceiveFrom(arrBytes, Net.Sockets.SocketFlags.None, SockEP)
            End If

            Console.WriteLine("Received: " & iNumOfBytes)
            ReDim arrBytes2(iNumOfBytes)
            '            Array.Clear(arrBytes2, 0, iNumOfBytes)
            Array.Copy(arrBytes, arrBytes2, iNumOfBytes)



            TotalReceived += iNumOfBytes
            RaiseEvent eBytesReceived(arrBytes2, iNumOfBytes)
        Loop
        'Catch e As Exception
        '    MsgBox(e.Message & vbCrLf & e.Source, MsgBoxStyle.Critical)
        'End Try
    End Sub


hiermee verstuur ik het
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Sub Send(ByVal bytes() As Byte)
        'Try
        If Sock.Connected Then
            If Sock.ProtocolType = Net.Sockets.ProtocolType.Tcp Then
                TotalSend += Sock.Send(bytes)
            ElseIf Sock.ProtocolType = Net.Sockets.ProtocolType.Udp Then
                TotalSend += Sock.SendTo(bytes, SockEP)
            End If
        Else
            Console.WriteLine("Send(): There is no connection!")
        End If
        'Catch e As Exception
        '    MsgBox(e.Message & vbCrLf & e.Source, MsgBoxStyle.Critical)
        'End Try
    End Sub



de event
Deze is dus ook nog de andere kant op.
code:
1
2
3
4
5
6
    Public Sub MainClient_eBytesReceived(ByVal Bytes() As Byte, ByVal BytesReceived As Integer) Handles MainClient.eBytesReceived
        Console.WriteLine("Client (" & CStr(BytesReceived) & "): " & System.Text.ASCIIEncoding.ASCII.GetString(Bytes))
        MsgBox(BytesReceived)
        ServerConnection.Send(Bytes)
        Console.WriteLine("Client: Forwarded.")
    End Sub

[ Voor 81% gewijzigd door El_Quedro op 13-07-2004 10:26 ]


  • hammerhead
  • Registratie: April 2000
  • Laatst online: 21-05 07:47
Is FTP sowieso niet een extreem lastig protocol om door te sturen? Op het moment dat iemand een FTP server achter een firewall heeft staan levert dit altijd problemen op omdat er dus nog een dataverbinding over andere poorten opgezet moet worden.

Als je puur aan het testen bent om te kijken of je het tunneling verhaal goed aan de praat krijgt, zou je dan niet beter kunnen kijken naar een simpeler protocol wat slechts over 1 poort werkt? (bijv. HTTP)

[ Voor 30% gewijzigd door hammerhead op 13-07-2004 10:26 . Reden: tweede paragraaf toegevoegd ]

Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker


  • DaRealRenzel
  • Registratie: November 2000
  • Laatst online: 20-05 16:18

DaRealRenzel

Overtuigd Dipsomaan

euh...

zoek ergens eens twee oude NetWare 3.1 licenties, en zet die aan beide kanten van je verbinding.. Die twee doosjes laat je samen een IPTunnel opzetten en klaar is klara. oke, niet zo leerzaam als zelf proggen, maar het opzetten van een IPX tunneling stak over IP zal niet echt eenvoudig zijn

Nothing is a problem once you've debugged the code


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

hammerhead schreef op 13 juli 2004 @ 10:22:
Is FTP sowieso niet een extreem lastig protocol om door te sturen? Op het moment dat iemand een FTP server achter een firewall heeft staan levert dit altijd problemen op omdat er dus nog een dataverbinding over andere poorten opgezet moet worden.
Dat is een heel ander probleem, dat heeft gewoon met het forwarden van poorten te maken.

Maar ik zou ook eerst gewoon simple weg 1 pakketje proberen te forwarden. Maar opzich zolang jij al de eerste pakketje van FTP weet te forwarden, dan weet je al dat je goed zit.
Pagina: 1