Vmware实现一台电脑中的网络 [转自Develpworks]

OpenClaw 企业级自动化系统架构设计与实现 本文介绍基于 OpenClaw 构建的企业级自动化系统的完整架构设计、技术选型、实现细节和性能优化方案。 阅读详情

Vmware实现一台电脑中的网络

来自Develpworks 作者: forrestrun

本文探讨在一台电脑上面利用vmware模拟多个电脑,并实现较复杂的网络环境下多个模拟机器的联网,并以zebra路由软件和ipv6使用为例做了测试和说明。

为什么要做这个测试?
使用 vmware对于软件开发人员和网络维护人员,非常有意义。不仅仅在于它可以方便简洁的模拟出一个虚拟的机器环境以供工作使用,而且在于在对OS有部分有 影响的操作如网络攻击、破坏性实验等,如果采用vmware将非常非常安全,因为虚拟环境的影响仅仅是对一个数据文件的影响,不会真正对host主机硬件 设备软件程序产生其他问题。生产系统上面的系统调整在没有经过测试数据的证明,贸然的直接上线将暗含巨大的风险,如果软件开发或者系统管理人员使用 vmware将非常适合进行此类的测试和研究。

另外,很多网络环境的测试和实验,我们必须使用交换机(或者hub),一堆网线,多台测试设备。在笔者从前进行过的在用cisco的25系列的路由器进行网络实验时,5台cisco路由器和一堆网线的连接工作量可不小,而且这种实验代价昂贵。

vmware workstation版本是vmware公司针对桌面用户在单机条件下开发的虚拟电脑软件。利用该软件,用户可以根据本机的情况,定制多个虚拟电脑同时 运行在一个真实的操作平台下和一个复杂的网络环境下。在某种情况下可以令人惊叹的抛弃那一大堆的网络设备了!

还有一点,目前使用vmware做单个系统的资料非常多,但是注重虚拟网络环境的资料还不是非常多见,这里可以希望抛砖引玉。

VMWare是什么?
Vmware是vmware inc 的一个强大的虚拟机器软件(http://www.vmware.com)。它有多个版本,有针对服务器的GSX、ESX版本,和针对桌面用户的workstation版本。在vmware中可以提供很完备的以太网环境,甚至在vmware中有9个虚拟的交换机可以供我们使用!更多的信息请查看他的Online Manual。

实验环境
路由器是网络中的核 心设备,在实际的网络环境中进行路由器的测试学习和研究是现实的,而搭建一个较复杂的路由器环境是代价不菲的。利用linux下面的强大路由器软件 zebra,借助vmware的virtual network,我们可以搭建自己的路由器实验环境,并可以根据自己的需求情况继续扩展。另外,ipv6等测试必须借助多台网络设备,并使用网络分析工具 进行分析,才能更好的理解和学习。

1,环境准备:
实验环境:

1) IBM ThinkPad R40e 笔记本电脑(cpu p4 2.0G,256M内存,30Gdisk)

2) Windowns XP Home Edition + sp1

3) vmware workstation 4.0.5 build-6030 + 30days license

2,更改网络配置:
安装了vmware之后,首先我更改了vmware的网络环境(在vmware的edit菜单中找到virtual network setting)。步骤如下:

1) 点Edit下Virtual Network Setting… ,弹出Virtual network Editor对话框;

2) 在Virtual network Editor对话框中的Host Virtual Network Mapping中点Vmnet1后面的按钮"…",再点弹出菜单的subnet,然后设定子网;

3) subnet1设定为192.168.1.0/255.255.255.0;mnet2,Vmnet3,Vmnet4,Vmnet8,Vmnet9的子网 分别为192.168.2.0/255.255.255.0, 192.168.3.0/255.255.255.0, 192.168.4.0/255.255.255.0, 192.168.8.0/255.255.255.0, 192.168.9.0/255.255.255.0。

4) 其他vmnet空闲,最多可以设定9个子网,可以根据需要设定。


3,网络定制优化:
1) 由于默认安装的vmware采用的是ip地址通过dhcp获得,我在安装好之后就禁用了vmware的dhcpd服务,然后禁用了各个子网使用dhcp获得ip。

