Skip to content
Snippets Groups Projects
Verified Commit 0e7c8ab0 authored by Réthelyi Bálint's avatar Réthelyi Bálint :no_mouth:
Browse files

3 b

parent c9a5a436
No related branches found
No related tags found
No related merge requests found
Pipeline #20339 passed
...@@ -211,3 +211,33 @@ Ehhez használjuk a beépített `argparse` csomagot! Dokumentáció és példak ...@@ -211,3 +211,33 @@ Ehhez használjuk a beépített `argparse` csomagot! Dokumentáció és példak
a szervert (`server.shutdown()`)! a szervert (`server.shutdown()`)!
- Teszteléshez használjuk a `telnet` programot. Pl.: `$ telnet localhost 8000` - Teszteléshez használjuk a `telnet` programot. Pl.: `$ telnet localhost 8000`
## 3.b Feladat - Port szkenner
**Feladat:** Valósítsunk meg egy port szkanner funkciót, amely egy megadott hoszton ("www.google.hu")
végigszkenneli a "jól ismert" (well-known) portokat (1 - 1023). Eredményként írassuk ki a nyitott portokat.
Dolgozzunk a Python konzolban az egyszerűség végett.
- Ehhez használjuk a segédletben emített `scapy` csomagot, amit a következő paranccsal telepíthetünk:
`pip3 install scapy`
- A feladathoz nem kell szkriptet írni, elég interaktívan megvalósítani!
- A `scapy` szintaktikára a segédletben linkelt oldalon találunk példákat vagy használjuk ezt az összefoglalót:
[scapy_cheatsheet.pdf](https://qosip.tmit.bme.hu/foswiki/pub/Meres/PythonFeladatok/scapy_cheatsheet2.pdf)
- A csomagok összeállítására használjunk Layer 2-4 megközelítést (Ethenet + IP + TCP), az összefűzésre
a `/` operátor használható (**Basic Packet Crafting / Viewing, Altering Packets** blokk).
- Érdekességképpen mentsük el a csomagot egy változóban és vizsgáljuk meg az automatikusan kitöltött mezőket
a `.show()` paranccsal.
- Lehetőség van egy összefogott csomaghalmaz definiálására is: A vizsgálandó portokat `tuple` ként is megadhatjuk
(`start`, `stop`) formátumban(**Altering Packets** blokk). A `scapy` képes kezelni a mezőkhöz definiált
listákat/tupleket és Descartes-szorzatkét generálja ki az összes csomagot.
- Küldésre használjuk a `srp` parancsot (**Sending Packets** blokk), a szkennelés végeztével állítsuk le a
próbálkozást CTRL+C kombinációval vagy a preferáltabb módon adjunk meg `timeout` értéket a küldéshez, 1s bőven elég.
- Eredményként az `srp` parancs 2 értékkel tér vissza: 1. Sikeres request-response párok, 2. Válasz nélküli kérések.
Az eredmények a `scapy` saját osztályaiban vannak megvalósítva, de kezelhetőek listaként is a következő formátummal:
`srp() --> [ [ ( sikeres kérés1, kapott válasz1 ), ( sikeres kérés2, kapott válasz2 ), .... ], [ sikertelen kérések ...] ]`
- Eredmény kiíratásához használhatjuk a `.summary()` vagy `.show()` függvényeit.
- Vegyük a sikeresek listáját, azokból vegyük a válaszokat (**Receiving and Analyzing Packets** blokk).
A TCP részhez a `.payload` attribútumokon végigjárva vagy az általánosabb `[]` operátorral férhetünk hozzá,
aminek a kikért payload osztályát kell megadnunk (`packet[TCP]`).
- Eredményként írassuk ki a kapott válaszok source portját (`.sport` attribútum), azaz a nyitott portokat,
amelyekről érkezett válasz.
...@@ -49,7 +49,7 @@ néven az előző feladatban megvalósított funkcióhoz! ...@@ -49,7 +49,7 @@ néven az előző feladatban megvalósított funkcióhoz!
A forráskód: A forráskód:
```python3 ```python
from dns.resolver import query from dns.resolver import query
from dns.exception import DNSException from dns.exception import DNSException
...@@ -104,7 +104,7 @@ dns_tool.get_mx = get_mx(dns_name, type='MX') ...@@ -104,7 +104,7 @@ dns_tool.get_mx = get_mx(dns_name, type='MX')
A forráskód: A forráskód:
```python3 ```python
#!/usr/bin/env python3 #!/usr/bin/env python3
from dns.resolver import query from dns.resolver import query
......
...@@ -5,7 +5,7 @@ Debian mirror szerverek elérhetőségéről, amit a futása végén ki is list ...@@ -5,7 +5,7 @@ Debian mirror szerverek elérhetőségéről, amit a futása végén ki is list
A forráskód: A forráskód:
```python3 ```python
#!/usr/bin/env python3 #!/usr/bin/env python3
import ping3 import ping3
import pprint import pprint
......
...@@ -48,3 +48,60 @@ Tesztelés: ...@@ -48,3 +48,60 @@ Tesztelés:
$ nc localhost 9999 $ nc localhost 9999
Mon Mar 7 17:56:58 2022 Mon Mar 7 17:56:58 2022
``` ```
## 3.b Feladat - Port szkenner
**Feladat:** Valósítsunk meg egy port szkanner funkciót, amely egy megadott hoszton ("www.google.hu")
végigszkenneli a "jól ismert" (well-known) portokat (1 - 1023). Eredményként írassuk ki a nyitott portokat.
A megoldás:
```bash
$ pip3 install scapy
$ sudo python3
>>> from scapy.all import *
>>> packet = Ether() / IP(dst="www.google.hu") / TCP(dport=(1,1023))
>>> packet.show()
###[ Ethernet ]###
dst = 00:00:0c:9f:f0:b6
src = 00:50:b6:8d:fb:1a
type = IPv4
###[ IP ]###
version = 4
ihl = None
tos = 0x0
len = None
id = 1
flags =
frag = 0
ttl = 64
proto = tcp
chksum = None
src = 152.66.182.33
dst = Net("www.google.hu/32")
\options \
###[ TCP ]###
sport = ftp_data
dport = (1, 1023)
seq = 0
ack = 0
dataofs = None
reserved = 0
flags = S
window = 8192
chksum = None
urgptr = 0
options = ''
>>> ans,unans = srp(packet,timeout=1)
Begin emission:
Finished sending 1023 packets.
.......*..................*................................................
Received 251 packets, got 2 answers, remaining 1021 packets
>>> ans
<Results: TCP:2 UDP:0 ICMP:0 Other:0>
>>> for a in ans:
... print(a[1][TCP].sport)
80
443
>>>
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment