1-Openwrt ipv6之-odhcp6c客户端

2023-11-03

wan口的拨号有好几种方式,SLAAC, stateless DHCPv6, stateful DHCPv6, DHCPv6-PD,这些请求方式在odhcpv6里面都可以配置。

1. odhcp6c客户端启动过程

开启openwrt .config配置

CONFIG_PACKAGE_odhcp6c=y
CONFIG_PACKAGE_odhcp6c_ext_prefix_class=0
CONFIG_PACKAGE_odhcp6c_ext_cer_id=0

odhcp6c的启动需要在/etc/config/network uci里面配置允许,类似IPV4的udhcpc

config globals 'globals'
        option ula_prefix 'auto'

config interface 'lan'
        option def_ifname 'eth0'
        option ifname 'eth0'
        option force_link '1'
        option type 'bridge'
        option proto 'static'
        option igmp_snooping '0'
        option ipaddr '192.168.18.1'
        option def_ipaddr '192.168.18.1'
        option res_ipaddr '10.1.2.1'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option macaddr 'DC:4B:DD:1D:FA:48'

config interface 'wan'
        option ipv6 '1'
        option def_ifname 'eth1'
        option ifname 'eth1'
        option proto 'dhcp'
        option web_proto 'dhcp'
        option macaddr 'DC:4B:DD:1d:fa:49'

config interface 'wan6'
        option ifname   'eth1'
        option proto    'dhcpv6'

配置好之后需要重启/etc/init.d/network restart里面会执行ubus call network reload然后就是一系列的ubus传输,最终会调用到/lib/netifd/proto里面对应的脚本,脚本netifd-proto.sh脚本里面会调用_proto_do_setup函数,启动各个协议进程。

/lib/netifd/proto$ ls
dhcp.sh 
1.1 IPV4 CLIENT udhcpc启动

ipv4的启动在./lib/netifd/proto/dhcp.sh脚本里面的proto_dhcp_setup函数

  • dhcp.sh脚本属于netifd-2014-09-08.1模块
  • udhcpc可执行程序属于busybox-1.22.1模块
proto_export "INTERFACE=$config"
    proto_run_command "$config" udhcpc -R \
        -p /var/run/udhcpc-$iface.pid \
        -s /lib/netifd/dhcp.script \
        -f -t 0 -i "$iface" \
        ${ipaddr:+-r $ipaddr} \
        ${hostname:+-H $hostname} \
        ${vendorid:+-V $vendorid} \
        $clientid $broadcast $dhcpopts
1.2 IPV6 CLIENT odhcp6c启动

ipv6的启动在./lib/netifd/proto/dhcpv6.sh脚本里面的proto_dhcpv6_setup函数

  • dhcpv6.sh脚本和odhcp6c都属于odhcp6c-2014-12-10模块
proto_export "INTERFACE=$config"
    proto_run_command "$config" odhcp6c \
        -s /lib/netifd/dhcpv6.script \
        $opts $iface
udhcpc -R -p /var/run/udhcpc-eth1.pid -s /lib/netifd/dhcp.script -f -t 0 -i eth1 -C
odhcp6c -s /lib/netifd/dhcpv6.script -P0 -t120 eth1
1.3 进程查看

odhcp6c启动之后,在netstat下面可以看到udp的546端口,因为DHCPv6的客户端使用546端口,服务器使用的是547端口

root@openwrt:/# netstat -naup | grep dhcp
netstat: showing only processes with your user ID
udp        0      0 :::546                  :::*                                1481/odhcp6c
udp        0      0 :::547                  :::*                                1347/odhcpd
2. odhcp6c拨号方式选择

上面提到了wan口的拨号是有很多种的,而且wan口的ifname也是会变化的。

2.1 dhcpv6方式

wan口拨号的uci配置在官网可以查看到
https://openwrt.org/docs/guide-user/network/ipv6/start

Name Type Required Default Description
reqaddress [try,force,none] no try Behaviour for requesting addresses
reqprefix [auto,no,0-64] no auto Behaviour for requesting prefixes (numbers denote hinted prefix length). Use ‘no’ if you only want a single IPv6 address for the AP itself without a subnet for routing
config globals 'globals'
        option ula_prefix 'auto'

config interface 'lan'
        option proto 'static'
        option ip6assign '60'