2) 如果为了使虚拟机器访问外部网络,应该设置一个vmnet可以使用NAT服务对外访问,默认vmnet8可以通过NAT访问外部网络。此子网段默认的网关设置为192.168.8.2,并确保NAT service服务启动。

3) 确认Automatic Bridging 的Enable Automatic Bridge的Automatically choose an available physical network adapter to bridge to Vmnet0 选项被选。

4,虚拟机定制优化
为了在一 台机器运行多个虚拟机器,最好对每个虚拟机器做些优化工作。根据使用经验,在运行任务不多的虚拟机器上面,对内存的需求远大于cpu的利用。因此,我们安 装R1、R2、R3、R4和R5这五个以Debian GNU/Linux为基础虚拟机器,并建议对每个虚拟机器的kernel进行优化,以减少对实际机器的系统开销。个人的做法如下:

1) 最简安装了一个虚拟系统Debian 3,安装目标文件夹和该虚拟机都命名为R1;

2) 增加必须的虚拟机硬件,譬如网卡等;

3) 在其他debian linux虚拟机环境中编译好bin的软件工具,通过scp或者ftp等方式拿到R1虚拟机器中来,并做相关的配置。这里我安装了部分网络工具如iputils,iproute2,tcpdump,sshd,zebra等软件;

4) 为了做ipv6测试,在其他环境中编译一个支持ipv6 的kernel也拿到R1虚拟中;

5) 为zebra做预准备:在/usr/local/zebra/etc下更改.sample文件为conf文件;

6) 确认R1虚拟机器准备好后,关闭R1虚拟机;

7) 然后将这个安装系统的数据文件夹备份一份作为永久备份,再拷贝4份,分别命名为R2,R3,R4,R5;

8) 然后在vmware中"打开现存的虚拟机器"打开这新加入的4个虚拟机器,并在option中更改各自的Vitrual machine name 分别为R2,R3,R4,R5;

9) 分别更改R2,R3,R4,R5的相应设置和hostname等,并相应更改ip地址/ipv6地址等。

5,构建如下网络拓扑图:

网络配置情况:

6,测试:
分别启动R1到R5的虚拟机器,并检查虚拟网络的联通性。在每个虚拟机器中检查唯一相同网段的其他虚拟机器,以R1为例做相关测试。如果您对网络的通信过程希望有更加深入观察,请在R1的第二个console界面打开tcpdump,随时查看想要观察的信息。

1)检测网卡地址 ifconfig 或者ip命令:

R1:~# ip a
1: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:ae:a1:59 brd ff:ff:ff:ff:ff:ff
inet 192.168.8.11/24 brd 192.168.8.255 scope global eth0
inet6 fe80::20c:29ff:feae:a159/64 scope link
2: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:ae:a1:63 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/24 brd 192.168.1.255 scope global eth1
inet6 fe80::20c:29ff:feae:a163/64 scope link
3: eth2: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:ae:a1:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.2.11/24 brd 192.168.2.255 scope global eth2
inet6 fe80::20c:29ff:feae:a16d/64 scope link
4: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
5: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0

2)网络联通性 ping 或者ping6 或者arping命令:

R1:~# ping 192.168.8.12
PING 192.168.8.12 (192.168.8.12): 56 data bytes
64 bytes from 192.168.8.12: icmp_seq=0 ttl=64 time=14.0 ms
64 bytes from 192.168.8.12: icmp_seq=1 ttl=64 time=1.9 ms

--- 192.168.8.12 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 1.9/5.0/14.0 ms

zebra路由软件使用
1) 以运行daemon方式启动zebra,zebra就开始监听本地的2602端口,其他各个路由协议的daemon进程分别监听不同的服务端口(ripd 监听tcp 2602和udp520端口,ospfd监听tcp 2604端口,bgpd监听tcp179端口和2605端口,ospf6d监听tcp (ipv4和ipv6)的2606端口)。

2) 从pc机器上telnet到R1的zebra服务,用户名口令默认都是zebra,看看界面是不是和cisco的路由器有些想象呢。

