Python Forensics - Network Forensics

Scenariusz współczesnych środowisk sieciowych jest taki, że badanie może być napięte z powodu wielu trudności. Może się tak zdarzyć, niezależnie od tego, czy odpowiadasz na wsparcie w przypadku naruszenia, badasz działania wewnętrzne, przeprowadzasz oceny związane z podatnością lub weryfikujesz zgodność z przepisami.

Koncepcja programowania sieciowego

W programowaniu sieciowym używane są następujące definicje.

  • Client - Klient jest częścią architektury klient-serwer programowania sieciowego, która działa na komputerze osobistym i stacji roboczej.

  • Server - Serwer jest częścią architektury klient-serwer, która świadczy usługi innym programom komputerowym na tym samym lub innych komputerach.

  • WebSockets- WebSockets zapewniają protokół między klientem a serwerem, który działa przez stałe połączenie TCP. Dzięki temu komunikaty dwukierunkowe mogą być przesyłane między połączeniami gniazda TCP (jednocześnie).

WebSockets to po wielu innych technologiach, które umożliwiają serwerom wysyłanie informacji do klienta. Oprócz uzgadniania nagłówka aktualizacji, WebSockets jest niezależne od HTTP.

Protokoły te służą do sprawdzania informacji, które są wysyłane lub odbierane przez użytkowników zewnętrznych. Ponieważ szyfrowanie jest jedną z metod stosowanych do zabezpieczania wiadomości, ważne jest również zabezpieczenie kanału, przez który wiadomości zostały przesłane.

Rozważmy następujący program w języku Python, którego używa klient handshaking.

Przykład

# client.py
import socket

# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# get local machine name
host = socket.gethostname()
port = 8080

# connection to hostname on the port.
s.connect((host, port))

# Receive no more than 1024 bytes
tm = s.recv(1024)
print("The client is waiting for connection")
s.close()

Wynik

Wytworzy następujący wynik -

Serwer akceptujący żądanie kanału komunikacyjnego będzie zawierał następujący skrypt.

# server.py
import socket
import time

# create a socket object
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# get local machine name 
host = socket.gethostname()
port = 8080

# bind to the port
serversocket.bind((host, port))

# queue up to 5 requests 
serversocket.listen(5)

while True:
   # establish a connection 
   clientsocket,addr = serversocket.accept()
   print("Got a connection from %s" % str(addr))
   currentTime = time.ctime(time.time()) + "\r\n"
   clientsocket.send(currentTime.encode('ascii'))
   clientsocket.close()

Klient i serwer utworzony za pomocą programowania w Pythonie nasłuchują numeru hosta. Początkowo klient wysyła żądanie do serwera w zakresie danych przesłanych w numerze hosta, a serwer akceptuje żądanie i natychmiast wysyła odpowiedź. W ten sposób możemy mieć bezpieczny kanał komunikacji.