查看网络包
tcpdump -i eth0 -e -v -l tcpdump -i eth0 -e -v -l -w a.pcap
a.pcap给wireshark用
这个是必要的
转发三步走:
1.配置Linux系统的ip转发功能
echo 1 >/proc/sys/net/ipv4/ip_forward
2.iptables转发:
iptables -t nat -A POSTROUTING -s "10.0.2.0/255.255.255.0" ! -d "10.0.2.0/255.255.255.0" -j MASQUERADE
3.开启混杂模式:
ip link set br1 promisc on
防止环路
#brctl stp br1 on #brctl stp br1 off
##########################################
服务端(配置ip)
ip link set tap1 up
ifconfig tap1 inet 10.0.2.1
客户端
ip link set eth0 up
ifconfig eth0 inet 10.0.2.100
(配置默认路由)
route add default gw 10.0.2.1 dev eth0
测试
ping 192.168.128.1
echo 8.8.8.8 > /etc/resolv.conf
ping www.baidu.com
刚连websocket的时候
01:00:5e:00:00:01 dev eth0 self permanent
是组播地址
jslinux中的代码走向
FileReader.onload net_handler pc.serial2.send_chars(str); pc.net0.receive_packet(data);
######################################
原理:
1.linux上建立br桥,桥用ipv4的转发和外网相通
2.py_websocket建立服务,每次连接时建立一个tap设备绑定到br上
3.web端用websocket连到py_websocket的服务上,
4.websocket的客户端用FileReader的onload特性(文件读取成功完成时触发)
接受消息pc.net0.receive_packet(data);
传入linux内核
定义net0的时候发现,linux向外发送消息是
ai定义了send_packet_func绑定自定义pi,
pi里面调用tuntap_sendData(withPrefix);
向websocket服务发送消息
最终实现
linux--->js(net0)--->filereader--->websocket--->服务(tap设备)---br网桥-->互联网
########################
操作步骤
下载
git clone http://github.com/killinux/jslinux-deobfuscated-network
随便放在nginx等web服务器中跑起来
cd websocketstuntap/
按照launch.sh中的操作:
设置ip转发
echo 1 >/proc/sys/net/ipv4/ip_forward
设置桥,和给桥设置ip
brctl addbr br1 brctl stp br1 on ifconfig br1 10.0.2.1 netmask 255.0.0.0 up
设置桥的混杂模式
ip link set br1 promisc on
#给桥设置dhcp的server,连这个桥的自动获取ip,这步骤不是必须
#dnsmasq --strict-order --except-interface=lo --interface=br1 --listen-address=10.0.2.1 --bind-interfaces --dhcp-range=10.0.2.100,10.0.2.254 --conf-file="" --pid-file=/var/run/qemu-dhcp-br1.pid --dhcp-leasefile=/var/run/qemu-dhcp-br1.leases --dhcp-no-override
设置ip转发,让vm中的网络能通外网
iptables -t nat -A POSTROUTING -s "10.0.2.0/255.255.255.0" ! -d "10.0.2.0/255.255.255.0" -j MASQUERADE
设置虚拟python环境,防止污染本机python
#virtualenv mysite #source mysite/bin/activate #pip install mod_pywebsocket
启动websocket服务
python -m mod_pywebsocket.standalone -d . --log-level=info -p 3000
js/network-websockets.js
中的代码连到websocket的server
例子代码
http://killinux.com/jslinux-deobfuscated-network/
jslinux中的网络已经和服务器在一个网络了
虚拟ip 10.0.2.0段
网关 10.0.2.1 是服务器的桥br1
可以尝试
ping www.baidu.com
ping www.google.com