Python黑帽子 黑客与渗透测试编程之道(二)编写简单的TCP客户端、服务器端

时间:2024-03-15 22:42:10

装好环境想练练手了,但事实并不是想象中这么简单。。由于第一次接触Python和wingide开发工具,一开始甚至怎么运行都没搞懂,搞了好久总算能用写好的TCP客户端连上服务器端了,美滋滋


1 编写TCP客户端

import socket

target_host = "0.0.0.0"
target_post = 9999

# 建立一个socket对象
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接客户端
client.connect((target_host, target_post))

# 发送一些数据
sendMessage = input("please input send:");
client.send(sendMessage)

# 接收一些数据
response = client.recv(1024)

print response


首先,我们建立一个包含AF_INET和sock_STREAM参数的socket对象,AF_INET参数说明我们将使用标准的IPv4地址或者主机名,sock_STREAM说明这将是一个TCP客户端。

2 编写TCP服务器端

import socket
import threading

bind_ip = "0.0.0.0"
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:%d" % (bind_ip, bind_port)

# 这是客户处理线程
def handle_client(client_socket):
    # 打印客户端发送得到的内容
    request = client_socket.recv(1024)
    
    print "[*] Received: %s" % request
    
    # 返回给客户端的内容
    msgstring = input("please input:")
    client_socket.send(msgstring)
  #  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()

3 运行查看结果
一开始不懂如何运行,导致服务器端老是死循环(其实是我没打开客户端,导致它死循环)
正确的打开方式是,打开两个wingIDE,一个打开TCP服务器端,一个打开TCP客户端。
先运行服务器端,结果如下:
Python黑帽子 黑客与渗透测试编程之道(二)编写简单的TCP客户端、服务器端
右上方可以看到程序一直在运行,即等待客户端的接入。输入界面也可以知道服务器一直监听9999端口。

接着运行TCP客户端(此时服务器端一直也要开着),运行结果如下:
Python黑帽子 黑客与渗透测试编程之道(二)编写简单的TCP客户端、服务器端
输入的字符一定要用双引号括起来,不然会报错。然后我们查看服务器端:
Python黑帽子 黑客与渗透测试编程之道(二)编写简单的TCP客户端、服务器端
收到来自本机发出的消息,即刚刚输入的hello,然后给它回个信息。再查看客户端:
Python黑帽子 黑客与渗透测试编程之道(二)编写简单的TCP客户端、服务器端
可以看到客户端收到了来自服务器端的信息,然后客户端关闭。

看到能正确运行,很开心!不过遇到个问题搞半天是真的难受。。。