config interface 'wan6'
        option ifname   'eth1'
        option proto    'dhcpv6'

所以默认情况,udhcp6c的dhcpv6使用SLAAC + stateful DHCPv6 + DHCPv6-PD的方式进行拨号的。

所以路由器wan口获取到多少个ipv6地址,就看上一级的服务器能提供多少种服务。

如果上级只有dhcpv6服务器,则wan只获取到一个Global 地址,加上自己本地的Link地址,是两个ipv6地址

root@openwrt:/# ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 08:10:7B:A7:26:3C  
          inet6 addr: fe80::a10:7bff:fea7:263c/64 Scope:Link
          inet6 addr: 2001:db8:0:1::254/128 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1510 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3731 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:252070 (246.1 KiB)  TX bytes:501125 (489.3 KiB)

如果上级既有dhcpv6服务器,也有ra服务器,则就会有三个地址,一个本地Link,一个dhcp服务器分配的Global地址,一个ra服务器下发前缀算出来的Global地址。

eth1      Link encap:Ethernet  HWaddr 08:10:7B:A7:26:3C  
          inet6 addr: 2016:ac11:5cad:0:a10:7bff:fea7:263c/64 Scope:Global
          inet6 addr: fe80::a10:7bff:fea7:263c/64 Scope:Link
          inet6 addr: 2001:db8:0:1::254/128 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2288 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5709 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:387179 (378.1 KiB)  TX bytes:830273 (810.8 KiB)

支持DHCP-PD功能,所以在发送DHCP Solicit消息里面如果带了IA-Prefix的请求,则服务器就会在IA Prefix字段里面附带自己要在br-lan端口设置的ipv6端口地址前缀,2001:db8:0:f00::1/60,用于下发地址给lan口的设备的地址前缀,然后设置到br-lan的ifconfig里面。

在odhcp6c客户端发送DHCP-PD之后,会在br-lan口设置dhcp服务器的IP前缀,如下2001:db8:0:f00::,这样lan端就可以使用这个前缀地址通过odhcpd服务器下发给下一级ipv6地址了。

root@openwrt:/# ifconfig br-lan
br-lan    Link encap:Ethernet  HWaddr 08:10:7B:A7:26:3B  
          inet addr:192.168.18.1  Bcast:192.168.18.255  Mask:255.255.255.0
          inet6 addr: 2001:db8:0:f00::1/60 Scope:Global
          inet6 addr: fe80::a10:7bff:fea7:263b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:391 errors:0 dropped:0 overruns:0 frame:0
          TX packets:248 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:32339 (31.5 KiB)  TX bytes:74394 (72.6 KiB)
2.2 staticv6方式

ohdcp6c的静态IP方式将uci的值单独抽出来,没有跟上面的在一起,主要有如下参数

Name Type Required Default Description
ip6addr ipv6 address yes, if no ipaddr is set (none)
ip6ifaceid ipv6 suffix no ::1
ip6gw ipv6 address no (none) Assign given IPv6 default gateway to this interface
ip6assign prefix length no (none) Delegate a prefix of given length to this interface (see Downstream configuration below)
ip6hint prefix hint (hex) no (none) Hint the subprefix-ID that should be delegated as hexadecimal number (see Downstream configuration below)
ip6prefix ipv6 prefix no (none) IPv6 prefix routed here for use on other interfaces (Barrier Breaker and later only)
ip6class list of strings no (none) Define the IPv6 prefix-classes this interface will accept
dns list of ip addresses no (none) DNS server(s)
dns_search list of domain names no (none) Search list for host-name lookup
metric integer no 0 Specifies the default route metric to use
# cat /etc/config/network
config interface wan
        option ifname   eth1
        option proto    static
        option ip6addr  2001:db80::2/64   # Own address
        option ip6gw    2001:db80::1      # Gateway address
        option ip6prefix 2001:db80:1::/48 # Prefix addresses for distribution to downstream interfaces
        option dns      2001:db80::1      # DNS server
 
config interface lan
        option proto    static
        option ip6assign 60

上面这种方式就把wan接口配置成静态ipv6了模式了,这样ipv4也得是静态模式,所以一般在wan6里面设置成static,而wan里面ipv4的还是正常的dhcp/static

