Skip to content
Snippets Groups Projects
1_feladat.md 5.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    # 1. feladat
    
    ## 1.a interaktív mód
    
    A Python nyelv gyakran használt tudományos és matematika algoritmusok implementálására. Írassuk ki mérföldben 3 tizedes jegy pontossággal egy félmaraton hosszát az interpreter segítségével!
    
    Megoldás:
    
    ```bash
    $ python3
    >>> dist = 21097.5
    >>> dist
    21097.5
    >>> mile = 1.6093
    >>> mile
    1.6093
    >>> dist_in_miles = (dist / 1000) / mile
    >>> dist_in_miles
    13.109737152799354
    >>> print("Distance of a half maraton in miles is: {:.3f}".format(dist_in_miles))
    Distance of a half maraton in miles is: 13.110
    ```
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    Ahogy látható, itt elmentem változókba a kapott konstansokat, majd megformázva irattam ki a kapott értéket. 
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    ## 1.b Feladat - Külső modul használata 
    
    **Feladat:** Írassuk ki a *google.com* (nem kell a *www* elé!) tartománynévhez rendelt levelező szervereket (MX rekord)! 
    
    Megoldás:
    
    ```bash
    $ python3
    >>> import dns.resolver
    >>> answers = dns.resolver.query('google.com', 'MX')
    <stdin>:1: DeprecationWarning: please use dns.resolver.resolve() instead
    >>> for rdata in answers:
    ...   print('Host', rdata.exchange, 'has preference', rdata.preference
    ...
    Host aspmx.l.google.com. has preference 10
    Host alt3.aspmx.l.google.com. has preference 40
    Host alt4.aspmx.l.google.com. has preference 50
    Host alt1.aspmx.l.google.com. has preference 20
    Host alt2.aspmx.l.google.com. has preference 30
    ```
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    Miután beimportáltam a megfelelő könyvtárat, lekérdeztem a `google.com` `MX` rekordjait. A depricated warningot 
    figyelmen kívül hagyva egy `for` ciklussal kiíratom a kapott adatokat.
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    ## 1.c Feladat - Saját DNS modul 
    
    **Feladat:** Hosszabb kódok esetén az interaktív interpreter használata körülményes. Írjunk Python modult `dns_tool.py` 
    néven az előző feladatban megvalósított funkcióhoz!
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    A forráskód:
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    ```python
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    from dns.resolver import query
    from dns.exception import DNSException
    
    
    # input: dns name and optional the type of the record and return all the answered data in a list or in 
    # case of exception an empty list
    def get_mx(dns_name, type="MX"):
        try:
            answers = query(dns_name, type)
        except DNSException:
            return []
        ret = []
        for a in answers:
            element = (str(a.preference), str(a.exchange))
            ret.append(element)
    
        return ret
    ```
    
    Futtatás:
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    ```bash
    $ python3
    >>> import dns_tool
    >>> help()
    help> dns_tool.get_mx
    Help on function get_mx in dns_tool:
    
    dns_tool.get_mx = get_mx(dns_name, type='MX')
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
        # input: dns name and optional the type of the record and return all the answered data in a list 
        # or in case of exception an empty list
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    >>> list = dns_tool.get_mx('google.com')
    >>> for e in list:
    ...     print(e)
    ...
    ('40', 'alt3.aspmx.l.google.com.')
    ('20', 'alt1.aspmx.l.google.com.')
    ('50', 'alt4.aspmx.l.google.com.')
    ('10', 'aspmx.l.google.com.')
    ('30', 'alt2.aspmx.l.google.com.')
    >>>
    >>> list = dns_tool.get_mx('nemletezik.asd')
    >>> for e in list:
    ...     print(e)
    ... 
    >>>
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    ```
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    Készítettem egy függvényt két paraméterrel, majd a korábbi feladat lépéseit implementáltam, csak most függvénybe zárva.
    Tesztelésnél látszik, hogy a `google.com`-ra szépen jönnek a válaszok, míg a `nemletezik.asd`-re nem, és hibát se dob a 
    kód, egyszerűen üres listát ad vissza.
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    ## 1.d Feladat - Futtatható DNS szkript 
    
    **Feladat:** Tegyük futtathatóvá az elkészült modult!
    
    A forráskód:
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    ```python
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    #!/usr/bin/env python3
    
    from dns.resolver import query
    from dns.exception import DNSException
    
    
    # input: dns name and optional the type of the record and return all the answered data in a list or in 
    # case of exception an empty list
    def get_mx(dns_name, type="MX"):
        try:
            answers = query(dns_name, type)
        except DNSException:
            return []
        ret = []
        for a in answers:
            element = (str(a.preference), str(a.exchange))
            ret.append(element)
    
        return ret
    
    
    if __name__ == "__main__":
        inp = input("Add meg a lekérdezendő domain-t, valamint ha szeretnéd specifikálni, a rekord típusát is szóközzel "
                    "elválasztva (az alapértelmezett rekord típus az MX): ")
        inp = inp.split(" ")
        if len(inp) >= 2:
            list = get_mx(inp[0], inp[1])
            for e in list:
                print(e)
        else:
            list = get_mx(inp[0])
            for e in list:
                print(e)
    ```
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    Ahhoz, hogy futtatthatóvá tegyem, elkészítettem neki a `__name__` "függvényt". Itt beállítottam, hogy kérjen be adatot a 
    felhasználótól, és kb leimplementáltam, ahogy eddig kézzel teszteltem.
    
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    Futtatás:
    
    ```bash
    $ chmod +x dns_tool2.py
    $ ./dns_tool2.py 
    Add meg a lekérdezendő domain-t, valamint ha szeretnéd specifikálni, a rekord típusát is szóközzel 
    elválasztva (az alapértelmezett rekord típus az MX): google.com MX ./dns_tool2.py:11: DeprecationWarning:  
    please use dns.resolver.resolve() instead
      answers = query(dns_name, type)
    ('10', 'aspmx.l.google.com.')
    ('20', 'alt1.aspmx.l.google.com.')
    ('50', 'alt4.aspmx.l.google.com.')
    ('40', 'alt3.aspmx.l.google.com.')
    ('30', 'alt2.aspmx.l.google.com.')
    ```
    
    Réthelyi Bálint's avatar
    Réthelyi Bálint committed
    
    Futtatásnál látszik is, hogy kényelmesen működik.