3) 利用R2,R3,R4,R5其他做路由实验。注意,这里不光可以利用zebra的各种路由软件的debug观察路由协议的工作过程,还可以利用linux的tcpdump来进行更加详细的观察。

4) 启动各个虚拟机器的zebrad和相关路由协议进程服务(为了更好的实验,各个路由协议分别测试);

5) 打开动态路由发现,看看是不是一会儿各个路由器都被发现啦? :)

虚拟机器网络环境用路由器模式表示就是如下的了:

6) 我们可以充分发挥想象,利用这么多台"路由器"实验各种路由协议。如果你又更多的想法譬如使用串口、并口通信也大可以试一试。:)

7) zebra更加详细的使用请阅读zebra的手册和其他资料。

ipv6软件的测试环境
ipv6是ip协议的下一个版本,并随着网络技术的发展,越来越进入大家的视线。这里做一个简单的ipv6的测试,以便检验利用vmware新建立的网络。建议在测试虚拟机器的其他console界面打开tcpdump -6 详细观察ipv6的协议工作情况。

1) Ipv6测试准备:
在安装系统时候已经安装了iproute和iputils都是可以对ipv6进行测试的工具,另外部分linux版本默认是没有加载ipv6支持模块的,在每个请加载之。

R1:~# modprobe ipv6 && lsmod |grep ipv6

如果成功加载ipv6模块请进行下面

R1:~# ip -6 a s
1: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qlen 1000
inet6 fe80::20c:29ff:feae:a159/64 scope link
2: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qlen 1000
inet6 fe80::20c:29ff:feae:a163/64 scope link
3: eth2: <BROADCAST,MULTICAST,UP> mtu 1500 qlen 1000
inet6 fe80::20c:29ff:feae:a16d/64 scope link
4: lo: <LOOPBACK,UP> mtu 16436
inet6 ::1/128 scope host

2) 发现网络上其他ipv6设备:

ipv6协议将不再支持arp协议,因此在ipv6中发现网络上其他ipv6设备可以使用如下方式:

R1:~# ping6 -I eth0 ff02::1
PING ff02::1(ff02::1) from fe80::20c:29ff:feae:a159 eth0: 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.200 ms
64 bytes from fe80::20c:29ff:fe07:1b34: icmp_seq=1 ttl=64 time=6.22 ms (DUP!)
64 bytes from fe80::20c:29ff:fe94:1776: icmp_seq=2 ttl=64 time=1.56 ms (DUP!)

这里采用ipv6中的本地连接多播地址(link-local multicast address)ff02::1来发现 同网络上的其他ipv6设备。这里发现的fe80::20c:29ff:fe07:1b34和fe80::20c:29ff:fe94:1776分别属于 R2的eth0的ipv6地址和R3的eth0地址。(由于R4没有开启ipv6,将不能看到R4的相应ipv6地址)

R1:~# ping6 -I eth0 fe80::20c:29ff:fe07:1b34
PING fe80::20c:29ff:fe07:1b34(fe80::20c:29ff:fe07:1b34) from fe80::20c:29ff:feae:a159 eth0: 56 da bytes
64 bytes from fe80::20c:29ff:fe07:1b34: icmp_seq=1 ttl=64 time=6.10 ms
64 bytes from fe80::20c:29ff:fe07:1b34: icmp_seq=2 ttl=64 time=89.1 ms

--- fe80::20c:29ff:fe07:1b34 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.835/32.373/89.185/40.209 ms

ipv6中的ping命令是iputil工具包中的ping6命令,必须注意的是 由于有多个网卡接口,必须使用 -I 指定使用哪个网卡接口。

3) 发现ipv6路由:

默认路由中ipv6路由表如下:

