Avatar billede skovs Nybegynder
25. maj 2009 - 20:34 Der er 7 kommentarer og
1 løsning

Subnetter og Networklist

Hej derude

Er der nogen der kender en class til VB.NET/C#,
som kan beregne subnetmask og lave en networklist svarende til det man kan lave på: http://www.subnetmask.info

Jeg har kort sagt behov for, at kunne udregne subnetmaskine udfra class A/B/C og antallet af noder. Ligesom jeg udfra dette kan lave en network list svarende ca. til nedenstående:

List of networks
for the 15.20.10.0 network with the subnet mask 255.255.255.192

Network    Hosts    From            to              Broadcast Address
15.20.10.0    15.20.10.1    15.20.10.62    15.20.10.63
15.20.10.64    15.20.10.65    15.20.10.126    15.20.10.127
15.20.10.128    15.20.10.129    15.20.10.190    15.20.10.191
15.20.10.192    15.20.10.193    15.20.10.254    15.20.10.255

Er der nogen der har et bud????
Avatar billede arne_v Ekspert
25. maj 2009 - 22:06 #1
using System;
using System.Net;

namespace E
{
    public class Program
    {
        private static int Str2Int(string s)
        {
            return IPAddress.NetworkToHostOrder(BitConverter.ToInt32(IPAddress.Parse(s).GetAddressBytes(), 0));
        }
        private static string Int2Str(int v)
        {
            return (new IPAddress(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(v)))).ToString();
        }
        public delegate void NetHandler(string net, string start, string end, string bcst);
        public static void Test(string net, string mask, NetHandler nh)
        {
            int inet = Str2Int(net);
            int imask = Str2Int(mask);
            int i = inet;
            while(i <= (inet | 0x000000FF))
            {
                nh(Int2Str(i), Int2Str(i + 1), Int2Str(i - 1 + ~imask), Int2Str(i + ~imask));
                i += (1 + ~imask);
            }
        }
        private static void Print(string net, string start, string end, string bcst)
        {
            Console.WriteLine(net + " " + start + " " + end + " " + bcst);
        }
        public static void Main(string[] args)
        {
            Test("15.20.10.0", "255.255.255.192", Print);
            Console.ReadKey();
        }
    }
}
Avatar billede skovs Nybegynder
26. maj 2009 - 09:39 #2
Umiddelbart syntes jeg det ser ud til, at dit eksempel forudsætter at man kender subnetmask. Jeg vil gerne, at man får beregnet korrekt subnetmask på basis af IP og om man forcer a,b,c oktaven........
Avatar billede arne_v Ekspert
26. maj 2009 - 20:25 #3
Korrekt.

Men automatisk beregning af subnet mask udfra adresse har vaeret foraeddet siden 1985.

Men hvis du insisterer:

        public static string MaskBefore1985(string net)
        {
            int first = IPAddress.Parse(net).GetAddressBytes()[3];
            if(first < 128)
            {
                return "255.0.0.0";
            }
            else if(first < 192)
            {
                return "255.255.0.0";
            }
            else
            {
                return "255.255.255.0";
            }
        }
Avatar billede skovs Nybegynder
26. maj 2009 - 21:28 #4
Har du set siden: http://www.subnetmask.info

Jeg ønsker blot en funktion som overholder IPver4, hvilket subnetmask.info gør og hvor man kan låse class a, b, c oktav i adressen. Jeg er ikke helt sikker på du forstår mit ønske.....
Avatar billede arne_v Ekspert
27. maj 2009 - 00:36 #5
Den side bruger A, B og C class.

De blev erstattet af CIDR i 1985.
Avatar billede arne_v Ekspert
27. maj 2009 - 00:38 #6
Jeg kan godt lave en metode som kan splitte et vilkårligt net fremfor ovenstående som kun splitter grupper af 256.
Avatar billede skovs Nybegynder
07. oktober 2010 - 16:23 #7
Har nu løst det bla. med inspiraton fra dig arne. Så du får points.
Avatar billede arne_v Ekspert
07. oktober 2010 - 16:52 #8
saa smider jeg et svar
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
Kurser inden for grundlæggende programmering

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