python 写一个实现局域网内没有外网的电脑可以远程连接代码
时间: 2024-02-03 20:04:41 浏览: 156
实现局域网内没有外网的电脑可以远程连接需要使用内网穿透技术。下面是一个使用 ngrok 实现内网穿透的 Python 代码示例:
1. 首先下载 ngrok 客户端并解压缩到某个目录下;
2. 在命令行中启动 ngrok,例如:
```
./ngrok tcp 22
```
这样就会将本地的 22 端口(SSH 端口)映射到一个公网地址上;
3. 在 Python 中使用 paramiko 模块连接远程主机,例如:
```python
import paramiko
# 远程主机的公网地址和映射的端口
host = "XXXXXXXXX.ngrok.io"
port = 12345
# 使用 paramiko 连接远程主机
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, port=port, username="root", password="password")
# 执行远程命令
stdin, stdout, stderr = ssh.exec_command("ls")
print(stdout.read().decode())
# 关闭连接
ssh.close()
```
这样,就可以在没有外网的情况下,通过 ngrok 实现远程连接局域网内的主机。需要注意的是,ngrok 免费版有一定的限制,如果需要更高级的功能,需要购买其商业版。
相关问题
python 写一个端口转发从而实现局域网内没有外网的电脑可以远程连接代码
以下是一个简单的 Python 端口转发脚本,可以实现局域网内没有外网的电脑可以远程连接:
```python
import socket
def port_forward(local_port, remote_host, remote_port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as local_sock:
local_sock.bind(('0.0.0.0', local_port))
local_sock.listen(1)
print(f'Listening on port {local_port}...')
while True:
conn, addr = local_sock.accept()
print(f'Accepted connection from {addr[0]}:{addr[1]}')
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as remote_sock:
remote_sock.connect((remote_host, remote_port))
print(f'Connected to {remote_host}:{remote_port}')
while True:
data = conn.recv(1024)
if not data:
break
remote_sock.sendall(data)
print(f'Sent {len(data)} bytes to {remote_host}:{remote_port}')
conn.close()
print(f'Connection closed by {addr[0]}:{addr[1]}')
if __name__ == '__main__':
port_forward(8080, 'example.com', 80)
```
在这个例子中,我们将本地端口 `8080` 转发到远程服务器 `example.com:80` 上。当有连接到本地 `8080` 端口的请求时,脚本会将请求转发到远程服务器上,并将响应返回给本地客户端。你可以根据需要修改本地和远程端口。
python 写一个端口转发从而实现局域网内没有外网的电脑可以远程连接代码 请写出配置过程
好的,以下是配置端口转发程序的步骤:
1. 在需要进行端口转发的计算机上安装 Python 运行环境。你可以从 Python 官网下载并安装最新版本的 Python。
2. 打开文本编辑器,创建一个新文件,将下面的代码粘贴到文件中:
```python
import socket
def port_forward(local_port, remote_host, remote_port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as local_sock:
local_sock.bind(('0.0.0.0', local_port))
local_sock.listen(1)
print(f'Listening on port {local_port}...')
while True:
conn, addr = local_sock.accept()
print(f'Accepted connection from {addr[0]}:{addr[1]}')
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as remote_sock:
remote_sock.connect((remote_host, remote_port))
print(f'Connected to {remote_host}:{remote_port}')
while True:
data = conn.recv(1024)
if not data:
break
remote_sock.sendall(data)
print(f'Sent {len(data)} bytes to {remote_host}:{remote_port}')
conn.close()
print(f'Connection closed by {addr[0]}:{addr[1]}')
if __name__ == '__main__':
port_forward(8080, 'example.com', 80)
```
3. 将代码中的 `local_port` 设置为你想要监听的本地端口号。将 `remote_host` 和 `remote_port` 分别设置为你想要将请求转发到的远程主机和端口。
4. 将文件保存为 `port_forward.py` 或其他你喜欢的名称。
5. 打开终端或命令提示符,导航到保存 `port_forward.py` 文件的目录。
6. 在终端或命令提示符中,键入以下命令启动端口转发程序:
```
python port_forward.py
```
7. 程序将开始监听本地端口。现在,你可以从另一台计算机或设备上使用你的本地 IP 地址和设置的本地端口号远程连接到此计算机。
8. 当你建立连接时,端口转发程序将自动将请求转发到远程主机和端口,并将响应返回给你的计算机。
到这里,你已经成功地配置了端口转发程序,使得局域网内没有外网的电脑可以远程连接。
阅读全文