Python Forensics - Ağ Adli Tıp

Modern ağ ortamlarının senaryosu öyledir ki, araştırma bir dizi güçlükten dolayı zor olabilir. Bu, bir ihlal desteğine yanıt verirken, içeriden öğrenen faaliyetleri araştırırken, güvenlik açığıyla ilgili değerlendirmeler yaparken veya bir mevzuata uygunluğu onaylarken olabilir.

Ağ Programlama Kavramı

Ağ programlamasında aşağıdaki tanımlar kullanılır.

  • Client - İstemci, kişisel bir bilgisayar ve iş istasyonunda çalışan istemci-sunucu ağ programlama mimarisinin bir parçasıdır.

  • Server - Sunucu, aynı veya diğer bilgisayarlardaki diğer bilgisayar programlarına hizmet sağlayan istemci-sunucu mimarisinin bir parçasıdır.

  • WebSockets- WebSockets, istemci ile sunucu arasında kalıcı bir TCP bağlantısı üzerinden çalışan bir protokol sağlar. Bu sayede çift yönlü mesajlar TCP soket bağlantısı arasında (aynı anda) gönderilebilir.

WebSockets, sunucuların istemciye bilgi göndermesine izin veren diğer birçok teknolojinin ardından gelir. Yükseltme Başlığını el sıkışma dışında, WebSockets HTTP'den bağımsızdır.

Bu protokoller, üçüncü taraf kullanıcılar tarafından gönderilen veya alınan bilgileri doğrulamak için kullanılır. Şifreleme, mesajların güvenliğini sağlamak için kullanılan yöntemlerden biri olduğundan, mesajların aktarıldığı kanalın güvenliğini sağlamak da önemlidir.

İstemcinin kullandığı aşağıdaki Python programını düşünün handshaking.

Misal

# 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()

Çıktı

Aşağıdaki çıktıyı üretecektir -

İletişim kanalı talebini kabul eden sunucu aşağıdaki komut dosyasını içerecektir.

# 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()

Python programlama yardımıyla oluşturulan istemci ve sunucu, ana bilgisayar numarasını dinler. Başlangıçta istemci, ana bilgisayar numarasında gönderilen verilere ilişkin olarak sunucuya bir istek gönderir ve sunucu isteği kabul eder ve hemen bir yanıt gönderir. Bu şekilde güvenli bir iletişim kanalına sahip olabiliriz.