R1:~# ip -6 r
fe80::/64 dev eth0 metric 256 mtu 1500 advmss 1440
fe80::/64 dev eth1 metric 256 mtu 1500 advmss 1440
fe80::/64 dev eth2 metric 256 mtu 1500 advmss 1440
ff00::/8 dev eth0 metric 256 mtu 1500 advmss 1440
ff00::/8 dev eth1 metric 256 mtu 1500 advmss 1440
ff00::/8 dev eth2 metric 256 mtu 1500 advmss 1440
default dev eth0 proto kernel metric 256 mtu 1500 advmss 1440
default dev eth1 proto kernel metric 256 mtu 1500 advmss 1440
default dev eth2 proto kernel metric 256 mtu 1500 advmss 1440
unreachable default dev lo proto none metric -1 error -101

4) 测试本地ipv6服务

linux系统目前支持ipv6的服务器软件已经非常多,常用的软件如opensshd/sshd,apache,bind,telnetd, iptables-ipv6,nmap等。这里以sshd作为一个测试。

R1:~# ssh -6 ::1
Host key not found from database.
Key fingerprint:
xobit-pihuz-gypek-lokad-leliz-hupim-pavek-pyvem-canam-nefaf-laxax
You can get a public key's fingerprint by running
% ssh-keygen -F publickey.pub
on the keyfile.
Are you sure you want to continue connecting (yes/no)?

5) ipv6-in-ipv4 tunnel测试

由于ipv4在网络中已经实现了多年,而且Internet的发展更加促使ipv4的发展,目前ipv6在网络中的实际情况是ipv6象一个孤岛被 ipv4的海洋包围,各个ipv6网络的连接还需要通过ipv4网络,实际中比较常见的有ipv6-in-ipv4隧道等。这里利用本虚拟环境进行点对点 的IPv6-in-IPv4 tunnel的实验(R1-R2)。

在R1机器上面:


ip -6 addr add 3ffe:3200::1/24 dev eth0 #给eth0设定一个本地ipv6地址,以CERNET的测试ipv6地址为例
ip tunnel add 6to4 mode sit remote 192.168.8.12 local 192.168.8.11 #加入一个6to4通道
ip link set dev 6to4 up #激活6to4通道
ip -6 addr add 3ffe:3200::1/24 dev 6to4 #给通道加入本地ipv6地址
ip -6 r add 3ffe:3200::2/24 dev 6to4 #加入使用通道设备的ipv6路由,由于使用的点对点的测试,目的网络是对端的ipv6地址

在R2机器上面:

ip -6 addr add 3ffe:3200::2/24 dev eth0
ip tunnel add 6to4 mode sit remote 192.168.8.11 local 192.168.8.12
ip link set dev 6to4 up
ip -6 addr add 3ffe:3200::2/24 dev 6to4
ip -6 r add 3ffe:3200::1/24 dev 6to4

也可以加入R3,R4,R5的ipv6 tunnel,以供更加复杂的测试。

在R1和R2设备上面,使用ping6命令查看对端的ipv6地址可以到达;

在R1和R2设备上面,使用ssh -6 ipv6地址通过ipv6 tunnel登录点对点连接的其他ipv6设备;

R1:~# ssh -6 3ffe:3200::2
Host key not found from database.
Key fingerprint:
xobit-pihuz-gypek-lokad-leliz-hupim-pavek-pyvem-canam-nefaf-laxax
You can get a public key's fingerprint by running
% ssh-keygen -F publickey.pub
on the keyfile.
Are you sure you want to continue connecting (yes/no)? yes
Host key saved to /root/.ssh2/hostkeys/key_22_3ffe:3200::1.pub
host key for 3ffe:3200::1, accepted by root Wed Mar 31 2004 19:12:51 +0800
root's password:
Authentication successful.
R2:~# w
08:16:21 up 3:02, 3 users, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/7 3ffe:3200::11 08:16 0.00s 0.13s 0.04s w
R2:~#

Ok,我们已经通过ipv6-in-ipv4的tunnel看到我们使用ipv6地址登录到另外的设备上面了!

此过程在R2上面的tcpdump结果:

