IOT之如何在wsl里运行FirmAE

熊师傅牛逼

最近在学IOT,如果在wsl里模拟固件,即使启动成功,也无法成功的在本机访问服务,一开始也没学过计网,也不了解wsl的网络机制,被这个问题困扰好久,只能在虚拟机里去运行,但我实在是不喜欢虚拟机,因此执着于研究wsl如何才能启用Firmae,今天在熊师傅的帮助下终于成功,下面说一下原理和流程

原理

由于我不是很懂计网,还在学习,只能用不专业的语言来描述一下原理,但或许不专业的语言更有助于其他小白理解这个问题

wsl的网络是如何运作的呢?

正常wsl里的服务是能够访问的到的,让我们来看一个实验

在wsl里启用一个虚拟服务,打开的是8000端口,我们来看一下我们的ip,此时是172.23.162.33

在本机的浏览器里输入172.23.162.33:8000,成功访问

能够成功访问

这个实验说明:wsl是可以和主机进行正常通讯的

问题来了,为什么是172.23.162.33而不是127.0.0.1,也就是本机?

先来看一下主机的ip

此时网段是学校的内网

来看一个图

如果访问的是localhost(127.0.0.1),那么访问的是主机的localhost,并不是wsl里的localhost,也就是说,我的访问请求压根不会访问到wsl里的服务,因此,想要直接访问wsl的服务,我们需要直接访问wsl的ip:127.23.162.33

换句话说,wsl要想和外界通信,或者外界想和wsl通信,必须要经过172.23.162.33

好,那我们现在来用Firmae启动一下固件

好,启动成功了,并且他说Network reachable on 192.168.0.1,因为是路由器(这个是goahead服务)默认开启80端口,所以我们来访问一下这个地址

访问不到

就应该访问不到!刚才说了,和外界通信必须要走172.23.162.33,也就是说,我们发送的请求找不到192.168.0.1这个服务,因为它是wsl内部启动的服务,如图:

那访问172.23.162.33呢?

自然也不行,这个ip上面又没有运行任何的服务,我们想访问wsl内部启动的一个虚拟服务,就必须要经过172.23.162.33,但是直接访问172.23.162.33也无法让请求到达192.168.0.1啊?

所以有没有办法,让我在访问172.23.162.33的时候,可以把我的请求送到192.168.0.1呢?

答案是:端口转发

现在,让我们在wsl开启一个端口转发,以7300端口为例,现在我们通过一系列的设置,让wsl上面的7300端口只要收到请求,就把这个请求转发到192.168.0.1上面去

那么此时,如果我在访问172.23.162.33的7300端口,他就会把我的请求转发到192.168.0.1上去,也就是可以实现从外部访问了

实操

让我们来实操一下

进行端口转发的工具是socat

下载方式是

sudo apt install socat

下载好之后,我们另起一个终端,输入(此时我的路由器一直是一个启动状态)

socat TCP4-LISTEN:监听端口号,fork TCP4:转发到的ip:转发到的接口  &

那么在这里我们输入

socat TCP4-LISTEN:7300,fork TCP4:192.168.0.1:80  &

“&”表示后台运行

现在,我们访问172.23.162.33:7300

成功

注意不能访问192.168.0.1,因为我只是进行了转发操作,并没有让这个ip地址暴露出来

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