Seite 1 von 1

Verbessrungsverschläge zu meinem Programm

Verfasst: Donnerstag 22. August 2019, 13:52
von Jankie
Hey, wir hatten letztens das Thema in der Schule, ob Computer in einem Netzwerk mit unterschiedlicher Subnetzmaske korrespondieren. Dafür habe ich ein kleines Programm geschrieben. Allerdings denke ich das ich viele Sachen unsauber gelöst habe und das ganze auch fehleranfällig ist. Daher wollte ich euch mal fragen, ob ihr mal drüber lesen könntet und mir Verbesserungen nennen könnt oder wie ich etwas vereinfachen könnte oder ob ich Denkfehler drin habe.

#edit: Da das ganze nur zu Lernzwecken erstellt wurde und nie wirklich eingesetzt wird von mir, habe ich das Exception handling weg gelassen.

Hier mal als Beispiel veranschaulicht, wie der Abgleich erfolgen soll.

Code: Alles auswählen

192.168.13.15/255.255.0.0

11000000.10101000.00001101.00001111 IPv4 in Binärdarstellung
&&&&&&&&.&&&&&&&&.&&&&&&&&.&&&&&&&& Verknüpfung der Binärzahlen mit AND
11111111.11111111.00000000.00000000 Subnetztmaske in Binärdarstellung

11000000.10101000.00000000.00000000 Netz-ID 1



192.168.11.2/255.255.0.0

11000000.10101000.00001011.00000010 IPv4 in Binärdarstellung
&&&&&&&&.&&&&&&&&.&&&&&&&&.&&&&&&&& Verknüpfung der Binärzahlen mit AND
11111111.11111111.00000000.00000000 Subnetztmaske in Binärdarstellung

11000000.10101000.00000000.00000000 Netz-ID 2



11000000.10101000.00000000.00000000 Netz-ID 1
11000000.10101000.00000000.00000000 Netz-ID 2

Passt
und hier der Code zu meinem Skript:

Code: Alles auswählen

def convert_int_to_binar(number):
    return f"{number:08b}"

def ip_to_binary(ip_adress):
    ip_in_binary = []
    seperated_ip = ip_adress.split(".")
    for byte in seperated_ip:
        ip_in_binary.append(convert_int_to_binar(int(byte)))
    return "".join(ip_in_binary)
        
def get_subnetmask_bits(binary_subnetmask):
    return binary_subnetmask.count("1")
    
def knot_ip_bits_and_subnetmask_bits_with_and(ip, subnetmask):
    net_id = []
    ip_in_binary = ip_to_binary(ip)
    subnetmask_in_binary = ip_to_binary(subnetmask)
    for index, x in enumerate(ip_in_binary):
        if x == "1" and subnetmask_in_binary[index] == x:
            net_id.append("1")
        else:
            net_id.append("0")
    return "".join(net_id)
    
def compare_net_id(first_net_id, second_net_id, subnetmask):
    print(first_net_id[:get_subnetmask_bits(ip_to_binary(subnetmask))])
    print(second_net_id[:get_subnetmask_bits(ip_to_binary(subnetmask))])
    if first_net_id[:get_subnetmask_bits(ip_to_binary(subnetmask))] == second_net_id[:get_subnetmask_bits(ip_to_binary(subnetmask))]:
        print("YES")
    else:
        print("NO")
    
def main():
    ip_first_computer = input("Bitte die IP des ersten Rechners eingeben: ")
    subnetmask_first_computer = input("Bitte die Subnetzmaske des ersten Rechners eingeben: ")
    ip_second_computer = input("Bitte die IP des zweiten Rechners eingeben: ")
    subnetmask_second_computer = input("Bitte die Subnetzmaske des zweiten Rechners eingeben: ")
    compare_net_id(knot_ip_bits_and_subnetmask_bits_with_and(ip_first_computer, subnetmask_first_computer),
                    knot_ip_bits_and_subnetmask_bits_with_and(ip_second_computer,subnetmask_second_computer),
                    subnetmask_first_computer)
        
if __name__ == '__main__':
    main()

Re: Verbessrungsverschläge zu meinem Programm

Verfasst: Donnerstag 22. August 2019, 14:31
von Sirius3
Hast Du Dir schon das ipaddress-Modul angeschaut?
Bei Masken würde man direkt mit den 32Bit-Integer-Zahlen rechnen.

Re: Verbessrungsverschläge zu meinem Programm

Verfasst: Donnerstag 22. August 2019, 15:53
von Jankie
Okay, habe mir jetzt das ipaddress Modul angeschaut....hätte ich aber besser vorher mal gemacht. Danke für den Tip.