08:23:35.833428 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: S 2462930696:2462930696(0) win 5760 <mss 1440,sackOK,timestamp 19066103 0,nop,wscale 0>
08:23:35.835364 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: S 1730732585:1730732585(0) ack 2462930697 win 5632 <mss[|tcp]> (encap)
08:23:35.860756 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: . ack 1 win 5760 <nop,nop,timestamp 19066109 11103448>
08:23:35.919035 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: P 1:50(49) ack 1 win 5632 <nop,nop,[|tcp]> (encap)
08:23:35.925164 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: . ack 50 win 5760 <nop,nop,timestamp 19066127 11103532>
08:23:35.925193 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: P 1:50(49) ack 50 win 5760 <nop,nop,timestamp 19066135 11103532>
08:23:35.926647 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: . ack 50 win 5632 <nop,nop,[|tcp]> (encap)
08:23:35.936087 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: P 50:538(488) ack 50 win 5632 <nop,nop,[|tcp]> (encap)
08:23:35.954300 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: P 50:546(496) ack 538 win 6432 <nop,nop,timestamp 19066165 11103549>
08:23:35.994265 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: . ack 546 win 6432 <nop,nop,[|tcp]> (encap)
08:23:35.995267 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: P 546:706(160) ack 538 win 6432 <nop,nop,timestamp 19066204 11103607>
08:23:35.995479 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: . ack 706 win 6432 <nop,nop,[|tcp]> (encap)
08:23:36.117795 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: P 538:1578(1040) ack 706 win 6432 <nop,nop,[|tcp]> (encap)
08:23:36.127435 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: . ack 1578 win 8320 <nop,nop,timestamp 19066260 11103731>
08:23:36.127761 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: P 1578:1610(32) ack 706 win 6432 <nop,nop,[|tcp]> (encap)
08:23:36.137272 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: . ack 1610 win 8320 <nop,nop,timestamp 19066311 11103740>
08:23:36.145247 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: P 706:738(32) ack 1610 win 8320 <nop,nop,timestamp 19066382 11103740>
08:23:36.147153 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: . ack 738 win 6432 <nop,nop,[|tcp]> (encap)
08:23:36.151282 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: P 738:826(88) ack 1610 win 8320 <nop,nop,timestamp 19066385 11103760>
08:23:36.156464 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: . ack 826 win 6432 <nop,nop,[|tcp]> (encap)
08:23:36.157473 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: P 1610:1698(88) ack 826 win 6432 <nop,nop,[|tcp]> (encap)
08:23:36.163413 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: . ack 1698 win 8320 <nop,nop,timestamp 19066396 11103770>
08:23:36.163446 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: P 826:1922(1096) ack 1698 win 8320 <nop,nop,timestamp 19066399 11103770>
08:23:36.178682 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: P 1698:2810(1112) ack 1922 win 8768 <nop,nop,[|tcp]> (encap)
08:23:36.182715 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: P 1922:3018(1096) ack 2810 win 11120 <nop,nop,timestamp 19066432 11103791>
08:23:36.188978 192.168.8.12 > 192.168.8.11: 3ffe:3200::1.ssh > 3ffe:3200::2.1047: P 2810:3922(1112) ack 3018 win 10960 <nop,nop,[|tcp]> (encap)
08:23:36.234615 3ffe:3200::2.1047 > 3ffe:3200::1.ssh: . ack 3922 win 13344 <nop,nop,timestamp 19066491 11103802>

总结
vmware不仅仅作为一个模拟机器,它所提供的网络环境也是一个让人称道的真实网络,配合多种网络工具,我们对你所想象的网络的将更加容易的实现。

参考资料

  1. http://www.vmware.com/
  2. http://www.zebra.org
  3. http://www.ipv6.net.edu.cn/
  4. LDP的IPv6-Linux-Howto
  5. developerWorks Linux文章《在Linux上构建网络路由器》
从Microchip SDK到STM32实战:手把手教你移植LAN9252 EtherCAT从站驱动(含EEPROM配置避坑) 本文详细介绍了如何将Microchip SDK中的LAN9252 EtherCAT从站驱动移植到STM32F407平台,包括FSMC接口配置、中断处理适配和EEPROM配置等关键步骤。通过实战指南和避坑技巧,帮助开发者快速实现高性能EtherCAT从站设备的开发,适用于工业自动化领域。 阅读详情

