天天寫一些源碼分析感覺沒什么意思,這一系列的文章帶大家用python進行網(wǎng)絡(luò)編程吻贿,編寫一些黑客常用工具及腳本齿穗,希望大家喜歡涉波。
首先我們先來看一下手動編寫的tcp_client:
# coding=utf8
import socket
target_host = "www.baidu.com"
target_port = 80
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host, target_port))
client.send("GET / HTTP/1.1\r\nhost: baidu.com\r\n\r\n")
response = client.recv(4096)
print(response)
這里target_port表示目標地址端口,host表示請求地址名稱鳞贷,利用socket的屬性進行鏈接坯汤,然后發(fā)送數(shù)據(jù)接受數(shù)據(jù)。
接著我們上tcp_server的代碼:
# coding=utf8
import socket
import threading
bind_ip = "127.0.0.1"
bind_port = 9999
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, bind_port))
server.listen(5)
print "[*] Listening on %s %s" % (bind_ip, bind_port)
def handle_client(client_socket):
request = client_socket.recv(1024)
print "[*] Received: %s" % request
client_socket.send("ACK!")
client_socket.close()
while 1:
client, addr = server.accept()
print "[*] Accepted connection from : %s:%d" % (addr[0], addr[1])
client_handle = threading.Thread(target=handle_client, args=(client,))
client_handle.start()
這里同樣是首先建立一個socket對象搀愧,其實客戶端和服務(wù)器的本質(zhì)都是socket之間的通信惰聂,只不過服務(wù)器端需要監(jiān)聽端口,編寫一個處理接受的數(shù)據(jù)的函數(shù)而已咱筛。這里我們利用無線循環(huán)進行不停的處理發(fā)送過來的請求搓幌,這是最簡單的處理方式,還有很多高級的利用內(nèi)核事件的處理方式迅箩,暫時不說溉愁,把這理解透徹,一點一點來饲趋。