美文网首页Python
Python socket借助ngrok建立外网TCP连接

Python socket借助ngrok建立外网TCP连接

作者: GameDesign2018 | 来源:发表于2018-09-21 01:59 被阅读0次

#python #内网穿透 #端口映射 #port forwarding #socket #nat #TCP/IP #网络编程

目的是利用python3的socket库,建立以下两个终端之间的连接并传输简单的binary数据:

〇、设备简介

服务器:

设备:Windows 10 PC
终端:cmd
网络:公网动态IP(由无线路由器接入)

客户端:

设备:Android Phone
终端QPython3 - 终端
网络:移动4G

一、ngrok的配置:

  • 点击这个链接-> ngrok - secure introspectable tunnels to localhost
    找到对应的版本,下载并注册
  • ngrok.exe文件解压到喜欢的位置
  • ngrok.exe所在的目录添加到Windows的环境变量里(Cortana搜索 “env” -> 编辑账户的环境变量 -> path -> 新建)
  • 点击这个链接-> ngrok auth
    复制你的Authtoken
  • [cmd] ngrok authtoken [你的Authtoken]

二、执行服务器的代码:

import socket
import threading
import time
# 源代码来自廖雪峰的python3教程
# https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432004374523e495f640612f4b08975398796939ec3c000#0

# 以下是每次TCP连接将要执行的线程
def tcplink(sock, addr):
    print('Accept new connection from %s:%s...' % addr)
    sock.send(b'Greating from Windows 10 PC server!')
    while True:
        data = sock.recv(1024)      # For this session, pause here, once client socket send message proceed following:
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
    sock.close()
    print('Connection from %s:%s closed.' % addr)

if __name__ == '__main__':
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 监听Localhost端口
    s.bind(('127.0.0.1', 9999))
    s.listen(5)
    print('Waiting for connection...')
    while True:
        sock, addr = s.accept()     # Paused here, once received connection proceed the following:
        t = threading.Thread(target=tcplink, args=(sock, addr))
        t.start()
三、使用ngrok开启服务器的TCP端口转发
  • [cmd] ngrok tcp 9999
    后边的数字与第二步服务器端代码中的端口号相同即可
  • 在ngrok的运行信息里找到转发的公网地址和端口:如下图红线部分


    地址:0.tcp.ngrok.io 端口:19240
四、执行客户端的代码

在安卓 QPython3* 中打开终端,并执行以下代码
ipport变量修改成第三步中ngrok提示的地址与端口
* QPython3 下载地址

import socket
import androidhelper

droid = androidhelper.Android()  # 处理弹出提示

ip = "0.tcp.ngrok.io"
port = 19240

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port))

datarecv = s.recv(1024).decode('utf-8')
droid.makeToast(datarecv) # 手机端将弹出 

# 发送数据
s.send(b'Steve')
# 接收数据
datarecv = s.recv(1024).decode('utf-8')
# 展示数据
droid.makeToast(datarecv)

相关文章

  • Python socket借助ngrok建立外网TCP连接

    #python #内网穿透 #端口映射 #port forwarding #socket #nat #TCP/IP...

  • TCP HTTP Soket

    1、TCP连接 2、HTTP连接 3、SOCKET原理 3.1套接字(socket)概念 3.2 建立socket...

  • socket

    Socket连接与HTTP连接的不同 通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信...

  • iOS知识总结

    一、建立TCP连接/ TCP三次握手====== Socket是基于TCP/IP上的封装, 如果要了解Socket...

  • Python || 网络编程

    Python3的TCP编程:客户端功能是创建socket对象并建立TCP连接、发送请求、接收服务器返回的数据并进行...

  • unix网络

    TCP 连接的建立 一个类比建立TCP连接 就好比一个电弧系统。socket 函数 代表彼此都有电话可用bind函...

  • Java中TCP传输、上传文件、上传图片、多并发上传

    TCP传输 TCP传输是怎样建立的呢? Socket和ServerSocket 建立客户端和服务器端 建立连接后,...

  • Linux tcp 参数

    open files 建立TCP链接、建立socket连接,建立数据库连接,都会创建和销毁fd。一定要确保这个值够...

  • Socket连接和释放

    socket中TCP的三次握手建立连接详解 我们知道tcp建立连接要进行“三次握手”,即交换三个分组。大致流程如下...

  • Java TCP传输

    TCP传输 Socket和ServerSocket 建立客户端和服务器端建立连接后,通过Socket中的IO流进行...

网友评论

    本文标题:Python socket借助ngrok建立外网TCP连接

    本文链接:https://www.haomeiwen.com/subject/dhbonftx.html