使用桥接网络的jslinux

【JSLinux】简介;如何进入;| 面试题:Spring MVC是什么?与传统的Servlet方式相比,它有哪些优点? 很多学校上机需要用到的,网页版,linux: JSLinux https://bellard.org/jslinux/ 阅读详情

测试demo在:http://www.hackernel.com/jslinux/
本文代码在:https://github.com/killinux/jslinux-tap
带网络的jslinux

2011年很火的jslinux,把linux跑在浏览器上,10年过去了,还有人记得这个么?

fabrice bellard官网是: https://bellard.org/jslinux 这个已经变成wasm的版本,代码不可读,所以目前这个纯js版的作为学习Linux内核的教程还是很好的。
没混淆的jslinux参考: https://github.com/levskaya/jslinux-deobfuscated
这个没有网络,硬盘也没这么大,但是代码可读。

我修改了哪些:
1.增加了硬盘部分:
硬盘在hao下面,如果想修改硬盘内容,或生成rootfs 参考 修改jslinux硬盘内容
理论上如果用indexeddb作为硬盘,硬盘应该可以更大,后续计划把browserfs加上。
2.增加了网络部分:通过websocket作为server,浏览器中linux的tap设备与服务器端通信,这个地方需要改内核编译的配置,内核的config选项一定要把TUN=yes