相关推荐

Python与西门子PLC数据交互实战:基于Snap7的跨平台工业通信指南

本文详细介绍了如何使用Python和Snap7库实现与西门子PLC的数据交互。内容涵盖跨平台环境搭建、连接参数配置、数据读写实战及性能优化技巧,为工业自动化、数据采集和智能制造场景提供了一套轻量、灵活且高效的通信解决方案。

vim8coder的博客 282

vmware开启ipv6

vmware虚拟机配置ipv6网络

幻神舞的专栏 4235

OpenIddict实战指南:在.NET Core中构建安全的OAuth 2.0与OpenID Connect服务

本文详细介绍了如何在.NET Core中使用OpenIddict框架构建安全、标准的OAuth 2.0与OpenID Connect授权服务。内容涵盖从快速搭建授权服务器、理解核心配置与授权流程,到集成用户数据库、实现完整登录授权,以及生产环境下的安全加固与部署指南,为.NET开发者提供了一套现代、可维护的认证授权解决方案。

weixin_29229989的博客 354

VMware开启IPV6地址

1.在要开启IPV6地址的虚拟机点击【编辑】——【虚拟网络编辑器(N)】 点击【更改配置】 更改VMnet1为NAT模式,然后点击【NAT设置】: 设置vmnet1的子网IP及网关——【启用IPv6】 点击确定 点击要开启ipv6的虚拟机,点击【虚拟机】——【设置】 点击【网络适配器】——【自定义(U):特定虚拟网络】选择之前配置的VMnet1(NAT模式)点击确定 2. 系统配置ipv6IP地址 vi /etc/sysconfig/network-scripts/i.

weixin_44978169的博客 6591

记二开金蝶云星空动态表单艰辛历程

整个过程,开发接近一周,期间也有做其他事,遇到不会的第一时间也是找金蝶社区,搜索有无相关的解决问题经历。再就是问同事,最终还不能解决就提工单给供应商。响应一般都要大半天(我们公司是有vip,相对大半天能够响应是算好了),虽然有时候有响应,但是会转到其他研发老师,期间可能会是几天!如果是经常开发云星空的二开功能,熟练了速度回很快,但是对于接触不多的,或者刚入门的,会是个漫长的折磨过程。1、重新生产模块的dll.2、退出客户端3、重启iis4、等待五六分钟5、附加到进程6、登录客户端进去操作。

修炼中 3936

三菱CNC数据采集实战:从SDK安装到C#代码调试全流程(附完整资源包)

本文为C#开发者提供了三菱CNC数据采集的完整实战指南。详细介绍了从获取并安装核心A2协议SDK、配置Visual Studio开发环境,到理解COM接口文档、封装C#通信类,并构建具备多设备连接与定时采集功能的WinForms应用程序的全流程。文章重点分享了网络调试、异常处理及性能优化等关键实战经验,帮助开发者高效打通工业自动化数据采集链路。

oauth7security的博客 707

2021-01-10

192.168.1.0/24 192.168.1.0/25 area0 MA骨干 192.168.1.0/27 192.168.1.0/29 192.138.1.8/29 192.168.1.16/29 192.168.1.24/29 用户 192.168.1.32/27 R1 192.168.1.64/27 R2 192.168.1.96/27 R3 192.168.1.128/25 area1 192.168.1.128/27 —P2P 192.168.1.128/30 192.16.

悠夢的博客 288

MATLAB三元相图实战:从数据准备到高级可视化技巧全解析

本文深入解析了如何使用MATLAB绘制专业的三元相图(ternary plot)。文章从数据归一化、范围映射等预处理技巧入手,详细介绍了散点图、等高线图、凸包计算等高级可视化方法,并提供了多数据集对比与出版级图表美化的实战指南,帮助科研与工程人员高效呈现复杂的三元数据关系。

spark7igniter的博客 258

技术指导5-虚拟机网卡模式+ospf

