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

4

parent 0e7c8ab0
Branches
No related tags found
No related merge requests found
Pipeline #20361 passed
...@@ -241,3 +241,32 @@ aminek a kikért payload osztályát kell megadnunk (`packet[TCP]`). ...@@ -241,3 +241,32 @@ 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, - Eredményként írassuk ki a kapott válaszok source portját (`.sport` attribútum), azaz a nyitott portokat,
amelyekről érkezett válasz. amelyekről érkezett válasz.
## 4. Feladat - Kötelezően választható (1 db) - IMSc plusz feladat (+2 pont)
Az alábbi feladatok közül **csak egyet** kell kötelezően megoldani a mérés során, mely szabadon választható.
**IMSc pont szerezhető mindkét feladat megoldásával!**
## 4.a Feladat - Minimál SSH kliens
**Feladat:** Írjunk Python szkriptet `ssh_client.py` néven, amely egy minimális, interaktív SSH klienst valósít meg.
Az SSH kapcsolat kezeléséhez használjuk a `pxssh` modult, amit a `pexpect` csomag részeként tudunk telepíteni.
Érdemes megnézni a [`pxssh`](https://pexpect.readthedocs.io/en/stable/api/pxssh.html#pxssh-classl%22) dokumentációját.
- [`ssh_client.py.txt`](https://qosip.tmit.bme.hu/foswiki/pub/Meres/PythonFeladatok/ssh_client.py.txt2):
Skeleton fájl a 4. feladathoz - Nevezd át!
- A scriptet NE indítsuk rendszergazdai jogosultsággal!
- SSH szerver címét indítási paraméterként adjuk meg!
- Felhasználónév/jelszó párost kérjük be a konzolról interaktív módon! Jelszó biztonságos bekérésére használjuk a
`getpass` modul `getpass()` függvényét, ami nem jeleníti meg a leütött karaktereket!
- Az SSH kapcsolatot kezelő objektum a `pxssh()` függvénnyel kérhető ki, amin a `login()` függvényt meghívva
csatlakozhatunk az SSH szerverhez. **Példakód az SSH kapcsolatot kezelő osztály dokumentációjában található!**
- Kezeljük a hibás kapcsolódásnál felmerülő kivételeket/hibákat!
- Az interaktív konzolt a prompt-tal együtt a konzolról olvasással valósítsuk meg egy kvázi végtelen ciklusban.
- `q`/`Q` karakterekre, illetve CTRL+C kombinációra lépjünk ki! Ne felejtsük el ekkor bontani a kapcsolatot!
- A begépelt parancsokat folyamatosan, az előző parancsokat megőrizve mentsük el a saját ssh.log fájlunkba.
- A laborban lévő image-ek nagy valószínűséggel futtatnak SSH szervert, amivel tesztelhetjük a kliensünket:
- Hoszt: localhost
- Felhasználó: vagrant
- Jelszó: vagrant
title: Python mérés title: Python mérés
subtitle: Infokomm labor 1 subtitle: Infokomm labor 1
author: Réthelyi Bálint author: Réthelyi Bálint - IZUM0B
geometry: margin=2cm geometry: margin=2cm
lang: hu-HU lang: hu-HU
output: pdf_document output: pdf_document
\ No newline at end of file
...@@ -98,3 +98,5 @@ $ ./mirror_stat.py # don't need sudo priv for this in a modern system ...@@ -98,3 +98,5 @@ $ ./mirror_stat.py # don't need sudo priv for this in a modern system
'ftp2.de.debian.org': 0.020498037338256836, 'ftp2.de.debian.org': 0.020498037338256836,
'ftp2.fr.debian.org': 0.02599787712097168} 'ftp2.fr.debian.org': 0.02599787712097168}
``` ```
Sikeresen megpingettem a mirror szervereket, ezeket ki is listáztam.
\ No newline at end of file
...@@ -49,6 +49,8 @@ $ nc localhost 9999 ...@@ -49,6 +49,8 @@ $ nc localhost 9999
Mon Mar 7 17:56:58 2022 Mon Mar 7 17:56:58 2022
``` ```
Látható, hogy sikeresen megkaptam az aktuális időt.
## 3.b Feladat - Port szkenner ## 3.b Feladat - Port szkenner
**Feladat:** Valósítsunk meg egy port szkanner funkciót, amely egy megadott hoszton ("www.google.hu") **Feladat:** Valósítsunk meg egy port szkanner funkciót, amely egy megadott hoszton ("www.google.hu")
...@@ -105,3 +107,5 @@ Received 251 packets, got 2 answers, remaining 1021 packets ...@@ -105,3 +107,5 @@ Received 251 packets, got 2 answers, remaining 1021 packets
443 443
>>> >>>
``` ```
Látható, hogy a "www.google.hu"-nak a 80-as és a 443-as portja van nyitva.
\ No newline at end of file
# 4.a Feladat - Minimál SSH kliens
**Feladat:** Írjunk Python szkriptet `ssh_client.py` néven, amely egy minimális, interaktív SSH klienst valósít meg.
A forrás fájl:
```python
#!/usr/bin/env python3
import getpass
import argparse
from pexpect import pxssh
def connect(host, port=22):
username = input("Add meg a felhasználónevedet: ")
passwd = getpass.getpass("Add meg a jelszavadat a távoli gépre: ")
try:
s = pxssh.pxssh()
s.login(host, username, passwd, port=port)
except pxssh.ExceptionPxssh as e:
print("Connection refused!")
return
print("SSH connection is established!")
while True:
try:
print("$ ", end='')
cmd = input()
if cmd in ['q', 'Q']:
break
s.sendline(cmd)
s.prompt()
print(s.before.decode('utf-8'))
except KeyboardInterrupt:
break
s.logout()
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--host", default="localhost")
parser.add_argument("--port", default="22")
args = parser.parse_args()
connect(args.host, args.port)
```
Futtatás:
```bash
$ chmod +x ssh_client.py
$ ./ssh_client.py --host hermes.sch.bme.hu
Add meg a felhasználónevedet: blint
Add meg a jelszavadat a távoli gépre:
SSH connection is established!
$ ls -lah
ls -lah
total 72K
drwxr-xr-x 8 blint blint 15 Mar 7 21:44 .
drwxr-xr-x 8 root root 8 Nov 21 10:41 ..
drwx------ 3 blint blint 3 Mar 4 21:10 .ansible
-rw------- 1 blint blint 9.4K Mar 7 21:48 .bash_history
-rw-r--r-- 1 blint blint 220 May 1 2021 .bash_logout
-rw-r--r-- 1 blint blint 3.8K Jan 17 22:20 .bashrc
drwx------ 2 blint blint 3 May 1 2021 .cache
drwx------ 3 blint blint 3 Mar 7 21:44 .config
drwxrwxr-x 3 blint blint 3 May 1 2021 .local
-rw-r--r-- 1 blint blint 807 May 1 2021 .profile
-rw------- 1 blint blint 0 Aug 11 2021 .psql_history
-rw-rw-r-- 1 blint blint 6.7K Jan 17 22:20 .shellfishrc
drwx------ 2 blint blint 5 Mar 4 21:42 .ssh
-rw-r--r-- 1 blint blint 0 May 1 2021 .sudo_as_admin_successful
drwxrwxr-x 7 blint blint 7 Jun 15 2021 test
$ q
```
A programot a saját szerveremen teszteltem.
\ No newline at end of file
#!/usr/bin/env python3
import getpass
import argparse
from pexpect import pxssh
def connect(host, port=22):
username = input("Add meg a felhasználónevedet: ")
passwd = getpass.getpass("Add meg a jelszavadat a távoli gépre: ")
try:
s = pxssh.pxssh()
s.login(host, username, passwd, port=port)
except pxssh.ExceptionPxssh as e:
print("Connection refused!")
return
print("SSH connection is established!")
while True:
try:
print("$ ", end='')
cmd = input()
if cmd in ['q', 'Q']:
break
s.sendline(cmd)
s.prompt()
print(s.before.decode('utf-8'))
except KeyboardInterrupt:
break
s.logout()
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--host", default="localhost")
parser.add_argument("--port", default="22")
args = parser.parse_args()
connect(args.host, args.port)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment