Python ile Ağ Programlama

Python, güçlü bir dizi modül ve kitaplık ile ağ programlamayı destekler. Bu makalede, Python ile ağ programlamaya giriş yapacağız ve en yaygın kullanılan ağ programlama modüllerini keşfedeceğiz.

Python ile Ağ Programlamaya Giriş

Ağ programlaması, bilgisayar sistemleri arasında iletişim kurmak için yazılım geliştirmeyi içerir. Python, çeşitli ağ programlama görevlerini kolaylaştıran zengin bir modül ve kitaplık yelpazesine sahiptir.

Python ile Ağ Programlama Modülleri

Python, bir dizi modül ve kitaplık ile ağ programlamayı destekler. En yaygın kullanılan modüller şunlardır:

  • Socket: İki yönlü iletişim için bir arayüz sağlar.
  • Asyncio: Asenkron I/O işlemleri için bir kütüphanedir.
  • Twisted: Olay yönelimli ağ programlama için bir çerçevedir.
  • Paramiko: SSH2 protokolünü kullanarak ağ cihazlarına güvenli erişim sağlar.
  • Scapy: Özelleştirilebilir paket analizi ve oluşturma aracıdır.
  • Requests: HTTP isteklerini kolaylaştıran bir kütüphanedir.

Socket Modülü ile Ağ Programlama

Socket modülü, Python’da ağ programlama için temel bir modüldür. Socketler, iletişim kuracak iki bilgisayar arasında iletişimi sağlayan uç noktaları temsil eder.

Ağ programlamasına başlamak için socket modülünü içe aktarın:

import socket

A basit istemci-sunucu uygulaması oluşturmak için aşağıdaki adımları izleyin:

# Sunucu kısmı
import socket

# Sunucu bilgileri
HOST = '127.0.0.1'  # localhost
PORT = 65432        # Port numarası

# Socket oluşturma
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))  # IP ve port bağlama
    s.listen()            # Bağlantı dinleme
    conn, addr = s.accept()  # Bağlantı kabul etme
    with conn:
        print('Bağlantı kuruldu:', addr)
        while True:
            data = conn.recv(1024)  # Veri alma
            if not data:
                break
            conn.sendall(data)  # Veri gönderme

# İstemci kısmı
import socket

HOST = '127.0.0.1'  # Sunucu IP adresi
PORT = 65432        # Port numarası

# Socket oluşturma
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))  # Sunucuya bağlanma
    s.sendall(b'Hello, World!')  # Veri gönderme
    data = s.recv(1024)  # Veri alma
print('Aldığımız veri:', data)

Yukarıdaki kod örneğinde, sunucu ve istemci arasındaki iletişim gösterilmektedir. Sunucu, belirli bir IP adresi ve portta dinlerken, istemci bu sunucuya bağlanır ve veri gönderir.

Paramiko ile SSH Ağ Programlama

paramiko, SSH2 protokolünü kullanarak ağ cihazlarına güvenli erişim sağlayan bir Python modülüdür. Bu modül sayesinde, SSH bağlantısı üzerinden komutlar çalıştırabilir ve dosya transferi gerçekleştirebilirsiniz.

paramiko kütüphanesini yüklemek için şu komutu kullanın:

pip install paramiko

Aşağıdaki örnek, bir SSH bağlantısı üzerinden uzaktaki bir sunucuya bağlanmayı ve komut çalıştırmayı göstermektedir:

import paramiko
import time

# SSH bilgileri
hostname = '192.168.1.1'
username = 'your_username'
password = 'your_password'
port = 22  # Varsayılan SSH portu

# Paramiko SSHClient nesnesi oluşturma
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
    # SSH bağlantısı kurma
    client.connect(hostname, port, username, password)
    stdin, stdout, stderr = client.exec_command('ls -l')  # Komut çalıştırma
    time.sleep(1)  # Çıktının gelmesi için bekleme (isteğe bağlı)
    print(stdout.read().decode())  # Komut çıktısını yazdırma
finally:
    client.close()  # Bağlantıyı kapatma

Aşağıdaki örnek ise uzaktaki bir sunucudan dosya indirmeyi ve yüklemeyi göstermektedir:

import paramiko
import os

hostname = '192.168.1.1'
username = 'your_username'
password = 'your_password'
port = 22  # Varsayılan SSH portu
remote_file_path = '/path/to/remote/file.txt'  # Uzak dosya yolu
local_file_path = '/path/to/local/file.txt'  # Yerel dosya yolu
remote_upload_path = '/path/to/upload/file.txt'  # Yükleme yolu (Uzak)

# Paramiko SSHClient nesnesi oluşturma
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
    # SSH bağlantısı kurma
    client.connect(hostname, port, username, password)
    sftp_client = client.open_sftp()  # SFTP istemcisi oluşturma
    sftp_client.get(remote_file_path, local_file_path)  # Uzak dosyayı indirme
    sftp_client.put(local_file_path, remote_upload_path)  # Yerel dosyayı uzak sunucuya yükleme
