Python逆引き大全|初心者から実務まで使えるネットワークプログラミングの実践テクニック ネットワークプログラミング編!

逆引き

Pythonはネットワークプログラミングにも強力なツールを提供します。この章では、基礎的なソケット通信から高度なWebSocket通信、ネットワークパケット解析までを網羅的に解説します。実務でも役立つ知識を学んでいきましょう!


ソケット通信の実装

ソケット通信はネットワークプログラミングの基本です。Pythonではsocketモジュールを使用します。

import socket

# サーバー側
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 8080))
server.listen(1)
print("Server is listening...")
conn, addr = server.accept()
print(f"Connected by {addr}")
data = conn.recv(1024)
print(f"Received: {data.decode()}")
conn.close()

# クライアント側
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 8080))
client.sendall(b'Hello, Server!')
client.close()

このコードでローカル環境での基本的なソケット通信が可能です。


HTTPサーバーの作成

簡単なHTTPサーバーはhttp.serverモジュールで実装できます。

from http.server import SimpleHTTPRequestHandler, HTTPServer

server_address = ('', 8080)
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
print("HTTP server is running...")
httpd.serve_forever()

このコードを実行すると、指定したポートでHTTPサーバーが起動し、ファイルを提供します。


WebSocket通信

WebSocketはリアルタイム通信に適しています。Pythonではwebsocketsライブラリを使用します。

import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        await websocket.send(f"Echo: {message}")

start_server = websockets.serve(echo, "localhost", 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

このコードは基本的なWebSocketサーバーを構築します。


ネットワークエラーハンドリング

ネットワーク通信ではエラーハンドリングが重要です。

try:
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('localhost', 9999))
    client.sendall(b'Hello!')
except socket.error as e:
    print(f"Socket error: {e}")
finally:
    client.close()

エラーを適切に処理することで、プログラムの安定性が向上します。


ファイルのアップロードとダウンロード

requestsライブラリでファイルのアップロードとダウンロードが可能です。

import requests

# ファイルのダウンロード
url = 'https://example.com/sample.txt'
response = requests.get(url)
with open('sample.txt', 'wb') as f:
    f.write(response.content)

# ファイルのアップロード
files = {'file': open('sample.txt', 'rb')}
response = requests.post('https://example.com/upload', files=files)
print(response.status_code)

ポートスキャンの実行

ポートスキャンはネットワークセキュリティで重要です。

import socket

def scan_ports(host):
    for port in range(1, 1025):
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.settimeout(0.1)
            result = s.connect_ex((host, port))
            if result == 0:
                print(f"Port {port} is open")

scan_ports('localhost')

ネットワークパケットの解析

scapyライブラリを使用すると、パケット解析が簡単に行えます。

from scapy.all import *

packets = sniff(count=10)
packets.summary()

IPアドレスの取得

IPアドレスを取得するには、socketモジュールを使用します。

import socket

hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)
print(f"Hostname: {hostname}")
print(f"IP Address: {ip_address}")

DNSクエリの実行

DNSクエリはdnspythonライブラリで実装できます。

import dns.resolver

result = dns.resolver.resolve('example.com', 'A')
for ipval in result:
    print(f"IP Address: {ipval.to_text()}")

プロキシ設定

プロキシを設定してリクエストを送るには、requestsライブラリを使用します。

import requests

proxies = {
    'http': 'http://proxy.example.com:8080',
    'https': 'http://proxy.example.com:8080',
}
response = requests.get('http://example.com', proxies=proxies)
print(response.text)

まとめ

ネットワークプログラミングは、基礎を理解することで高度なスキルを身につけられます。Pythonを使ってソケット通信やHTTPサーバー、WebSocket、ネットワーク解析などを簡単に実装できます。本記事で学んだ知識を活用し、ネットワーク関連のプロジェクトに挑戦してみましょう!

このサイトを稼働しているVPSはこちら

コメント

タイトルとURLをコピーしました