# cat /etc/config/network
config interface 'wan'
        option ipv6 '1'
        option def_ifname 'eth1'
        option ifname 'eth1'
        option proto 'dhcp'
        option web_proto 'dhcp'
        option macaddr 'DC:4B:DD:1d:fa:49'
        
config interface 'wan6'
        option ifname   eth1
        option proto    static
        option ip6addr  2001:db80::2/64   # Own address
        option ip6gw    2001:db80::1      # Gateway address
        option ip6prefix 2001:db80:1::/48 # Prefix addresses for distribution to downstream interfaces
        option dns      2001:db80::1      # DNS server
 
config interface lan
        option proto    static
        option ip6assign 60
3. 查看ipv6信息

在获取到ipv6地址后,除了使用ifconfig看下信息外,还可以使用ifstatus查看

root@openwrt:/tmp/state# ifstatus wan6
{
        "up": true,
        "pending": false,
        "available": true,
        "autostart": true,
        "uptime": 3195,
        "l3_device": "apcli0",
        "proto": "dhcpv6",
        "device": "apcli0",
        "metric": 0,
        "delegation": true,
        "ipv4-address": [

        ],
        "ipv6-address": [
                {
                        "address": "240e:ff:b112:7b52:dc4b:ddff:fe1d:fa08",
                        "mask": 64
                }
        ],
        "ipv6-prefix": [

        ],
        "ipv6-prefix-assignment": [

        ],
        "route": [
                {
                        "target": "240e:ff:b112:7b52::",
                        "mask": 64,
                        "nexthop": "::",
                        "metric": 256,
                        "source": "::\/0"
                },
                {
                        "target": "::",
                        "mask": 0,
                        "nexthop": "fe80::1c6e:5292:2b90:603",
                        "metric": 1024,
                        "valid": 8961,
                        "source": "240e:ff:b112:7b52:dc4b:ddff:fe1d:fa08\/64"
                },
                {
                        "target": "::",
                        "mask": 0,
                        "nexthop": "fe80::1c6e:5292:2b90:603",
                        "metric": 1024,
                        "valid": 8961,
                        "source": "::\/128"
                }
        ],
        "dns-server": [
                "fe80::1c6e:5292:2b90:603"
        ],
        "dns-search": [

        ],
        "inactive": {
                "ipv4-address": [

                ],
                "ipv6-address": [

                ],
                "route": [

                ],
                "dns-server": [

                ],
                "dns-search": [

                ]
        },
        "data": {
                "passthru": "00170010fe800000000000001c6e52922b900603"
        }
}
4. 手机热点的测试

现在的手机热点,一般都可以提供ipv6地址,中继成功后获取到如下ipv6地址,跟手机在同一个网段

手机可以在http://www.test-ipv6.com/上面看到自己的网段

然后路由器设置成无线中继模式,连接手机的热点,wan6的ifname设置成apcli0,dhcpv6模式

config interface 'wan6'
        option ifname   'apcli0'
        option proto    'dhcpv6'

连接成功后,可以看到以下信息,一个本地链路地址和一个全球单播地址。

root@openwrt:/tmp/state# ifconfig apcli0
apcli0    Link encap:Ethernet  HWaddr DE:4B:DD:1D:FA:08
          inet addr:172.20.10.13  Bcast:172.20.10.15  Mask:255.255.255.240
          inet6 addr: 240e:ff:b112:7b52:dc4b:ddff:fe1d:fa08/64 Scope:Global
          inet6 addr: fe80::dc4b:ddff:fe1d:fa08/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:33129 errors:0 dropped:0 overruns:0 frame:0
          TX packets:36694 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:16662784 (15.8 MiB)  TX bytes:4734313 (4.5 MiB)

使用手机热点获取到的Global ipv6地址是通过EUI64自己算出来的,所以这个地址应该不是dhcpv6服务器下发的,而是通过RA无状态模式生成的。

另外可以看到路由器的br-lan端口是没有全球单播地址的,路由器发出的IA-PD手机没办法回复,没有提供给下一级设备使用的地址。

这时候可以在lan口设置一个同网段的ipv6地址,这样lan端的设备就可以获取到ipv6地址,不过担心会冲突吧,比较不是正在的dhcpv6/ra服务器下发的