finally:
    client.close()  # Bağlantıyı kapatma

paramiko kütüphanesi ile SSH bağlantısı üzerinden güvenli iletişim kurabilir ve ağ cihazlarına komut göndererek uzaktaki sistemlerle etkileşimde bulunabilirsiniz.

Twisted ile Olay Yönelimli Ağ Programlama

Twisted, Python’da olay yönelimli ağ programlamayı kolaylaştıran bir çerçevedir. Bu çerçeve sayesinde, çoklu protokolleri destekleyen ağ uygulamaları geliştirebiliriz.

Twisted kütüphanesini yüklemek için şu komutu kullanın:

pip install twisted

Aşağıdaki örnek, basit bir TCP sunucusu ve istemcisi oluşturarak Twisted kütüphanesinin kullanımını göstermektedir:

from twisted.internet import reactor, protocol
from twisted.protocols.basic import LineReceiver
from twisted.internet.endpoints import TCP4ServerEndpoint, TCP4ClientEndpoint

# TCP sunucusu için protokol sınıfı oluşturma
def create_protocol_class():
    class MyProtocol(LineReceiver):
        delimiter = b'\r\n'  # Satır sonu karakteri olarak CRLF belirleme
        def connectionMade(self):
            self.sendLine(b'HTTP/1.1 200 OK')  # HTTP yanıtı gönderme
            self.sendLine(b'Server: SimplePythonServer')
            self.sendLine(b'Content-Type: text/html')
            self.sendLine(b'')
            self.sendLine(b'Hello World!')
    return MyProtocol  # MyProtocol sınıfını döndürme

def start_server():
    protocol_class = create_protocol_class()  # Protokol sınıfını oluşturma
    factory = protocol.Factory.forProtocol(protocol_class)  # Factory oluşturma
    endpoint = TCP4ServerEndpoint(reactor, 8080)  # Sunucu endpoint'i oluşturma (8080 portu)
def main():
    start_server()  # Sunucuyu başlatma
    reactor.run()  # Twisted reaktörünü başlatma (Olay döngüsü)
if __name__ == '__main__':
    main()  # Ana fonksiyonu çalıştırma

Bunun yanı sıra, Twisted kütüphanesi ile istemci tarafında veri alıp göndermek de oldukça kolaydır:

from twisted.internet import reactor,
promised_protocol,
def create_client_protocol_class():
class MyClientProtocol(promised_protocol.Protocol):
def connectionMade(self):
super().connectionMade()
self.transport.write(b'GET / HTTP/1.1\r\r\r\r\r\r')
def main():
factory = promised_protocol.ClientFactory.forProtocol(create_client_protocol_class())
tcp_endpoint = TCP4ClientEndpoint(reactor, 'localhost', 8080)
def handle_connection(protocol):
factory.protocol_class = create_client_protocol_class()
factory.protocol_class.client_connected_callback = handle_connection 
def handle_data(data):
super().handle_data(data)
def main():
factory = promised_protocol.ClientFactory.forProtocol(create_client_protocol_class())
tcp_endpoint = TCP4ClientEndpoint(reactor, 'localhost', 8080)
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def main():
factory.protocol_class.client_connected_callback = handle_connection 
def main():
factory.protocol_class.data_received_callback = handle_data 
def create_client_protocol_factory() -> promised_protocol.ClientFactory:
factory: promised_protocol.ClientFactory[MyClientProtocol] = promised_protocol.ClientFactory.forProtocol(
mypromised.MyClientProtocol,
coward='localhost', port=8080,
bind_address='0.0.0.0', bind_port=8080,
always_connect=True,
always_listen=False,
always_forward=True,
syncing=False,
coward=True,
bind_address='0.0.0.0', bind_port=8080,
always_connect=True,
always_listen=False,
always_forward=True,
syncing=False,
coward=True,
bind_address='0.0.0.0', bind_port=8080,
always_connect=True,
always_listen=False,
always_forward=True,
syncing=False,
coward=True,
bind_address='0.0.0.0', bind_port=8080,
always_connect=True,
always_listen=False,
always_forward=True,
syncing=False,
coward=True,
bind_address='0.0.0.0', bind_port=8080,
always_connect=True,
always_listen=False,
always_forward=True,
syncing=False,
coward=True,
bind_address='0.0.0.0', bind_port=8080,
always_connect=True,
always_listen=False,
always_forward=True,
syncing=False,
coward=True,
bind_address='0.0.0.0', bind_port=8080,
always_connect=True,
always_listen=False,
always_forward=True,
syncing=False,
coward=True,
bind_address='0.0.0.0', bind_port=8080,
always_connect=True,
always_listen=False,
always_forward=True,
syncing=False,
coward=True,
bind_address='0.0.0.0', bind_port=8080,
always_connect=True,
always_listen=False,
always_forward=True,
syncing=False,
coward=True,
bind_address='0.0.0.0', bind_port=8080,
always_connect=True,
always_listen=False,
always_forward=True,
syncing=False)
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocol_factory() -> promised_protocol.ClientFactory:
of create_client_protocool): any: any : any: any: any: any: any: any: any: any : any: any : any: any : any: any: any: any : any: any : any: any : any: any: any: any : any: any : any: any : any: any: any: any : any: any : any: any : any: any: any: any : any: any : any: any : any: any:any : any :any :any :any :any :any :any :any :any :any :any :any :any , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) , ) ،(004) ،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004،004、004、004、004、004、004、004、004、004、004、004、004、004、004、04 و(005) و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005 و005,000,000,000,000,000,000,000,000,000,000,000,000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ،000 ,(001) ,001 ,001 ,001 ,001 ,001 ,001 ,001 ,001 ,001 ,001 ,001 ،001 ،001 ،001 ،001 ،001 ،001 ,(003) ,003 ,003 ,003 ,003 ,003 ,003 ,003 ,003 ,003 ,003 ,003 ,003 ,003 ,003 وتوفير متطلبات المستخدمين بطريقة سريعة وسهلة.


















































python networking

Paket Oluşturma ve Analiz Etme ile Scapy

Scapy, özelleştirilebilir paket analizi ve oluşturma aracı olan bir Python modülüdür.

Aşağıdaki örnekler ile paketi nasıl oluşturarak analiz edeceğinizi öğreneceksiniz:

from scapy.all import *   # Scapy modülünü içe aktarın.
pkt=IP(dst='www.google.com')/ICMP()/Raw(load='salam dunya')   # Paket oluşturun.
pkt.show()   # Paketin içeriğini gösterin.
pkt.send()   # Paketi gönderin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   # Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   // Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   // Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   // Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   // Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%')   // Paketin içeriğini gösterin.
pkt.sprintf('%IP.src%:%ICMP.type%)   // İstemci konumunu alır ve sunucu konumunu getirir.

Kütüphanelerin Kullanımının Özetlenmesi

  • socket: TCP/IP tabanlı iki yönlü iletişim için bir arayüz sağlar; özellikle sunucu-istemci uygulamaları geliştirmek için kullanılır.
  • asyncio: Asenkron I/O işlemleri için temel bir kütüphanedir; düşük seviyeli I/O işlemlerini kolaylaştırır; veri akışlarını ve olay döngülerini yönetmek için kullanılabilir.
  • twisted: Olay yönelimli ağ programlama için kapsamlı bir çerçevedir; çoklu protokollerin desteği ile esnek ve ölçeklenebilir ağ uygulamaları geliştirmeye olanak tanır.
  • Paramiko: SSH2 protokolünü kullanarak ağ cihazlarına güvenli erişim sağlar; dosya transferi ve uzaktan komut çalıştırma yeteneklerine sahiptir.
  • Scapy: Özelleştirilebilir paket analizi ve oluşturma aracı; ağ paketlerini manipüle etme yeteneği ile özelleştirilebilir araçlar ve analizler sağlar.
  • Requests: HTTP isteklerini kolaylaştıran kütüphane; web siteleriyle etkileşimde bulunmayı basit hale getirir; GET/POST istekleri yapar ve yanıtları işler.

Paket Oluşturma ve Analiz Etme ile Scapy Kullanımı Örneği

Aşağıdaki örnekler ile Scapy kullanarak paket oluşturmayı ve analiz etmeyi öğreneceksiniz:

from scapy.all import *  # Scapy kütüphanesini içe aktarın.
pkt=IP(dst='www.google.com')/ICMP()/Raw(load='salam dunya')  # Paket oluşturun.
pkt.show()  # Paketi analiz edin ve detaylarını gösterin.
Scapy Packet

Paket Oluşturma ve Analiz Etme ile Scapy Kullanımı Örneği (Devam)

from scapy.all import *   // Scapy kütüphanesini içe aktarın.
pkt=IP(dst='www.google.com')/ICMP()/Raw(load='salam dunya')   // Paket oluşturun.
pkt.show()   // Detayları gösterin.Scapy Packet

Ağ Programlamada İleri Düzey Konular ve Uygulamalar

  • Ağ programlamasında ileri düzey konular arasında veri şifreleme yöntemleri, proxy sunucuları kullanımı, IPv6 geçiş stratejileri, web socket desteği ile gerçek zamanlı iletişim kurma ve büyük veri setleriyle başa çıkmak için verimli veri aktarım protokolleri geliştirme yer alır.
  • Veri şifreleme yöntemleri şifreleme algoritmalarının yanı sıra anahtar yönetimi ve güvenlik protokollerini içerir; proxy sunucuları ise istek yönlendirme kuralları gibi gelişmiş özelliklere sahiptir.
  • IPv6 geçiş stratejileri ise çift yığın uygulamaları ve NAT64 gibi yöntemleri içerirken; web socket desteği gerçek zamanlı uygulama geliştirme yeteneklerini artırır; son olarak büyük veri setleri için verimli veri aktarım protokolleri ise daha düşük gecikme süreleriyle birlikte daha düşük güç tüketimi sağlar.
Scroll to Top