最近在看 Python黑帽子–黑客与渗透测试编程之道 这本书 发现这本书的代码实现都是使用python2 的于是我就想使用python3来实现 缓慢更新中
python2版本 有一个博主写的特别好 这是链接 http://blog.csdn.net/u012763794/article/details/50612756 部分注释我使用的这位博主的 而且这位博主的注释写的比我好 我的注释写的很少
这位博主也也不错 他对代码的每一个模块做了解释 http://blog.csdn.net/SKI_12/article/details/71152826
发现了一位用python3来实现的博主
https://my.oschina.net/oby/blog/804064#comment-list
TCP客户端
代码
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))
aaa = "GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n"
client.send(str.encode(aaa)) #这里只需要注意 send在python3中 接收的是 bytes 只需要做一个转换就好
response = client.recv(4096)
print (bytes.decode(response))
UDP客户端
代码
import socket
target_host = '127.0.0.1'
terget_post = 12138
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
client.sendto(str.encode('sdsdsdsdsdsd'),(target_host,terget_post)) #和tcp一样在这里做一个转换
data, addr = client.recvfrom(4096)
print (data)
使用nc验证 这里我就不贴验证的图了
TCP服务端
代码
import socket
import threading
bing_ip = '0.0.0.0'
bing_port = 12138
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bing_ip,bing_port))
server.listen(5) #最大连接数
print ("[*] listen on %s:%d" % (bing_ip,bing_port))
def handle_client(client_socket): #客户端处理进程
request = client_socket.recv(1024)
print ("[*] Received: %s" % request) #接受类型并打印
client_socket.send(str.encode('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()
这里的验证可以使用之前的tcp客户段来验证
取代netcat
这个简直了 由于python3 区分了str 和 bytes 所以有很多坑
这个我改了两个版本 一个是只能在linux上可以正常使用的版本 一个是兼容windows和linux的版本
兼容版 我引入了一个新的第三方库 chardet 来判断 字符编码
先贴linux版本
import sys
import socket
import getopt
import threading
import subprocess
listen = False
command = False
upload = False
execute = ""
target = ""
upload_destination = ""
port = ""
def run_command(command): #命令执行模块
command = command.rstrip()
try:
print (command)
output = subprocess.check_output(command, stderr = subprocess.STDOUT, shell = True )
except:
output = "Failed to execute command. \r\n"
return output #返回执行的结果
def client_handler(client_socket):# 上传 命令执行相关功能
global upload
global execute
global command
if len(upload_destination):
file_buffer = ""
while True:
data = client_socket.recv(1024)
if not data:
break
else:
file_buffer += data
try:
file_descriptor = open(upload_destination,"wb")
file_descriptor.write(file_buffer)
file_descriptor.close()
client_socket.send(str.encode("Successfully saved file to %s\r\n" % upload_destination))
except:
client_socket.send(str.encode("Failed to save file to %s\r\n" % upload_destination))
if len(execute):
output = run_command(execute)
client_socket.send(str.encode(output))
if command:
while