root@openwrt:/# ifconfig apcli0
apcli0    Link encap:Ethernet  HWaddr DE:4B:DD:1D:FA:08
          inet addr:172.20.10.13  Bcast:172.20.10.15  Mask:255.255.255.240
          inet6 addr: 240e:ff:b4d5:621d:dc4b:ddff:fe1d:fa08/64 Scope:Global
          inet6 addr: fe80::dc4b:ddff:fe1d:fa08/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10193 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10338 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9429739 (8.9 MiB)  TX bytes:3842656 (3.6 MiB)

root@openwrt:/# ifconfig br-lan add 240e:ff:b4d5:621d:dc4b:ddff:fe1d:fa08/64
root@openwrt:/# ifconfig br-lan
br-lan    Link encap:Ethernet  HWaddr DC:4B:DD:1D:FA:48
          inet addr:192.168.18.1  Bcast:192.168.18.255  Mask:255.255.255.0
          inet6 addr: 240e:ff:b4d5:621d:dc4b:ddff:fe1d:fa08/64 Scope:Global
          inet6 addr: fe80::de4b:ddff:fe1d:fa48/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2742 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1626 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:526741 (514.3 KiB)  TX bytes:441983 (431.6 KiB)

root@openwrt:/#ifconfig br-lan add 240e:ff:b112:7b52::2012/64

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1-Openwrt ipv6之-odhcp6c客户端 的相关文章

  • IPv6 组播示例

    我搜索了如何实现简单 ipv6 多播示例的示例 但是我只找到了使用 ipv4 的示例 谁能提供一个简单的 ipv6 多播 helloworld 示例 这是一个简单的客户端服务器示例 顺便说一句 在网络上的多台计算机上运行它将使所有计算机相互
  • hadoop和spark现在支持IPv6吗?

    我想在纯IPv6环境上构建Hadoop和Spark集群 我已经通过 IPv4 构建了它 如何配置在 IPv6 环境下运行它们 hadoop 和 Spark 现在支持 IPv6 吗 它不是 截至今日HADOOP 11890跟踪 IPv6 支持
  • 此正则表达式 (RegEx) 标志有何含义 /iD

    我想使用这个正则表达式来验证 IPv6 但我想了解它所做的一切https stackoverflow com a 1934546 3112803 gt gt a f0 9 1 4 gt 1 7 a f0 9 gt 8 1 gt 1 0 6
  • 使用 C# 检查 Windows 7 上是否启用了 IPv6

    我正在尝试使用 C 编写一个程序作为我公司的多功能工具 我们希望在此工具中完成的一件事是确定 IPv6 是否已启用 绑定到我们的 Windows 7 计算机上的局域网连接网络适配器 我并不是在寻找它的地址 只是想知道它是否在该适配器上启用或
  • 使用 IN6ADDR_SETV4MAPPED 和双堆栈套接字

    这是一个延续将 IPv4 客户端连接到 IPv6 服务器 连接被拒绝 https stackoverflow com questions 16480729 connecting ipv4 client to ipv6 server conn
  • OpenWRT git clone fatal:无法找到“http”的远程帮助程序

    我正在尝试将 LINC Switch 安装到 OpenWRT 并遇到以下问题 git clone https github com FlowForwarding LINC Switch git 并得到一个错误 git fatal Unabl
  • 使用 JSP 发送电子邮件

    这个问题快把我逼疯了 我有以下代码
  • ipv6 向后兼容 ipv4 吗?

    我有一个使用 ipv4 编写的小 udp 示例程序 如果我将代码更改为 ipv6 我仍然能够与使用具有 ipv4 地址的侦听器的任何人进行通信吗 我正在查看移植示例 http ou800doc caldera com en SDK neta
  • 在 MySQL 数据库中存储 IP 地址(IPv4 和 IPv6)

    好吧 现在我知道类似的问题可能已经被问过一百万次了 但我在这方面是一个真正的新手 我真的很感谢你在这里的帮助 基本上 我想将访问者的 IP 地址存储在 MySQL 中 以便以后检索和验证 我首先需要知道需要使用什么类型的字段来存储 IP 地
  • 什么决定了 System.Net.IPAddress.ToString() 的 IPv6 地址格式?

    内置 Net 方法 System Net IPAddress ToString 对于 IPv6 地址的行为不一致 给定字节数组0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 在某些环境下 aaaa aaaa aaaa
  • 强制 InetAddress.getHostAddress() 返回 IPv4 地址

    我正在使用一个使用的库java net InetAddress getLocalHost getHostAddress 获取我的本地IP地址 然而 这总是在我的计算机上返回 IPv6 地址 Gentoo Linux JDK 1 6 0 37
  • C++ 中的 IPv6 连接测试

    是否有任何 C 函数可以测试运行我的程序的计算机是否支持 IPv6 连接 我需要知道类似此页面的结果http test ipv6 com http test ipv6 com 但是在 C 中 EDIT 我试图使用getifaddrs 但返回
  • IPv6:connect() 总是失败并显示 errno 22

    操作系统是Ubuntu 我正在对基本 IPv6 操作进行简单测试 PC通过集线器与IP Camera 支持IPv6 连接 ping6 测试成功 ping6 I eth1 fe80 240 8cff fe94 451e PING fe80 2
  • 从 Dns.GetHostEntry() 获取 IPv4 地址

    我这里有一些代码在 IPv4 机器上运行得很好 但在我们的构建服务器 IPv6 上却失败了 简而言之 IPHostEntry ipHostEntry Dns GetHostEntry string Empty GetHostEntry 的文
  • 通过 SNMP 访问路由表

    如果我尝试查找安装了 openWRT 的 Linksys WRT54G 的路由表 我需要哪个 MIB 那应该是MIB II SNMP 对象 ID OID 为 1 3 6 1 2 1 4 21 可转换为ip ipRouteTable 这对我在
  • 匹配有效 IPv6 地址的正则表达式

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我在编写匹配有效 IPv6 地址的正则表达式时遇到问题 包括压缩形式的地址 使用 或从每
  • Python 中的反向 DNS 查找

    如果我有一个类似 2001 4860 4860 8888 的 IP 地址 如何获得 foo ip6 arpa 格式的完全限定域名 编辑 到目前为止 两个解决方案都给了我 google public dns a google com 也许反向
  • 为什么我不能将 ipv6 套接字绑定到 linklocal 地址

    include
  • 链路范围 IPv6 多播数据包突然无法在 MacBook Pro 上路由?

    这是一个有点晦涩的问题 但我很困惑 我想也许有人对这个问题有更多的线索 我的同事已经在他的 MacBook Pro 上成功运行了一个使用 IPv6 多播的内部应用程序几个月了 但今天 Mac 决定停止路由多播数据包 特别是 该程序打印此错误
  • 将 C++ TCP/IP 应用程序从 IPv4 转换为 IPv6。难的?值得这么麻烦吗?

    多年来 我使用 WinSock 为 Windows 开发了少量 C 服务器 客户端应用程序 路由器 Web 邮件 FTP 服务器等 等等 我开始越来越多地考虑创建这些应用程序的 IPv6 版本 当然 同时也保留原始的 IPv4 版本 问题

