Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Προσπαθώντας να κάνω μια εφαρμογή η οποία θα διαβάζει ζεύγη (ip, port) και θα ξεκινά αντίστοιχα TcpListener μου γεννήθηκε η απορία πως μπορώ, πριν να ξεκινήσω τον TcpListener, να ελέγξω την εγκυρότητα τόσο της ip όσο και της port.

Με μια γρήγορη ματιά στο internet για την Ip βρήκα :

string input = "your IP address goes here";

    IPAddress address;
    if (IPAddress.TryParse(input, out address))
    {
        switch (address.AddressFamily)
        {
            case System.Net.Sockets.AddressFamily.InterNetwork:
                // we have IPv4
                break;
            case System.Net.Sockets.AddressFamily.InterNetworkV6:
                // we have IPv6
                break;
            default:
                // umm... yeah... I'm going to need to take your red packet and...
                break;
        }
    }

ή

public Boolean CheckIPValid(String strIP)
        {
            //  Split string by ".", check that array length is 3
            char chrFullStop = '.';
            string[] arrOctets = strIP.Split(chrFullStop);
            if (arrOctets.Length != 4)
            {
                return false;
            }
            //  Check each substring checking that the int value is less than 255 and that is char[] length is !> 2
            Int16 MAXVALUE = 255;
            Int32 temp; // Parse returns Int32
            foreach (String strOctet in arrOctets)
            {
                if (strOctet.Length > 3)
                {
                    return false;
                }

                temp = int.Parse(strOctet);
                if (temp > MAXVALUE)
                {
                    return false;
                }
            }
            return true;
        }

ή

public bool IsValidIP(string addr)
{
    //create our match pattern
    string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.
    ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$";
    //create our Regular Expression object
    Regex check = new Regex(pattern);
    //boolean variable to hold the status
    bool valid = false;
    //check to make sure an ip address was provided
    if (addr == "")
    {
        //no address provided so return false
        valid = false;
    }
    else
    {
        //address provided so use the IsMatch Method
        //of the Regular Expression object
        valid = check.IsMatch(addr, 0);
    }
    //return the results
    return valid;
}

Για δε το θέμα του εύρους της port κάπου βρήκα ότι πρέπει να χρησιμοποιούνται τιμές από 1024 έως 65536.

 

Ποια μέθοδο μου προτείνετε από τις παραπάνω ή αν έχετε κάποια άλλη καλύτερη ?

Συμφωνείται για το εύρος τιμών της port που ανέφερα ?

Δημοσ.

1. Καταλαβαίνεις ποιά η διαφορά ανάμεσα στις μεθόδους που δείχνεις; (btw η δεύτερη είναι τελείως για πέταμα) Αλλιώς και που θα σου προτείνουμε κάτι πώς θα ξέρεις αν λέμε βλακείες ή όχι;

2. Τα ports είναι από 0 μέχρι 65535 (όχι -36). Αν δεν είσαι administrator μπορείς να χρησιμοποιήσεις μόνο >= 1024.

Δημοσ.

@defacer

Ευχαριστώ για την απάντηση. Να ξεκαθαρίσω αρχικά ότι είμαι χομπίστας και αρχάριος στον προγραμματισμό αλλά μου αρέσει να το ψάχνω. Για μένα και οι 3 προτάσεις παραπάνω κάτι μου έλεγαν σχετικά με αυτό που έψαχνα. Ακόμα και η 2η που την θεωρείς για πέταμα σπάει το string στα 4 και ελέγχει εάν οι επιμέρους 4 τιμές είναι μεγαλύτερες του 255 (έχει κι αυτό την λογική του ...). Στην 3η να πω την αλήθεια δεν έχω καταλάβει γιατί δημιουργεί αυτό το Regular Expression object και μετά γιατί τσεκάρει εάν IsMatch με την παρεχόμενη ip. Η πρώτη για μένα είναι πιο ξεκάθαρη παρέχοντας στην IpAddress.TryParse την προς εξέταση ip και εξάγοντας μια διεύθυνση στην οποία ελέγχει σε ποια family ανήκει. Εάν κάτι τέτοιο ισχύει σημαίνει ότι είναι έγκυρη η διεύθυνση (για μένα ....).

 

Σχετικά με το εύρος των ports να καταλήξουμε επειδή δεν είναι σίγουρο ότι το πρόγραμμα θα το τρέχει user με δικαιώματα admin ότι το εύρος θα είναι από 1024 έως 65535. 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...