ネットワークプログラミング Python

ネットワークプログラミングメモ

netaddr ライブラリ

とりあえずインストール

sudo pip install netaddr

そして、

>>> from netaddr import IPNetwork
>>> for i in IPNetwork("192.168.0.0/24"):
...     print i
... 
192.168.0.0
192.168.0.1
192.168.0.2

〜省略〜

192.168.0.254
192.168.0.255

わりと便利。

TCPクライアント

# coding: utf-8

import socket

target_host = '0.0.0.0'
target_port = 1234

# ソケットオブジェクトの生成
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# サーバへの接続
client.connect((target_host,target_port))

# データの送信
client.send("SYN!")

# データの受信
response = client.recv(4096)

print response

TCPサーバ

# coding: utf-8

import socket
import threading

bind_ip = "0.0.0.0"
bind_port = 1234

# ソケット作成
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# Bind
server.bind((bind_ip,bind_port))

# Listen
server.listen(3)

print "Listening on %s %d" % (bind_ip,bind_port)

# クライアントからの接続を処理するスレッド
def handle_client(client_socket):

    # クライアントが送信してきたデータを表示
    request = client_socket.recv(1024)
    print "[*] Recieved %s" % request

    # パケットの返送
    client_socket.send("ACK!")

    client_socket.close()

while True:

    client, addr = server.accept()

    print "Accepted connection from %s:%d" % (addr[0],addr[1])

    # 受信データを処理するスレッドの起動
    client_handler = threading.Thread(target=handle_client,args=(client,))
    client_handler.start()

UDPクライアント

# coding: utf-8

import socket

target_host = 'www.google.com'
target_port = 80

# ソケットオブジェクトの生成
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# データの受信
client.sendto("AAABBBCCC",(target_host,target_port))

# データの受信
data, addr = client.recvfrom(4096)

print data

参考文献ではスキャナーとかのプログラムが紹介されてておもしろかった。

参考文献

サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考

サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考