【Frp】内网穿透+Stcp

【frp】使用stcp的配置

零、 成文时间

2023.1.3
文章内容可能根据技术的兴衰而出现纰漏,如有误导,还请原谅。

一、frp安装的注意事项

  • 服务端、客户端的版本要匹配

二、前置要求

  • 有一个有公网IP的云服务器
  • 想要远程访问的工作站/主机/PC为Linux系统
  • 手边有一台windows或者linux系统的上网工具

三、配置云服务器端的frp服务器

我的云服务器安装的是ubuntu20.04的系统

首先将下载好的frp压缩包在云服务器上解压,打开解压后的文件夹中有一些文件,我们主要关注两个:

  • frps
  • frps.ini

其中frps.ini是frps的配置文件,我的配置很简单:

3.1 配置文件

#frps.ini
[common]
bind_port = 7000
token = AABBCCDD

bind_port:

  • 是之后frp客户端配置中目标服务器的端口,两者需要保持一致-
  • 默认中是7000端口,也可以根据需要改成其他端口号,但是不要选择一些常用的端口如22 80 443

token:

  • 可以不用,直接去掉就行
  • 如果用的话在客户端的配置文件中也需要同样的值
  • 如果要使用的话值可以选的比AABBCCDD更复杂一点

3.2 在云服务器上的运行

./frps -c frps.ini

如果出现以下字样说明开启成功

2023/01/02 23:27:10 [I] [service.go:178] frps tcp listen on 0.0.0.0:11235
2023/01/02 23:27:10 [I] [root.go:209] start frps success

如果需要后台运行的话:

nohup ./frps -c ./frps.ini 2>&1 &

这样就算使用ctrl+c后程序依然会在后台运行, 使用指令ps -e | grep frps后出现

1236740 pts/5    00:00:00 frps

表明frps确实是在后台运行

3.3 注意事项

  • 一定要注意将先前设置的bind_port中的端口在与服务器的防火墙配置中打开,否则就算之后所有的流程都正确,还是不会有效果。

四、STCP客户端配置

4.1 为什么使用stcp

  • 我只想将我的远程工作站的22端口暴露出来供我在广域网中随时ssh接入。
  • 之前我使用tcp连接的方式将22端口直接暴露到公网后,查看日志发现远程工作站的22端口受到了暴力扫描。
  • stcp相比于tcp的连接方式,需要在手边的终端设备也同样使用frpc来保证和远程工作站的加密连接,算是用繁琐的步骤换取相对的安全。

4.1 远程工作站的frpc.ini的配置与运行

4.1.1 配置文件

首先在我们想要远程访问的电脑/工作站中同样下载好版本一致的frp压缩包并解压。

我们关注其中的两个文件:

  • frpc
  • frpc.ini

前者是客户端程序,后者是其配置文件。我的frpc.ini配置文件内容如下:

#frpc.ini
[common]
server_addr = 12.345.67.89
server_port = 7000
token = AABBCCDD

[stcp-server]
type = stcp
sk = set_your_own_sk
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[conmon]一栏中完成的是与服务器地址的沟通:

  • server_addr 是你自己的云服务器的公网ip地址
  • server_port 要和之前frps.ini中的端口号保持一致
  • token 也要和之前frps.ini中的token保持一致

[stcp-server]一栏中是我们需要建立的连接的相关设置

  • type 设置类型为stcp以表明这个连接是stcp类型
  • sk 类似于连接的token,后续还要使用
  • local_ip 局域网下stcp要连接的工作站的网址,因为我就跑在工作站上,所以为127.0.0.1
  • local_port 要将工作站的端口暴露出去,我要使用ssh所以填写22端口
  • remote_port 将local_port映射为云服务器的端口6000,在云服务器防火墙设置中该端口号也要打开

4.1.2 运行程序

与服务端类似,使用

./frpc -c frpc.ini

如需后台使用则使用如下指令

nohup ./frpc -c ./frpc.ini 2>&1 &

当然考虑到远程工作站可能会有重启等问题,可以将frpc程序的运行设置为服务,或者写为开机自启动的脚本,这样更好,这里不再赘述。

4.2 手边的终端的frpc.ini的配置

4.2.1 配置文件

在本地同样需要使用frpc程序进行配置连接。

[common]
server_addr = 12.345.67.89
server_port = 7000
token = AABBCCDD

[stcp-visitor]
type = stcp
role = visitor
server_name = stcp-server
sk = set_your_own_sk
bind_addr = 127.0.0.1
bind_port = 6000

[conmon]一栏同远程端的配置。

[stcp-visitor]一栏中是我们需要建立的连接的相关设置

  • type 设置类型为stcp以表明这个连接是stcp类型
  • role 表明此连接类型为stcp中的visitor,也就是客户端
  • server_name 需要与远程端stcp的连接名一致,在这个例子中需要填写stcp-server
  • sk 与远程端的值保持一致
  • bind_addr 将访问的远程端的ip地址映射到本地
  • bind_port 将访问的远程端口号映射到6000端口(可以自行更改)

4.2.2 运行frpc程序

如果是linux的话,运行步骤与远程端的运行方法类似
如果是windows的话,我使用的是在win store中下载的windows terminal,内置了ssh,
如果是远程编写代码的话可以直接用vscode的remote-ssh一步到位

4.3 建立SSH连接

如果3个程序分别在3台机器上顺利运行的话,在终端输入以下语句建立从本地到远程端的连接:

ssh user@127.0.0.1 -p 6000
  • user 远程端的用户名
  • 127.0.0.1 与4.2.1中bind_addr的值保持一致
  • 6000 与4.2.1中bind_port的值保持一致
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Msp430可以通过GPIO口控制4位数码管的显示。需要使用数字转换芯片(例如74HC595)进行扩展。具体步骤如下: 1. 连接电路板:将Msp430与扩展电路板连接,将74HC595芯片的数据(DS)、时钟(CLK)和锁存(STCP)引脚分别连接到Msp430的GPIO口。 2. 初始化IO口:设置控制数码管的GPIO口为输出模式。 3. 数码管控制:将需要显示的数字转换为二进制代码,通过74HC595芯片的数据(DS)引脚依次发送,每次发送完成后通过时钟(CLK)引脚触发,最后通过锁存(STCP)引脚将数据存储到芯片中。通过控制四个数码管的共阴极或共阳极引脚,控制数码管的显示。 示例代码: ```C #include <msp430g2553.h> #define DS BIT0 //74HC595数据输入 #define CLK BIT1 //74HC595时钟输入 #define STCP BIT2 //74HC595锁存输入 void delay_us(unsigned int us) //延时函数 { unsigned int i; for(i=0;i<us;i++) { __delay_cycles(1); } } void send_byte(unsigned char dat) //发送字节 { unsigned char i; for(i=0;i<8;i++) { if(dat & BIT7) //判断当前位是否为1 { P1OUT |= DS; //为1则输出高电平 } else { P1OUT &= ~DS; //为0则输出低电平 } dat <<= 1; //移位 P1OUT |= CLK; //时钟上升沿触发数据 P1OUT &= ~CLK; } } void send_data(unsigned char dat) //发送数据 { P1OUT &= ~STCP; //锁存输入为低电平 send_byte(dat); //发送数据 P1OUT |= STCP; //锁存输入为高电平,数据存储到芯片中 } void display(unsigned char num[]) //显示函数 { unsigned char i, j; unsigned char dat[4] = {0x00, 0x00, 0x00, 0x00}; //存储每个数码管显示的数据 for(i=0;i<4;i++) { switch(num[i]) //根据数字选择对应的数码管显示 { case 0: dat[i] = 0xC0; break; //0的二进制代码为11000000 case 1: dat[i] = 0xF9; break; //1的二进制代码为11111001 case 2: dat[i] = 0xA4; break; //2的二进制代码为10100100 case 3: dat[i] = 0xB0; break; //3的二进制代码为10110000 case 4: dat[i] = 0x99; break; //4的二进制代码为10011001 case 5: dat[i] = 0x92; break; //5的二进制代码为10010010 case 6: dat[i] = 0x82; break; //6的二进制代码为10000010 case 7: dat[i] = 0xF8; break; //7的二进制代码为11111000 case 8: dat[i] = 0x80; break; //8的二进制代码为10000000 case 9: dat[i] = 0x90; break; //9的二进制代码为10010000 default: dat[i] = 0xFF; break; //其他数字显示为空 } for(j=0;j<i;j++) //将前面的数码管位置清空 { dat[i] <<= 1; } } for(i=0;i<4;i++) //依次发送每个数码管的数据 { send_data(dat[i]); } } void main(void) { WDTCTL = WDTPW + WDTHOLD; //停止看门狗 P1OUT = 0x00; //初始化输出状态 P1DIR |= DS + CLK + STCP; //设置为输出模式 P1SEL &= ~(DS + CLK + STCP); //选择GPIO功能 P1SEL2 &= ~(DS + CLK + STCP); while(1) { unsigned char num[4] = {1, 2, 3, 4}; //要显示的数字 display(num); //显示函数 delay_us(10000); //延时10ms } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值