文章目录一、VMware虚拟机网卡模式1,仅主机模式2,NAT模式3,桥接模式二、OSPF协议1,数据包类型2,状态机3,各种类型的LSA4,特殊区域5,OSPF接口网络类型6,选路规则 一、VMware虚拟机网卡模式 原链地址:点击跳转 1,仅主机模式 2,NAT模式 3,桥接模式 二、OSPF协议 1,数据包类型 1,Hello 用于发现,建立,保活邻居关系 2,DBD 数据库描述报文,包括主从选举DBD,以及携带目录信息的DBD 3,LSR 链路状态请求,请求LSA 4,LSU 链路状态更新,携

践踏记忆的博客 891

vue2/3 - 详细对接海康监控实时视频预览和录像回放功能,vue接入使用海康视频监控播放器实时推流等功能,支持hik/rtsp/rtmp/hls/ws取流协议(详细教程与示例代码,一键复制开箱即用

vue2,vue3,海康,vue海康视频监控,海康开放平台,如何接入海康的实时监控,海康威视,Vue实现海康监控视频播放,vue3对接海康视频监控播放、回放的方法流程,实现海康H5视频插件播放视频的实例,web网页接入海康,海康威视的视频vue的录像回放和实时预览,前端vue3项目接入海康威视h5player.js播放器,vue2接入海康威视视频监控平台,使用海康监控H5视频播放,对接海康视频监控,海康视频web插件,web前端在vue中通过海康插件嵌入视频,实现实时预览,vue3海康监控播放器组件,vue

✅ 精选推荐文章 1万+

GEE必须会教程——一文教会你研究区域分块计算与合并

一整块算不是挺好的吗?emmmm,用过的人都知道,GEE好比幼年期的“紫妍”,要用“丹药”来养的,除非你是萧炎小友,到哪都有人给爆金币。我们今天想做的是计算2020年夏季西藏自治区的植被覆盖度(FVC),FVC的估算需要使用归一化植被指数(NDVI数据),这里我们用到的产品是MODIS的相关数据产品,该产品的分辨率是25 0m。下载好的结果毕竟是一块一块的,怎么对下载好的结果进行拼接,变成一张大图呢,别急,接下来,我们上科研小霸王——R语言。此处,我们通过省份数据,按照属性筛选,得到西藏自治区的行政边界。

Promising_GEO的博客 2511

虚拟机VMware开启ipv6地址

本地虚拟机VMware开启ipv6地址 1.在工具栏找到【编辑】-----【虚拟网络编辑器】 2.点击【更改设置】-----VMnet8要设置为Nat模式 3.选择【NAT设置】-----启用ipv6----点击【确认】就可以了 4.windows的虚拟机右下角网卡选择NAT模式,只需要在本地连接启用ipv6就可以获取到ipv6地址了 打开【控制面板】--------------【网络和Internet】--------------【网络和共享中心】--------------【更改适配器设置】---

小渣渣 1万+

Python全栈入门到实战【进阶篇 1】类与对象:面向对象编程的基石

Python中定义类使用**class关键字**,创建对象使用**类名()**(类似调用函数),语法简洁,我们从最基础的空类开始,逐步拆解。class# 定义空的学生类,pass表示占位,无实际内容 class Student : pass编码规范:类名遵循大驼峰命名法(每个单词首字母大写,无下划线),如StudentCarPhone,这是Python官方推荐的PEP8规范,便于区分类和其他标识符。实例方法必须定义在类内部;实例方法的第一个参数必须是self(名称可自定义,如this。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3403

VMWare配置桥接

【代码】VMWare配置桥接。

一起coding,一起嗨。 706

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机网络 day8 动态路由 - NAT - SNAT实验 - VMware的网卡的3种模式

dhcp服务器给仅主机模式的虚拟机分配ip地址的时候,没有告诉虚拟机网关的ip,没有配置网关,导致虚拟机不能进行跨网段通信,只能和真实机器通信。1.桥接模式: bridge 直接连接到物理网络,其实就是虚拟机和真实机器在同一个局域网里,利用真实机器的网卡连接到真实的交换机上或者路由器上。: 你的虚拟机只是和你的真实机器通信,不能跟别人的真实机器或者虚拟机通信,避免ip地址冲突。虚拟机和真实机器在同一个网段,地位是平等的。不同的vlan --》不同vlan对应不同的网段 --》做了隔离的。

lpfstudy的博客 2877

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

同一个拓扑2种路由协议实现-----OSPF篇(上)

网络环境中各设备的连接情况,PC机和路由器的各端口IP地址已在下面拓扑图中给出。 拓扑图 1、配置路由器各个端口的IP地址,命令参数如下: 路由器Router1各端口IP配置如下: Router1>en Route...

weixin_33851604的博客 274

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

为VMware NAT模式启用ipv6

简介 本文描述如何在win10下为VMware workstation的NAT网络模式启用ipv6支持。VMware默认是未开启ipv6支持的,需要自己手动开启。(前提当然是你的主机网络支持ipv6) 步骤 1. 打开VMware,选择编辑-虚拟网络编辑器 2.选择VMnet8,然后点击下方的更改设置 3.选择上方的VMnet8,然后点击中间的NAT设置 4. 点击下方的启用IPv6,然后确...

若梦的博客 4460

vmware配置网络桥接模式

vmware网络桥接

m0_48312352的博客 662

关于解决vmware只有IPv6,没有IPv4

vmware虚拟机只有IPv6,没有IPv4

m0_63694181的博客 3001

VMware搭建ipv6的环境

编辑-虚拟网络编辑器 之后选择NAT设置 点击启用即可 你的虚拟机就有ipv6地址了

giantbranch的专栏 4300

ipv6系列--本机ipv6环境搭建

系统环境:centos7.5 kernel:3.10.0-862.el7.x86_64 Note:centos的最小化安装没有ipv6的内核模块,需要自己加载模块,所以我重新装了系统,选择的开发系统,其中勾选了网络相关的所有组件,ipv6也在其中。 查看服务器是否加载ipv6模块 lsmod | grep ipv6 如没有任何回显,则说明没有加载 加载ipv6模块 ...

WenCoo的博客 1671

【解决】VMware Workstation启用IPv6支持及桥连无法正常使用问题

文章目录1. 按2. 虚拟网络配置2.1. 桥连设置2.2. 启用NAT63. 虚拟机网络适配器设置 1. 按 VMwareWorkstation启用IPv6有两种方式: 设置成桥连模式,让虚拟机和物理机一样,都是由路由器来分配IP地址。 使用NAT模式,启用IPv6支持 两种方式都需要进设置里调一下,不然默认情况下可能都是无法正常使用的。 注:测试时使用的是VMware Workstation Pro 15.5.6,如果你的老版本没有相关选项,可以参考:VMware Workstation Pro 1

COCO56的博客 1万+

VM虚拟机只显示ipv6,不显示ipv4的问题

虚拟机网络ipv不显示

ghostonetwo的博客 7727

虚拟机linux设置IPv6地址

Vmware中Linux的IPv6地址设置

qq_39166937的博客 5374

VMware:主机使用IPv6地址ping通本地虚拟机(关闭IPv4协议,实现GNS3中的路由器与win7虚拟机进行通信,并抓包分析。)

主机A的ip是192.168.2.5/16;主机B的ip是192.168.3.7/24   将主机A的网关设为192.168.3.7,主机B的网关设为192.168.2.5,实现。原理就是,非同一网络,ARP给网关,让网关帮忙转发,正好网关就是主机B,主机B回复ARP发给网关,也就是主机A,ARP结束,双方确定mac地址,开始通信。 二. NAT模式 2.1 配置VMware网络编辑器  首先,打开VMware的网络编辑器,配置虚拟网卡,将虚拟网卡配置成NAT模式,因为笔者要自己配置静态ip,所以需要把dh

学无止境,勤则可达;志存高远,恒亦能成! 3106

虚拟机ubuntu下配置ipv6

虚拟机ubuntu配置ipv6

永远的我们的博客 1万+
上一篇: Java语言编码规范
下一篇: Google 招聘的21道题目
shadowDLL
博客等级 码龄23年 2粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值