网络为三个部分:  
      (1)jslinux内部网络是建立tap设备,和/dev/ttyS1设备交互,这是jslinux和浏览器交互的部分  ,类似/dev/clipboard 和浏览器上的textare交互  ,建立tap设备的代码为 [tap代码链接](https://www.iteye.com/blog/haoningabc-2436305)
      (2)浏览器和server用websocket链接    
      (3)server端linux也是同样原理,建立一个桥,tap设备一端绑在桥上,一端连在websocket上  
 

把代码运行起来:

运行方法:
1、安装依赖,mod_pywebsocket 和bridge-utils:

cd jslinux/websocketstuntap
yum install python-virtualenv -y
virtualenv mysite
source mysite/bin/activate
pip install mod_pywebsocket
yum install bridge-utils -y
brctl show

具体参考脚本:launch.sh
注意设置 MASQUERADE 和 ip_forward=1 的转发,否则网络可能会不通

2.启动 websocketstuntap 的websocket服务:这个服务生成tap设备和websocket的关联,并把tap设备都挂在br1桥上,是jslinux之间互相通信的基础

brctl addbr br1
brctl stp br1 on
ip link set br1 promisc on
ip link set br1 up
ifconfig br1 hw ether ee:ee:ee:ee:ee:50

需要指定mac地址,否则每次新建tap这个mac会变成最新的,影响网络交互

ifconfig br1 10.0.2.1 netmask 255.0.0.0 up

3.修改websocket客户端
代码在:jslinux-tap/js/network-websockets.js
中的WebSocket server 修改成刚建立的websocket服务

4.启动两个chrome页面,注意不要在一个tab里面
在jslinux里面输入命令 cat /dev/clipboard |sh
这里是在jslinux内部建立tap设备,并通过 PCEmulator.js的serial2 调用network-websockets.js 的websocket进行交互
jslinux里面的tap设备建立:

stty -F /dev/ttyS1 -ignbrk -brkint -parmrk -istrip -inlcr -igncr -icrnl -ixon -opost -echo -echonl -icanon -isig -iexten -parenb cs8
./tapper --tapper-headers --ip-address 10.0.2.0 --netmask 255.255.255.0 --randomize-ip /dev/ttyS1 /dev/ttyS1 &

主要原理是

jslinux:/dev/ttyS1
  ----->
    jslinux:tap0
      ----->
        PCEmulator.js:serial2(0x2f8)
          ----->
             network-websockets.js:websocket client
               ----->
                 python:tap_wsh.py:websocket server
                   ----->
                     linux tap:websockettunt0 
                       ----->
                         linux桥:br1
通过桥实现多个jslinux的互通:

/dev/ttyS1 对应 com口,序列号 0x2f8
参考:google定义的设备号

jslinux 网络驱动:
dmesg |grep ttyS*
用的 serial8250 的驱动,这个驱动比较原始,尝试过用e1000的驱动也可以使用,参考jslinux带网络功能的内核

tapper.c 在jslinux内建立tap0,tap_wsh.py 在vm里建立tap设备websockettunt0,基本原理相同.

jslinux:tap0
      --->jslinux:8250驱动的/dev/ttyS1 -
         --->websocket
              ---> vm:websockettunt0

在jslinux中: ping 10.0.2.1
在server中:tcpdump -i websockettunt0 查看流量

FAQ:
1.双jslinux网络不通的问题?
答:两个jslinux-tap浏览器要都在可见的地方,不能放在tab下面,一个没有写显示就不会加载,tap_wsh.py 中的select不是可读写状态
2. 服务端的代码在哪?
答:jslinux-tap/websocketstuntap的下面,使用的mod_pywebsocket
3.jslinux里面怎么和浏览器交互:
答:通过textarea,这部分需要内核驱动支持,
代码在https://github.com/killinux/jslinux-kernel/ 的src/patch_linux-2.6.20里,定义了jsclipboard这个设备,对应在jslinux里的/dev/clipboard
想把内容从jslinux传到浏览器的textarea就使用

echo "haha" >/dev/clipboard

如果想从浏览器传到jslinux里,
在textarea修改内容后 ,

cat /dev/clipboard

jslinux里面的网络设备就是通过这个建立的

cat /dev/clipboard |sh

4.如果我想重新编译内核这么办:
答:具体参考 https://www.iteye.com/blog/haoningabc-2338061
目前用2.6.20内核需要一些补丁,补丁的代码在代码在 https://github.com/killinux/jslinux-kernel
注意linuxstart.bin 和vmlinux-2.6.20.bin要一起重新编译,linuxstart里面定义了从第几字节开始加载内核
5.如果想重新制作硬盘怎么办:
答:
1.把散落的硬盘文件合并成一个,并挂在到本地系统

cd jslinux-tap/hao
cat hda000000*.bin > hda.bin  
mount -t ext2 -o loop hda.bin /mnt/jshda  
cp -r /mnt/jshda jslinux 

2.在/mnt/jshda里面修改jslinux硬盘内的文件
3.再把修改过的硬盘拆分成小块给jslinux使用

split -a 9 -d -b 65536 hda.bin hda      
for f in hda000000*; do      
    mv $f $f.bin      
done 

这里拆成较快是为了加快浏览器读取硬盘的速度,
具体读取代码在jslinux-tap/jslinux.js里面

params.hda = { url: "hao/hda%d.bin", block_size: 64, nb_blocks: 912 };

其他可能的想法和todo:
1、改成webrtc的版本,未实现
2、单桥多vm互通,已解决
3、net0其实没用,用serial2传的数据,需要单独编译网络驱动,验证通过。
4、硬盘问题:大文件加载后到indexdb ,计划减少第二次加载时间
5、线上修改之后如何保存到本地,回写问题,如何保存,如何同步?
6、开机状态迁移,内存怎么保存和移动?
7、hdb ,第二块硬盘怎么建立?
8、server端建立的tap设备,在websocket断掉后怎么自动清除
9、后续支持ssh协议

其他说明:

1.内核建立tap设备通过websocket与底层连接,传输层协议
2.底层python的服务端使用vxlan与openvswitch可以支持集群。
3.页面network status显示网络状态,红色网络异常,请刷新页面
4.chrome的开发者工具可以查看传输层协议

测试方式:
在命令行输入:

ifconfig  

如果没有手网络设备,动建立tap设备

cat /dev/clipboard |sh  

建立tap设备与websocket通信
测试网关

ifconfig  
ping 10.0.2.1  

测试dns

ping 8.8.8.8  

ping www.baidu.com

理论上两个chrome浏览器可以用jslinux互相ping通

javascript写的模拟器运行linux--jslinux Fabrice Bellard 大师写的Javascript PC Emulator,有人从他的网站考下来,打包了,我试了不能运行,需要加个web服务器,就可以了 立即下载

相关推荐

wd-tap-runner:使用 WebDriver 自动化 TAP 浏览器单元测试

wd-tap-runner 在浏览器中轻松运行生成 TAP 的 JS 单元测试,由 WebDriver 和 Node.js 自动执行。 这是的辅助模块,该模块为您设置测试页面和 HTTP 服务器(使用 )。 例子 您正在测试的浏览器必须能够访问localhost ,无论是在本地运行还是通过隧道运行。 var runner = require ( 'wd-tap-runner' ) , wd = require ( 'wd' ) , browserify = require ( 'browserify' ) ; var myCode = browserify ( ) . add ( './test.js' ) . bundle ( ) , browser = wd . remote ( ) ; browser . init ( function ( ) {

在线运行 Linux,真滴牛逼。

就是很强

JackTian 2万+

STM32最小系统硬件组成详解

STM32最小系统硬件组成详解 0组成: 电源 复位 时钟 调试接口 启动 1、电源 : 一般3.3V LDO供电 加多个0.01uf去耦电容 2、复位:有三种复位方式:上电复位、手动复位、程序自动复位 通常低电平复位:(51单片机高电平复位,电容电阻位置调换) 上电复位,在上电瞬间,电容充电,RESET出现短暂的低电平,该低电平持续时间由电阻和电容共同决定,计...

alala120的博客 12万+

【亲测免费】 JSLinux-Deobfuscated: 探索JavaScript实现的Linux系统

JSLinux-Deobfuscated: 探索JavaScript实现的Linux系统 JSLinux-Deobfuscated是一个开源项目,它基于Lev Skvortsov的原始JSLinux项目,并将代码进行了反混淆处理,使其更易于阅读和学习。 什么是JSLinux-Deobfuscated? JSLinux-Deobfuscated是一个完全由JavaScript编写的Linux模拟器。...

gitblog_00084的博客 727

吉林大学2016级唐班c语言期末考试B卷

` #include<stdio.h> #include<stdlib.h> //双指针法,每次从a,b中选一个最大的数,从后向前一次放在数组a中 int merge(int *a,int m,int *b,int n){ int i=m-1,j=n-1,k=m+n-1; while(i>=0&&j>=0){ if(a[i]>b[j])a[...

weixin_42339173的博客 1195

【VTKExamples::Meshes】第十二期 QuadricDecimation

本文分享VTK样例QuadricDecimation,并解析接口vtkQuadricDecimation,希望对各位小伙伴有所帮助!

qq_40041064的博客 341

jslinux

jslinux 是 Fabri http://bellard.org/jslinux/

闲云孤鹤 2929

国社科“选题设计论证”部分不再难!用AI快速梳理五大核心板块,轻松撰写出高质量的基金申报书(附AI提示词)

七哥给大家推荐的高校都在用的AI平台——高级学术版专业应用平台,集成了ChatGPT、Claude、Gemini、Grok等Al大模型的PLUS版本平台,包括 ChatGPT-5、4o、o3、4.1、4.5、Gemini 2.5 Pro、Claude 3.7、Claude 4、DeepSeek 满血版、Grok 3 、Grok 4等原生线路,还有国际主流的GPTs学术应用,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。

智能AI让学术科研更容易 929

逆天了,浏览器里面竟然也能运行Linux(JSLinux)

今天在学习NodeJS,在Node.JS实战书上提到了一个运行在JavaScript环境中的PC模拟器。读者你没有听错,是用JavaScript模拟的一个Linux服务器,而且上面还可以执行命令。支持从本地拷贝资料到服务器上,同时也支持从服务器上拷贝资料到本地,太神奇了!!!!

超越梦想,一起飞!!! 8337

【第1章>第9节】基于FPGA的图像开运算处理算法的Verilog实现

本文介绍了基于FPGA的开运算图像处理实现方法。主要内容包括:1)输入图像二值化处理,通过阈值将灰度图像转换为二值图像;2)数据缓存与窗口提取,使用寄存器数组缓存5行图像数据并构建5×5处理窗口;3)腐蚀运算逻辑,判断窗口内是否全为白色像素;4)膨胀运算逻辑,检测窗口内是否存在白色像素。最后给出了Verilog实现方案,通过级联腐蚀和膨胀模块完成开运算处理。该方法可用于FPGA图像处理算法开发。

MATLAB,verilog,python,opencv,tensorflow,caffe,C,C++ 313

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度

本实验基于Kaggle上提供的从2013年到2023年的黄金价格数据集,运用长短期记忆网络(LSTM)构建了黄金价格预测模型。该数据集详细记录了每日的黄金价格信息,包括开盘价、收盘价、高点、低点和交易量等,为模型的训练提供了丰富的数据支持。

m0_64336780的博客 1万+

jslinux-deobfuscated-network

基础知识 查看网络包 [code="java"] tcpdump -i eth0 -e -v -l tcpdump -i eth0 -e -v -l -w a.pcap [/code] a.pcap给wireshark用 这个是必要的 转发三步走: 1.配置Linux系统的ip转发功能 [code="java"] echo 1 >/proc/sys/net/ipv4/ip...

走在左边 268

基于MATLAB的导弹轨迹和撞击位置仿真

本文将介绍如何使用MATLAB进行导弹轨迹和撞击位置的仿真,提高导弹的精确打击能力。首先,我们需要确定导弹的初始位置和速度,以及导弹所受到的外部环境因素如重力、空气阻力等。在MATLAB中,可以通过ODE求解器来模拟导弹的运动轨迹。最后,我们通过控制器输出的控制信号来控制导弹的姿态。通过对导弹的运动轨迹和姿态进行仿真,可以更好地预测和规划导弹的运动轨迹,提高其精确打击能力。在实际作战中,为了提高导弹精确打击能力,需要对导弹的撞击位置进行预测和规划。我们可以通过控制导弹的姿态来实现撞击目标的精确命中。

CyberLynxO的博客 1982

(转)jslinux

转载http://zwhc.iteye.com/blog/1048079 [code="java"] jslinux 简单分析 jslinux:用JavaScript写出一个PC模拟器,上面运行Linux 1、主页面 (http://bellard.org/jslinux/) 很简单,主要调用了 如下两个 js 文件。 http://bellard.org/jslinu...

走在左边 299

R语言使用party包中的ctree函数构建条件推理决策树(Conditional inference trees)、使用plot函数可视化训练好的条件推理决策树、条件推理决策树的叶子节点的阴影区域表

R语言使用party包中的ctree函数构建条件推理决策树(Conditional inference trees)、使用plot函数可视化训练好的条件推理决策树、条件推理决策树的叶子节点的阴影区域表示的是阳性样本的比例

data+scenario+science+insight 1223

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

可以运行在浏览器的Windows 2000

Windows 2000 被编译成 WebAssembly,可以在浏览器里跑了。

7738

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

linux网页运行版

1.在线运行 https://bellard.org/jslinux/ 2.简单版本 https://www.masswerk.at/jsuix/index.html

jadeshu的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

资源推荐:web js linux windows vm 虚拟机

可以在在浏览器中运行 X Window 或 Windows 2000、linux。

weixin_43172531的博客 1568

JSLinux-Deobfuscated:浏览器中的完整Linux系统体验指南

你是否想象过在浏览器中运行一个真实的Linux操作系统?JSLinux-Deobfuscated正是这样一个突破性的项目,它通过纯JavaScript技术实现了x86架构的完整模拟,让你无需安装任何软件就能在Web环境中体验Linux的强大功能。 ## 🌟 项目核心价值 JSLinux-Deobfuscated是Fabrice Bellard原始JSLinux项目的反混淆版本。经过手工处理,

gitblog_01059的博客 474

JavaScript实现的x86模拟器:JSLinux-Deobfuscated终极指南

JSLinux-Deobfuscated是一个基于Bellard先生早期JSLinux版本的开源项目,它通过人工反混淆和注释,将原本复杂的代码重写为人类可读的形式。这个JavaScript实现的x86模拟器让用户能够在浏览器中体验Linux系统,是学习计算机体系结构和操作系统的绝佳工具。 ## 什么是JSLinux-Deobfuscated? De-obfuscated JSLinux是一个教

gitblog_00018的博客 1146

JSLinux-Deobfuscated深度解析:浏览器中的完整Linux系统体验

想象一下,在浏览器中直接启动一个完整的Linux系统,无需安装任何软件,这就是JSLinux-Deobfuscated带给我们的神奇体验。这个基于JavaScript的x86模拟器项目,不仅技术独特,更为学习操作系统原理提供了绝佳平台。 ## 什么是JSLinux-Deobfuscated? JSLinux-Deobfuscated是Fabrice Bellard原始JSLinux项目的反混淆

gitblog_01151的博客 495

Linux 在线模拟器

作者:gisen_6 熟读唐诗三百首,不会作诗也会吟 Linux 在线模拟器 最近在学习Linux的一些命令的使用,但是很久之前装的Linux虚拟机被删掉了,又不想为了练习几个命令折腾一遍虚拟机。所以,就尝试地搜了一下,看看有没有在线的Linux模拟器可以使用,只要可以练习一下命令的使用即可。在google中用英文关键词一搜,还真有大牛弄出了一些在线的Linux模拟器...

weixin_33770878的博客 5112

看如何在 Web上运行linux[JSLinux]

  先来看下几张图片     测试环境  I7 8700K   24G   GTX-1080 360安全浏览器   Windows 2000 启动需要5分钟左右,运行起来有点卡,也就这样吧       Linux 4.12.0 Console版,启动很快速 大约5秒 就启动成功,根目录有个hello world例子 编译要3秒       Linux 4.12...

记事本 615

linux在线练习模拟器

文章目录1.cv.vu2.JSLiunx3. codingground(代码域)4.jor1k5.JS/UIX结语 1.cv.vu http://cb.vu/点击链接可以进入哦! (推荐!) cb.vu也是一个用Javascript开发的在线模拟器,系统版本是FreeBSD 7.1-STABLE ,界面是铺满浏览器窗口的,个人感觉使用起来比前面几个都方便一点,一般用这个。 使用过程中可参考TOOLBOX中文版:http://cb.vu/unixtoolbox_zh_CN.xhtml 描述:这是一个模拟版的l

张国荣家的弟弟 8571
上一篇: wasm编译mame游戏到h5中
下一篇: kaldi跑在浏览器里,kaldi-wasm
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值