随机推荐

  • Xeon可扩展Xeon睿频

    进行多线程AVX512运算的时候 需要把频率降下来 使用更低的电压 才能把功耗控制在一个TDP范围内 这就是全核AVX512默频 如果散热给力 可以提高电压增加点功耗 频率提高点 AVX512全核睿频 进行多线程AVX2运算的时候 单个核心
  • react性能优化是哪个周期函数

    shouldComponentUpdate 这个方法用来判断是否需要调用render方法重新描绘dom 因为dom的描绘非常消耗性能 如果我们能在shouldComponentUpdate方法中能够写出更优化的dom diff算法 可以极大
  • 0基础如何学习软件测试?1小时给你安排明白

    先上一张学习路线 在测试行业已经呆了5年多了 也算得上行业经验资深了吧 基本上也是摸清了这个行业的发展 所以今天也想对有转行想法的朋友分享一下经验 能够让你对这个行业有个大致的了解和对以后的发展有所规划 不会像是个无头苍蝇一样毫无头绪 东打
  • 测试环境搭建

    测试环境的搭建 为什么搭建测试环境 如果开发人员调试代码和测试人员测试软件在同一环境内 则他们的工作会互相影响 因此 需要将待测软件系统单独部署在一个独立于开发环境的测试环境中 了解软件系统结构 B S 浏览器 服务器 概念 使用浏览器访问
  • mysql 数据备份与存储引擎

    数据备份 mysql home bin下提供了mysqldump exe mysqldump sh 的可执行文件 用于备份数据库 语法 无需进入MySQL命令行 在本机命令行即可 mysqldump h IP P port u账号 p da
  • 创建SSAS项目

    2 3 创建Analysis Services 设计好了结构良好的数据仓库 并且将需要分析的业务数据装载到了数据仓库中之后 就为满足商务决策的全方位需求打下了根基 以后的操作都是基于这些拥有数据的数据仓库进行的 但是 对数据的多维分析却并不
  • 中间件运维分析中的选型与实践

    在近期的 Kylin Data Summit 上 好买财富平台架构总监王晔倞在互联网专场上分享了好买财富在中间件运维分析平台的演进过程 好买财富为什么选择从广泛应用的 ELK 转向 Apache Kylin 呢 王晔倞 我们在监控上 通常会
  • 使用python做FamaMacBeth回归

    金融资产定价常常需要用到FamaMacBeth回归 我们用python写一个模板 可以直接将数据调成需要的格式 代入代码即可出结果 所要求的数据格式 可以从链接下载 https download csdn net download weix
  • 剑指 Offer 40. 最小的 k 个数

    系列文章目录 文章目录 系列文章目录 前言 一 剑指 Offer 40 最小的 k 个数 二 使用步骤 1 引入库 解法一 暴力破解法 冒泡排序 可惜超过时间限制 解法二 快速排序法 方法三 基于快速排序的数组划分 总结 前言 一 剑指 O
  • 前端埋点pv,uv以及实现思路

    埋点就是在应用或系统中通过特定的流程收集一些信息 用来跟踪项目或系统使用的状况 后续用来进一步优化产品或是提供运营的数据支撑 目前埋点实现方法可以分为三种类型 手动埋点 在需要统计数据的地方插入代码 需要入侵业务代码 优点是数据统计比较精准
  • 单片机毕设 基于单片机的人脸识别追踪

    文章目录 1 简介 2 项目简介 2 主要器件 3 硬件效果 4 软件设计 4 1 功能架构 4 2 软件程序流程图 5 部分实现代码 6 演示效果 6 最后 1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 基于单片机的人脸识
  • SQL Server的链接服务器创建全详细流程

    创建SQL Server链接服务器的详细流程如下 打开 SQL Server Management Studio SSMS 连接到你想要创建链接服务器的目标实例 在对象资源管理器中 展开 服务器对象 节点 右键点击 链接服务器 然后选择 新
  • 关联分析:Apriori算法

    本文代码及数据集来自 Python大数据分析与机器学习商业案例实战 步骤1 设定最小支持度和最小置信度 首先设定最小支持度为2 5 即40 最小置信度为4 5 即80 步骤2 根据最小支持度找出所有的频繁项集 这一步骤是关联分析中较为重要的
  • windows安装git和环境变量配置

    下载安装 1 从git官网下载一个git安装包 官网下载地址http www git scm com download 2 双击安装程序 进入欢迎界面点击 Next gt 3 阅读协议 点击 Next gt 4 选
  • modbus poll

    刚刚发布Modbus测试工具 Modbus Slave调试工具 不过已经是昨天了 今天开始发布Modbus测试工具 Modbus Master调试工具 做为Modbus主站 发送命令包 采集从站的数据 典型工具如 Modbus Poll M
  • 第十三章总结

    一 泛型 1 定义泛型类 泛型机制语法 类名
  • 用typedef来定义二维数组

    include
  • 线性表的基本操作,包括:创建、插入、删除、查找等基本操作

    标签 数据结构 线性表是数据结构中最直观 最简单的一类抽象数据类型 本次需要使用顺序表来实现线性表 并编写相应的测试程序对你所创建的顺序表及单链表进行测试 以下给出测试样例 输入数据格式 第一行只有一个整型数N 0
  • Linux详解

    一 Linux简介 Linux系统是一种自由和开放源代码的类Unix操作系统 只要遵循GNU通用公共许可证 任何人和机构都可以自由地使用Linux的所有底层源代码 也可以自由的修改和再发布 Linux这个词本身只表示Linux内核 但实际上
  • 1-Openwrt ipv6之-odhcp6c客户端

    wan口的拨号有好几种方式 SLAAC stateless DHCPv6 stateful DHCPv6 DHCPv6 PD 这些请求方式在odhcpv6里面都可以配置 1 odhcp6c客户端启动过程 开启openwrt config配置