天天写一些源码分析感觉没什么意思,这一系列的文章带大家用python进行网络编程,编写一些黑客常用工具及脚本,希望大家喜欢。
首先我们先来看一下手动编写的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的属性进行链接,然后发送数据接受数据。
接着我们上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对象,其实客户端和服务器的本质都是socket之间的通信,只不过服务器端需要监听端口,编写一个处理接受的数据的函数而已。这里我们利用无线循环进行不停的处理发送过来的请求,这是最简单的处理方式,还有很多高级的利用内核事件的处理方式,暂时不说,把这理解透彻,一点一点来。