Avatar billede mbm2016 Nybegynder
28. juni 2010 - 16:57 Der er 12 kommentarer og
1 løsning

C# NAT Traversal, Hole Punching

Hej eksperter,

Jeg har siddet og bakset i rigtig lang tid med et lille remoting program, hvorved det skal være muligt for mig at assistere mine venner med fjernskrivebord. Jeg har valgt at bruge remoting til at sende screenshots og tastetryk.

Det hele virker formidabelt, mit problem er bare at jeg gerne vil kunne oprette forbindelse til en person bag en NAT router imens jeg er bag en NAT router(P2P).

Jeg har prøvet at integrere STUNT osv. Men uden held. Jeg har også prøvet at læse artikler som, "How Skype gets around firewalls", Der er bare intet sted på nettet der egentlig viser reel kode, de viser kun teorier, og dem kan jeg ikke gennemskue kodemæssigt.

Det jeg gerne vil er som sagt at kunne fjernstyrer enhver computer på nettet, (Hvor mit program selvfølgelig er installeret)

På forhånd mange tusinde tak
Magnus
Avatar billede Spotgun Seniormester
28. juni 2010 - 22:40 #1
Jeg kunne forestille mig at følgende ville fungere. Har dog ikke testet det, men det skulle være relativt simpelt at lave et proof of concept.

1) Du har server-delen af dit remote-software installeret hos dig, som lytter på en bestemt port, f.eks. 9000.
2) Du har forwardet port 9000 ind til din pc, i din egen firewall.
3) Klienten beder om support, og klient-delen af din software pakke kontakter din WAN ip på port 9000.
4) Din serverdel opfanger nu forbindelsen, og du har klientens WAN-ip + port tilgængelig, som du nu kan kommunikere frit med.

Jeg forventer at det vil fungere, da de fleste firewalls accepterer svar på trafik som er initieret inde fra deres egen LAN side. På den måde skal du ikke bekymre dig om at prikke hul i klientens firewall, da trafikken (dvs. din support session) startes af klienten selv. Det er ham der tager kotakt til dig.
Avatar billede Syska Mester
29. juni 2010 - 07:54 #2
Jeg tror ikke det er problemet for sprøger.

Jeg tror han vil gøre det hele udenom config af firewall :-)

mvh
Avatar billede Spotgun Seniormester
29. juni 2010 - 09:39 #3
Hvis det er tilfældet, så må det vel være nødvendigt at introducere en tredjepart. F.eks. en server som accepterer indgående forbindelser på port 80, og derefter forbinder de to brugere.

Men hvis man er ude i den løsning, kan man vel lige så godt benytte sig af TeamViewer. :)
Avatar billede Syska Mester
29. juni 2010 - 10:52 #4
Helt enig spotgun, 3 parts server hvor det hele går igennem er nok det nemmeste.

Jeg har engang læst omkring hole punching, men kan ikke huske det hele ... og det er noget ala det som Skype bruger, men som mbm skriver, er der ingen kode eksempler, kun teorien bag.

Men tror vi må vente til sprøger vender tilbage. TeamViewer virker i hvert fald godt ... men altid sjovere med egne programmer, hvis de også virker :-)
Avatar billede mbm2016 Nybegynder
29. juni 2010 - 16:44 #5
Hey guys,

tak for jeres indlæg :)

Spotgun det er præcist det jeg har prøvet at gøre, hvor jeg i min routers firewall og windows firewall har tilladt port 6600, og jeg har også prøvet UpnP, men uden held.

Og ja jeg ville gerne udenom manual konfiguration af firewall og NAT router, da dette program gerne skulle kunne distribueres :)

Og egne programmer er helt klart det sjoveste, og sejeste ! :D

Jeg bruger selv TeamViewer, men ville godt se om jeg kunne lave det samme, og måske endda bedre. Og så integrere det i java så mobiltelefoner også kunne få det :D

Det med en 3 parts løsning, ved jeg ikke helt hvordan jeg skal gøre, hvordan får jeg en ny offentlig ip til min anden computer, som så er direkte forbundet med nettet, ingen NAT router, hvorpå den lytter på port 80 eller noget?

Når klient A og B forbinder med serveren og fortæller den at disse skal forbindes, så får de vel kun indirekte forbindelse, da serveren jo skal "forwarde" data mellem dem?

På forhånd mange tak
Avatar billede Syska Mester
29. juni 2010 - 23:55 #6
Hvis du ikke kan få simple port forwarding til at virke, så ville jeg starte der ... du skal du bruge lige meget hvad for en løsning du vælger, med mindre du sætte den direkte på nettet.

Du får ikke bare en offentlig IP mere, kontakt til ISP og hør dem ad om de vil give dig en mere ... men forvent de vil have betaling for det :-)

Nej, korrekt, forbindelse vil gå mellem 3. parts server ... men den skal vist alligevel bruges til Hole punching hvis du går den vej. Men ellers kunne den server jo bare stå som repearter ... og sende data frem og tilbage ... nemmeste løsning til at starte med.

Hvis du har problemer med forward ... så lav et simpelt program som lytter på en TCP port ... og prøv med telnet.
telnet tip port
ex:
telnet 192.168.1.100 6600

Så kan du jo se i din C# app om den kommer en forbindelse ind. Overstående skal selvf være din offentlige IP som din router har ... og personen der prøver skal selvf ikke være på LAN siden af dit net.

Tror det var svar på det meste.
Avatar billede mbm2016 Nybegynder
30. juni 2010 - 12:55 #7
Hej Buzzzz,

Jeg har forwardet port 51329 til 51329 på 192.168.0.10 som er min computers faste ip.

Jeg har også lavet et program som lytter på 192.168.0.10:51329
Men når jeg prøver at oprette forbindelse til min eksterne ip, på port 51329, så kan den ikke.

Derfor gik jeg ind i routerens setup og så at min Internet ip adress, hvilken jeg går ud fra er den eksterne, var sat til 192.168.1.61, hvilket jeg fidner meget mærkeligt.

Jeg har en hel masse andet udstyr forbundet under bordet og det ser også ud som om jeg har flere routere eller sådan noget og en Netopia PSTN, og en Linksys Voip.

Den router jeg roder rundt med er en Cisco Linksys.
Avatar billede Spotgun Seniormester
01. juli 2010 - 14:55 #8
Så er det jo ikke længere et C# spørgsmål, men et spørgsmål om hjælp til opsætning af din router. Prøv at oprette det i en anden kategori, så kommer du nok lidt nærmere en løsning du kan udvikle videre på. :)
Avatar billede mbm2016 Nybegynder
01. juli 2010 - 22:51 #9
Nemlig ja :D
Avatar billede Syska Mester
03. juli 2010 - 00:51 #10
Avatar billede Syska Mester
03. juli 2010 - 00:51 #11
Skulle gerne give dig den eksterne,

192.168. nettet er private og bruges derfor ikke på nettet.
Avatar billede mbm2016 Nybegynder
09. juli 2010 - 01:42 #12
Ja men min router siger at min eksterne ip er 192.168.1.61 den burde jo sige det samme som myip.dk
Avatar billede Syska Mester
09. juli 2010 - 01:51 #13
ja og nej,

Mener stofa engang har haft noget mærkeligt med at give kunder 10.0.0.1 på routerens eksterne side ...

Men den ip myip.dk giver dig, omverdenen ser dig komme fra ... så stol på den.

Du må kigge et forkert sted på din router, tvivler på den IP er din eksterne på din router.

Hvad for en router og hvem er din ISP ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester