LostOblivion Skrevet 8. februar 2010 Del Skrevet 8. februar 2010 (endret) Hei, Jeg skal forwarde porter automatisk via UPnP i filtjener-programmet mitt, og jeg har koden under, som funker, men kun for min subnet IP. private void NotifySubnetUp() { NATUPNPLib.UPnPNATClass upnpnat = new NATUPNPLib.UPnPNATClass(); NATUPNPLib.IStaticPortMappingCollection port_mappings = upnpnat.StaticPortMappingCollection; if (port_mappings == null) return; try { port_mappings.Add(m_port, "TCP", m_port, "192.168.0.102", true, "SSFT"); } catch (Exception) { } } Problemet er at jeg ikke vet hvordan jeg kan finne den lokale IP-en som er gunstig å gi som argument. Jeg tenkte å finne min lokale IP på subnettet til default gateway, men er usikker på hvor jeg finner dette i C#.NET? Endret 8. februar 2010 av LostOblivion Lenke til kommentar
GeirGrusom Skrevet 8. februar 2010 Del Skrevet 8. februar 2010 var nets = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces() Nå har jeg aldri gjort dette før, men etter det jeg vet, så kan du i det minste gå igjennom denne listen og lete etter et network interface med en gateway eller DHCP server satt, så burde det være riktig nettverk. Lenke til kommentar
LostOblivion Skrevet 13. februar 2010 Forfatter Del Skrevet 13. februar 2010 (endret) Jeg kommer ikke fram til noen automatisk oppdaget IP som er lik den jeg har på subnettet til gatewayen min (192.168.0.102)...lurer på hvordan Skype gjør det... Hadde vært dritkult om jeg fant IP-en til den som kjører programmet og får åpnet opp med UPnP, men foreløpig gir jeg snart opp. Kuriositet: Hva gjør man om det er flere gateways mellom host og internett? Eller funker UPnP kun på subnettet? :/ Endret 13. februar 2010 av LostOblivion Lenke til kommentar
dabear Skrevet 14. februar 2010 Del Skrevet 14. februar 2010 hadde behov for å finne ipadresse til noen hyper-v vmwer her i går. Da fikk jeg hostname som input, men en kan benytte System.net.DNS.getHostName() uten parametere for å finne hostname til pcen. Deretter kan en bruke dnsoppslag for å finne ip-adressene. Her har jeg noe kode som demonstrerer: $dns = [System.net.DNS] $hostname = $dns::getHostName() $ips = $dns::getHostEntry($hostname).AddressList $ips | foreach{ echo $_.toString() } PS C:\Users\bjorninge> $dns = [system.net.DNS]PS C:\Users\bjorninge> $hostname = $dns::getHostName() PS C:\Users\bjorninge> $ips = $dns::getHostEntry($hostname).AddressList PS C:\Users\bjorninge> $ips | foreach{ >> echo $_.toString() >> } >> fe80::7d3a:a403:c1b:XXXX%XX fe80::3d5f:ef19:724a:XXXX%XX 10.0.0.2 192.168.56.1 PS C:\Users\bjorninge> Så får du ta jobben med å konvertere til c# sjøl Lenke til kommentar
LostOblivion Skrevet 14. februar 2010 Forfatter Del Skrevet 14. februar 2010 Det der gav meg ingenting utover det jeg allerede vet, men takk uansett. Det er ikke noe problem å finne IP-adressene til lokalmaskinen jf DNS, men jeg må finne den riktige som er en del av subnettet til default gateway til lokalmaskinen. Hvis default gateway er 192.168.0.1 og DNS sier bl a 192.168.0.102, så er siste den IP-adressen jeg er ute etter. Jeg prøver å finne subnet-masken til default gateway og så finne hvilken av DNS-IP-ene for lokalmaskinen som er på dette subnettet ved å maske default gateway og de DNS sier, og sammenligne disse på den gamle måten. Men finner ikke subnet masken til default gateway noe sted. Dessuten er jeg litt overrasket at dette skulle være så utrolig vanskelig bare for å finne lokale subnet IP-en som leder til internett. Er nok mangel på kompetanse fra min side og... Lenke til kommentar
GeirGrusom Skrevet 15. februar 2010 Del Skrevet 15. februar 2010 Hvor mange gatewayer har du? Dessuten kan du lett finn hva som er lokalnett IP-er og ikke. http://en.wikipedia.org/wiki/IP_address#IP...ivate_addresses Lenke til kommentar
LostOblivion Skrevet 17. februar 2010 Forfatter Del Skrevet 17. februar 2010 Ja om jeg finner ip4 masken til ip4 gatewayen ja, men den finner jeg ikke i .NET, desverre. :/ Kunne noen forsøkt seg på kode som finner lokalnett ip-en i subnettet vha. .NET? Lenke til kommentar
Hårek Skrevet 23. februar 2010 Del Skrevet 23. februar 2010 (endret) Jeg jobbet nettopp med noe tilsvarende problemstilling. Her er en kodesnutt som viser relevant informasjon om nettverksinterface. foreach (NetworkInterface iface in NetworkInterface.GetAllNetworkInterfaces()) { Console.WriteLine("IPInterfaceProperties " + iface.Name + " Opstatus " + iface.OperationalStatus); if (iface.NetworkInterfaceType == NetworkInterfaceType.Ethernet) { IPInterfaceProperties ipprps = iface.GetIPProperties(); IPAddressCollection ipaddcol = ipprps.DhcpServerAddresses; foreach (IPAddress ipa in ipaddcol) { Console.WriteLine("DHCP Server address " + ipa.ToString()); } IPAddressCollection ipaddcol2 = ipprps.DnsAddresses; foreach (IPAddress ipa in ipaddcol2) { Console.WriteLine("DNS Server address " + ipa.ToString()); } GatewayIPAddressInformationCollection gatewayAddr = ipprps.GatewayAddresses; foreach (GatewayIPAddressInformation gwipad in gatewayAddr) { Console.WriteLine("Gateway address " + gwipad.Address); } Console.WriteLine("DNS suffix " + ipprps.DnsSuffix + " DNS enabled " + ipprps.IsDnsEnabled); IPv4InterfaceProperties ip4pprs = ipprps.GetIPv4Properties(); Console.WriteLine("DHCP enabled " + ip4pprs.IsDhcpEnabled); UnicastIPAddressInformationCollection uniCast = ipprps.UnicastAddresses; if (uniCast.Count > 0) { foreach (UnicastIPAddressInformation uni in uniCast) { Console.WriteLine(" Unicast Address ......................... : {0}", uni.Address); Console.WriteLine(" Unicast Mask ......................... : {0}", uni.IPv4Mask); } } } Console.WriteLine(""); Endret 23. februar 2010 av Hårek Lenke til kommentar
LostOblivion Skrevet 27. februar 2010 Forfatter Del Skrevet 27. februar 2010 Takk, Hårek. Jeg endte opp med å bruke den første ip4-adressen i unicast-lista for det første interfacet. Dette er jo ikke nødvendigvis alltid den riktige da... :/ Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå