嵌入式linux 搭建L2TP+IPSEC客户端

2023-11-20

搭建L2TP+IPSEC客户端需要对应的源码 xl2tpd-1.3.10和openswan,还需要一些依赖的库,gmp,libpcap。

一、安装openswan

安装依赖库gmp-6.1.2

1、下载:https://gmplib.org/#DOWNLOAD

2、配置

./configure --host=arm-hisiv100nptl-linux --with-pcap=linux --prefix=/work/my/code/vpn/L2TP/gmp/install CC=arm-hisiv100nptl-linux-gcc

3、编译

make

4、安装

make install

5、下载 openswan

https://download.openswan.org/openswan/old/openswan-2.6/

5、修改makefile.inc

把依赖文件gmp.h 拷贝到目录/openswan-2.6.50/include,libgmp.a 拷贝到 openswan-2.6.50/lib。

修改 Makefile.inc 

#LIBGMP?=-lgmp
LIBGMP =-L /openswan-2.6.50/lib -lgmp 

6、编译

make CC=arm-hisiv100nptl-linux-gcc programs 

7、可能存在的错误

lex.yy.c
/work/my/code/vpn/L2TP/openswan-2.6.50/lib/libipsecconf/parser.l: In function 'parser_y_include':
/work/my/code/vpn/L2TP/openswan-2.6.50/lib/libipsecconf/parser.l:200: error: 'GLOB_BRACE' undeclared (first use in this function)
/work/my/code/vpn/L2TP/openswan-2.6.50/lib/libipsecconf/parser.l:200: error: (Each undeclared identifier is reported only once
/work/my/code/vpn/L2TP/openswan-2.6.50/lib/libipsecconf/parser.l:200: error: for each function it appears in.)
/work/my/code/vpn/L2TP/openswan-2.6.50/lib/libipsecconf/parser.l:207: error: 'GLOB_NOMAGIC' undeclared (first use in this function)
/work/my/code/vpn/L2TP/openswan-2.6.50/lib/libipsecconf/../Makefile.library:107: recipe for target 'lex.yy.o' failed

解决:找到交叉编译目录中的glob.h文件,我的路径如下

/opt/hisi-linux-nptl/arm-hisiv100-linux/target/usr/include/glob.h
#if ( !defined __USE_POSIX2 || defined __USE_BSD || defined __USE_GNU ) //&& defined __UCLIBC_HAS_GNU_GLOB__
# define GLOB_MAGCHAR	 (1 << 8)/* Set in gl_flags if any metachars seen.  */
#if 1 /* uClibc gnu glob does not support these */
# define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions.  */
# define GLOB_BRACE	 (1 << 10)/* Expand "{a,b}" to "a" "b".  */
# define GLOB_NOMAGIC	 (1 << 11)/* If no magic chars, retu rn the pattern.  */
# define GLOB_TILDE	 (1 << 12)/* Expand ~user and ~ to home directories. */
# define GLOB_ONLYDIR	 (1 << 13)/* Match only directories.  */
# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error
				      if the user name is not available.  */
# define __GLOB_FLAGS	(GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
			 GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \
			 GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE|     \
			 GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK)
#else
# define __GLOB_FLAGS	(GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
			 GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \
			 GLOB_PERIOD)
#endif
#else
# define __GLOB_FLAGS	(GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
			 GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \
	

注释掉://&& defined __UCLIBC_HAS_GNU_GLOB__


8、安装

修改Makefile.inc

#INC_USRLOCAL=/usr/local
INC_USRLOCAL=/work/my/code/vpn/L2TP/openswan_client/install

这里修改成自己安装的目录。

make install
9、拷贝文件

a、拷贝虚拟机中的脚本/etc/init.d/ipsec到设备目录/etc/init.d/中,做如下修改。

IPSEC_EXECDIR="${IPSEC_EXECDIR-/usr/local/libexec/ipsec}"
IPSEC_LIBDIR="${IPSEC_LIBDIR-/usr/local/lib/ipsec}"
IPSEC_SBINDIR="${IPSEC_SBINDIR-/usr/local/sbin}"
IPSEC_CONFS="${IPSEC_CONFS-/etc}"

修改为:

IPSEC_EXECDIR="${IPSEC_EXECDIR-/usr/libexec/ipsec}"
IPSEC_LIBDIR="${IPSEC_LIBDIR-/usr/lib/ipsec}"
IPSEC_SBINDIR="${IPSEC_SBINDIR-/usr/sbin}"
IPSEC_CONFS="${IPSEC_CONFS-/etc}"

b、拷贝安装生成的几个目录到设备上,如lib 、libexec、sbin/ipsec

root@ubuntu16:/work/my/code/vpn/L2TP/openswan_client/install# ls
lib  libexec  man  sbin  share

根据启动脚本/etc/init.d/ipsec,我们做如下具体的拷贝

目录lib、libexec拷贝到设备/usr目录中

脚本sbin/ipsec拷贝到设备/usr/sbin/中,拷贝完也要做如下修改

IPSEC_EXECDIR="${IPSEC_EXECDIR-/usr/libexec/ipsec}"
IPSEC_LIBDIR="${IPSEC_LIBDIR-/usr/lib/ipsec}"
IPSEC_SBINDIR="${IPSEC_SBINDIR-/usr/sbin}"
IPSEC_CONFS="${IPSEC_CONFS-/etc}"

10、添加配置文件

a、/etc/ipsec.conf

内容如下:

config setup
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
    oe=off
    protostack=netkey

conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
    ikelifetime=8h
    keylife=1h
    type=transport
    left=192.168.9.166
    leftprotoport=17/1701
    right=192.168.9.161
    rightprotoport=17/1701

type 有三种模式 transport、 tunnel、beet,这里选择是transport。left是本地地址,leftprotoport是端口号使用1701端口。right是要连接服务器对应的地址,rightProtoport对应的端口号。

b、/etc/ipsec.secrets

添加内容如下:

192.168.9.166 192.168.9.161: PSK "l2tp_123456789"

192.168.9.166是本地地址,也可以用%any代替,192.168.9.161是对应服务器的地址,PSK是预共享秘钥。这个要跟服务器设置要相同。

二、安装xl2tpd

安装依赖库libpcap-1.8.1

1、下载:http://www.linuxfromscratch.org/blfs/view/svn/basicnet/libpcap.html

2、配置

./configure --host=arm-hisiv100nptl-linux --with-pcap=linux --prefix=/work/my/code/vpn/L2TP/libpcap/install CC=arm-hisiv100nptl-linux-gcc 

3、编译

make

4、安装

make install

5、下载xl2tpd-1.3.10

https://www.xelerance.com/archives/147

6、修改Makefile

a、添加变量

LIBSRC ?= 

b、添加变量$(LIBSRC)

$(CC) $(LDFLAGS) -o pfc -L $(LIBSRC) pfc.o -lpcap $(LDLIBS)

7、编译

make CC=arm-hisiv100nptl-linux-gcc KERNELSRC=/work/my/code/vpn/L2TP/libpcap/install LIBSRC=/work/my/code/vpn/L2TP/libpcap/install/lib
这个不需要安装,我们只需要执行文件xl2tpd,把它拷贝到设备目录/usr/sbin/

8、配置文件

a、添加/etc/xl2tpd/xl2tpd.conf,内容如下

[global]
listen-addr = 192.168.9.166

auth file=/etc/ppp/chap-secrets

[lac l2tp]
lns = 192.168.9.161
redial = yes
redial timeout = 15
require chap = yes
refuse pap = yes
require authentication = yes
name = 2018
ppp debug = yes
pppoptfile = /etc/ppp/peers/options.l2tpd.client
length bit = yes

lns 是服务器的地址,name是登录名

b、添加/etc/ppp/chap-secrets,内容如下。

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
2018    *       123     *

2018客户端登录名,123登录密码,其他的用*替代。

c、添加/etc/ppp/peers/options.l2tpd.client,内容如下

asyncmap 0
noauth
crtscts
lock
hide-password
modem
netmask 255.255.255.0
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
ipcp-accept-local
ipcp-accept-remote

三、ppp

PPP是一个拨号软件,用来提供用户登录的用户名和密码验证用的。PPTP搭建的VPN也会用到PPP。所以,实际上,PPTP和L2TP是可以共存在一台服务器上的,而且它们还可以共享用户登录账号信息,因为它们都用PPP作为用户登录连接。

所以没有安装可以参考前面pptp客户端配置的文章

https://blog.csdn.net/u011425939/article/details/80498534

四、内核配置

一般情况内核没有默认把ipsec的模式编译进内核的,所以需要把内核中的的对应ipsec选项打开,不然会出现如下问题。

# ipsec auto --up L2TP-PSK-noNAT
002 "L2TP-PSK-noNAT" #1: initiating Main Mode
105 "L2TP-PSK-noNAT" #1: STATE_MAIN_I1: initiate
003 "L2TP-PSK-noNAT" #1: received Vendor ID payload [Openswan (this version) 2.6.50 ]
003 "L2TP-PSK-noNAT" #1: received Vendor ID payload [Dead Peer Detection]
003 "L2TP-PSK-noNAT" #1: received Vendor ID payload [RFC 3947] method set to=115 
002 "L2TP-PSK-noNAT" #1: enabling possible NAT-traversal with method RFC 3947 (NAT-Traversal)
002 "L2TP-PSK-noNAT" #1: transition from state STATE_MAIN_I1 to state STATE_MAIN_I2
107 "L2TP-PSK-noNAT" #1: STATE_MAIN_I2: sent MI2, expecting MR2
003 "L2TP-PSK-noNAT" #1: NAT-Traversal: Result using draft-ietf-ipsec-nat-t-ike (MacOS X): no NAT detected
002 "L2TP-PSK-noNAT" #1: transition from state STATE_MAIN_I2 to state STATE_MAIN_I3
109 "L2TP-PSK-noNAT" #1: STATE_MAIN_I3: sent MI3, expecting MR3
003 "L2TP-PSK-noNAT" #1: received Vendor ID payload [CAN-IKEv2]
002 "L2TP-PSK-noNAT" #1: Main mode peer ID is ID_IPV4_ADDR: '192.168.9.161'
002 "L2TP-PSK-noNAT" #1: transition from state STATE_MAIN_I3 to state STATE_MAIN_I4
004 "L2TP-PSK-noNAT" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_PRESHARED_KEY oursig= theirsig= cipher=aes_128 prf=oakley_sha group=modp2048}
002 "L2TP-PSK-noNAT" #2: initiating Quick Mode PSK+ENCRYPT+DONTREKEY+UP+IKEv2ALLOW+SAREFTRACK {using isakmp#1 msgid:82227a67 proposal=defaults pfsgroup=no-pfs}
118 "L2TP-PSK-noNAT" #2: STATE_QUICK_I1: initiate
003 "L2TP-PSK-noNAT" #2: ERROR: netlink response for Add SA esp.a37edb84@192.168.9.161 included errno 93: Protocol not supported
003 "L2TP-PSK-noNAT" #2: state #2: failed to setup outgoing SA
032 "L2TP-PSK-noNAT" #2: STATE_QUICK_I1: internal error

这里有个错误93, 说没有SA 和ESP 协议支持,所以需要把它在内核中打开。步骤如下。

a、Networking support


b、 Networking options 


c、找到这个两个选项。


这里选择的是transport 模式 ESP 转换,因为我们在配置文件/etc/ipsec.conf中type就是transport,这个也可以把ipsec的选项都选择。然后去尝试每种模式。但这里只需这个两个选项就可以 了。

d、编译

make

e、下载内核

这里也可以不用下载内核,直接把那两个选项编译成模块的方式,然后用insmod命令方式加载到内核中。

五、连接服务器

这个服务器我使用的是前面文章在Ubuntu中搭建的l2tp+ipsec服务器,所以有很多配置都是跟从这个服务器来配置的。链接

https://blog.csdn.net/u011425939/article/details/80525380

a、首先启动ipsec

ipsec setup start

还有其他的命令使用help查看

# ipsec setup --help 
Usage: ipsec setup {start|stop|restart|reload|force-reload|condrestart|try-restart|status|version}
# ipsec setup restart 
ipsec_setup: Stopping Openswan IPsec...
ipsec_setup: Removing orphaned /var/run/pluto/pluto.pid:
ipsec_setup: Starting Openswan IPsec U2.6.50/K3.0.8...
ipsec_setup: ipsec_setup: WARNING: cannot flush state/policy database -- `%defaultroute'. Install a newer version of iproute/iproute2 or install the ipsec-tools package to obtain the setkey command.

b、启动xl2tpd

xl2tpd -D

以调试的方式启动

# xl2tpd -D
xl2tpd[27109]: setsockopt recvref[30]: Protocol not available
xl2tpd[27109]: L2TP kernel support not detected (try modprobing l2tp_ppp and pppol2tp)
xl2tpd[27109]: xl2tpd version xl2tpd-1.3.10 started on (none) PID:27109
xl2tpd[27109]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
xl2tpd[27109]: Forked by Scott Balmos and David Stipp, (C) 2001
xl2tpd[27109]: Inherited by Jeff McAdams, (C) 2002
xl2tpd[27109]: Forked again by Xelerance (www.xelerance.com) (C) 2006-2016
xl2tpd[27109]: Listening on IP address 192.168.9.166, port 1701
c、ipsec auto --up L2TP-PSK-noNAT
# ipsec auto --up L2TP-PSK-noNAT
002 "L2TP-PSK-noNAT" #1: initiating Main Mode
105 "L2TP-PSK-noNAT" #1: STATE_MAIN_I1: initiate
003 "L2TP-PSK-noNAT" #1: received Vendor ID payload [Openswan (this version) 2.6.50 ]
003 "L2TP-PSK-noNAT" #1: received Vendor ID payload [Dead Peer Detection]
003 "L2TP-PSK-noNAT" #1: received Vendor ID payload [RFC 3947] method set to=115 
002 "L2TP-PSK-noNAT" #1: enabling possible NAT-traversal with method RFC 3947 (NAT-Traversal)
002 "L2TP-PSK-noNAT" #1: transition from state STATE_MAIN_I1 to state STATE_MAIN_I2
107 "L2TP-PSK-noNAT" #1: STATE_MAIN_I2: sent MI2, expecting MR2
003 "L2TP-PSK-noNAT" #1: NAT-Traversal: Result using draft-ietf-ipsec-nat-t-ike (MacOS X): no NAT detected
002 "L2TP-PSK-noNAT" #1: transition from state STATE_MAIN_I2 to state STATE_MAIN_I3
109 "L2TP-PSK-noNAT" #1: STATE_MAIN_I3: sent MI3, expecting MR3
003 "L2TP-PSK-noNAT" #1: received Vendor ID payload [CAN-IKEv2]
002 "L2TP-PSK-noNAT" #1: Main mode peer ID is ID_IPV4_ADDR: '192.168.9.161'
002 "L2TP-PSK-noNAT" #1: transition from state STATE_MAIN_I3 to state STATE_MAIN_I4
004 "L2TP-PSK-noNAT" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_PRESHARED_KEY oursig= theirsig= cipher=aes_128 prf=oakley_sha group=modp2048}
002 "L2TP-PSK-noNAT" #2: initiating Quick Mode PSK+ENCRYPT+DONTREKEY+UP+IKEv2ALLOW+SAREFTRACK {using isakmp#1 msgid:210b70d9 proposal=defaults pfsgroup=no-pfs}
118 "L2TP-PSK-noNAT" #2: STATE_QUICK_I1: initiate
002 "L2TP-PSK-noNAT" #2: transition from state STATE_QUICK_I1 to state STATE_QUICK_I2
004 "L2TP-PSK-noNAT" #2: STATE_QUICK_I2: sent QI2, IPsec SA established transport mode {ESP=>0xaa65c77e <0xd326843a xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=none DPD=none}

d、echo 'c l2tp' > /var/run/xl2tpd/l2tp-control

这个l2tp 是/etc/xl2tpd/xl2tpd.conf 中的[lac l2tp]

e、如果连接成功会出现一个虚拟的pppx网卡,如下

# ifconfig
eth0      Link encap:Ethernet  HWaddr C2:4F:B4:B3:97:D7  
          inet addr:192.168.9.166  Bcast:192.168.9.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8371743 errors:0 dropped:3307 overruns:0 frame:0
          TX packets:4276852 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2476538003 (2.3 GiB)  TX bytes:248606867 (237.0 MiB)
          Interrupt:119 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4800 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4800 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:10056240 (9.5 MiB)  TX bytes:10056240 (9.5 MiB)

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:192.168.223.100  P-t-P:192.168.223.10  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1410  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:42 (42.0 B)  TX bytes:69 (69.0 B)
到此客户端搭建完成。

参考文章:http://blog.sina.com.cn/s/blog_9704e09601013quu.html




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

嵌入式linux 搭建L2TP+IPSEC客户端 的相关文章

  • 单个IMU实现精确的轨迹重构

    惯性传感器 IMU 被广泛用于导航 运动状态研究 人体运动和步态分析等领域 然而 由于IMU的固有误差和测量误差 尤其是漂移误差 很少有人尝试基于IMU实现精确的轨迹重建 尤其是使用单个IMU 尽管如此 与视觉 红外线和超声波定位技术相比
  • C#——反射和特性

    元数据 程序是用来处理数据的 文本和特性都是数据 而我们程序本身这些也是数据 有关程序及其类型的数据被称为元数据 他们保存在程序的程序集中 反射 程序在运行时 可以查看其它程序集或其本身的元数据 一个运行的程序查看本身的元数据或者其他程序集
  • Java中基本类型自动转换与强制转换

    类型转换 Java 语言是一种强类型的语言 强类型的语言有以下几个要求 变量或常量必须有类型 要求声明变量或常量时必须声明类型 而且只能在声明以后才能使用 赋值时类型必须一致 值的类型必须和变量或常量的类型完全一致 运算时类型必须一致 参与
  • Python学习(3):批量修改文件名(以excel文件为例)

    coding utf 8 import os dir input 请输入文件路径 for root dirs files in os walk dir for i in range len files filename files i ne
  • python django 学习第3天 文件长传

    在根目录下新建media目录 在settings py 加入代码 为上传文件操作做准备 MEDIA ROOT os path join BASE DIR media MEDIA URL media 做一个新闻调查页面 在views 中加入
  • bash 括号(小括号,双小括号,中括号,双中括号,大括号)

    小括号 和大括号 主要包括一下几种 var cmd 和 exp var string var string var string var string var pattern var pattern var pattern var patt
  • 计算机网络运输层运输层协议概述

    运输层协议概述 进程之间的通信 下图说明运输层的作用 可以看出网络层为主机之间提供逻辑通信 而运输层为应用进程之间提供端到端的逻辑通信 根据应用程序的不同需求 运输层有两种不同的运输协议 1 面向连接的TCP 2 无连接的UDP 运输层的两
  • Vue-cli3更改项目logo图标

    1 图标切成对应大小 2 图标名称后缀与vue原有图标logo名称 后缀一致 favicon ico 并替换 3 vue项目根目录下 新建 vue config js 添加下列代码 module exports pwa iconPaths
  • 网络爬虫 - 1 网络爬虫基本概念和相关工具

    网络爬虫基本概念和相关工具 1 基本概念 1 什么是网络爬虫 web crawler 以前经常称之为网络蜘蛛 spider 是按照一定的规则自动浏览万维网并获取信息的机器人程序 或脚本 曾经被广泛的应用于互联网搜索引擎 使用过互联网和浏览器
  • Linux环境下的VScode使用教程

    前言 1 对于学习本文需要先有自行安装好VMware 对VMware有简单的了解 2 对于绝大多数使用Linux的人而言 经常在Windows环境下使用source insight进行编译程序 然后利用FileZilla将Windows的文
  • Vue出现弹出层时,禁止底部页面跟随滑动

    背景 最近在写一个vue项目 当出现弹出层时 发现底部页面跟随滚动 但是产品不想要这种效果 于是找各种资料 发现很多说法 但是试了试 发现有的根本就不行 比如说有人提出用vue中提供的 touchmove prevent方法来解决 但是我试
  • 算法设计与分析——算法设计工具Standard Template Library即STL(C++模板库)概述

    算法设计工具 STL 前言 STL是一个功能强大的基于模板的容器库 通过直接使用这些现成的标准化组件可以大大提高算法设计的效率和可靠性 一 STL构成 Container 容器 Algorithm 算法 Iterator 迭代器 二 什么是
  • encoder decoder模型_Transformer 模型的 PyTorch 实现

    Google 2017年的论文 Attention is all you need 阐释了什么叫做大道至简 该论文提出了Transformer模型 完全基于Attention mechanism 抛弃了传统的RNN和CNN 我们根据论文的结
  • 【从零开始学c++】——类和对象(一)

    类和对象 面向过程和面向对象的初步认识 1 类的引入 1 1类的定义 1 2 类的两种定义方式 2 类的访问限定符及封装 2 1 访问限定符 2 2 class定义的类与struct定义的类的区别 2 3 封装 3 类的作用域 4 类的实例
  • 商业模式简单介绍

    商业模式 商业模式 1 B2C 企业对消费者 2 C2B 消费者 对企业 3 B2B 企业对企业 4 C2C 消费者 对消费者 5 o2o 线上线下 6 O2P营销模式 即Online To Place 是本地化的O2O营销模式 一 关联对
  • 1.编译时常量:const

    编译时常量只能在函数之外定义 就可以在编译期间初始了 不能定义在函数方法内 修饰符const不适用于 局部变量 const val PI 3 1415 定义编译时常量 TODO 10 Kotlin语言的编译时常量 编译时常量只能是常用的基本
  • SpringBoot项目多环境配置(亲测有效)

    SpringBoot项目多环境配置 SpringBoot项目在多环境配置上表现的非常优秀 只需要非常简单的操作就可以完成配置 一 认识配置文件 在创建项目后 会看到一个resources目录下有一个application propertie
  • React(6.5)路由系统

    路由系统 单页应用 SPA 的多页面切换 需要使用到路由功能 多个组件的路由和切换 使用路由 React中默认没有安装路由 需要手动安装 安装不指定版本默认是最新版本6 目前大多数项目可能还处于版本5 安装5版本npm install re
  • PCI 原理

    http baike baidu com link url sTevLlZN HI7Ls3 xbui2IvQBjNlTYst1MELXXmChISxZ55VMocg NdNwnCctbLa8RMIDWBw5PxY uvAxhUQ4E8vg8
  • 成功解决FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\DELL\\Anaconda3\\pkgs\\conda

    pycharm导入包总是报错如下 然后查了一下资料发现好像是源的问题 换个源试了一下好了 指令如下 pip install i https pypi tuna tsinghua edu cn simple trusted host pypi

随机推荐

  • Redis高级

    目录 redis介绍安装 介绍 安装 通用命令 五大数据类型 字符串 哈希 列表 集合 有序集合 高级用法 慢查询 pipline与事务 发布订阅 Bitmap HyperLogLog GEO地理位置信息 持久化 RDB方法 AOF方案 r
  • 地址映射与共享

    跟踪地址映射过程 1 通过命令 dbg asm启动调试器 在linux 0 11运行test c文件 使其进入死循环 我们的任务就是找到i的地址并将其修改为0使test c程序退出循环 2 在命令行输入crit c使Boch暂停 一般会显示
  • Selenium Python 自动化搭建及简单用例编写

    1 首先确定自己的浏览器的当前版本号 2 下载对应版本驱动 http chromedriver storage googleapis com index html 下载完成后直接复制到py的目录下 3 调用 简单三行代码就可以简单实现我们的
  • LeetCode 98. 验证二叉搜索树(C++)

    1 题目如下 给你一个二叉树的根节点 root 判断其是否是一个有效的二叉搜索树 有效 二叉搜索树定义如下 节点的左子树只包含 小于 当前节点的数 节点的右子树只包含 大于 当前节点的数 所有左子树和右子树自身必须也是二叉搜索树 示例 1
  • uni-app项目中使用scss语法

    最近正在学习uni app开发 我先把文档浅略翻了遍 发现组件和接口几乎都是按照微信小程序走 但是视图层上的语法又是按照vue的语法走的 所以开发过程一定要注意这点 然后我想在uni app项目中使用scss语法 但是具体怎么安装呢 历经曲
  • 优秀的内存规划方法——环形缓冲区(ring buffer)

    目录 什么是环形缓冲区 使用环形buffer的好处 环形buffer的使用场景 进程间通信 网络IO 区分缓冲区是满或者是空 计数 保持一个存储单元为空 镜像指示位 buffer满了之后的操作 实时流 存储流 什么是环形缓冲区 线性缓冲区
  • 数据库初级入门sqlite3版本

    0 数据库大纲 数据库是什么 如何在在命令行使用SQL语句操作数据库 如何在C C 程序中操作数据库 1 数据库和数据库管理系统及数据库系统 数据库是一个存储数据 电子化表格 的仓库 数据库 简单来说可以看做是一个电子化的文件柜 gt 存储
  • vue element select下拉框树形多选

    components 文件下新建 SelectTree文件 index vue SelectTree index vue
  • 中关村十大AI研究院

    雷刚 发自 凹非寺 量子位 报道 公众号 QbitAI 不知你是否有同样的困惑 最近 秋季校招正在接近尾声 但意外不少非应届同学也关注起未来实习的话题 对于有志于投身AI研发的同学 有没有一些既能发论文 又贴进产业前沿 还比较近的实习机构
  • Unity3D的四种坐标系

    1 World Space 世界坐标 我们在场景中添加物体 如 Cube 他们都是以世界坐标显示在场景中的 transform position可以获得该位置坐标 2 Screen Space 屏幕坐标 以像素来定义的 以屏幕的左下角为 0
  • Wireshark抓包及DNS报文分析

    Wireshark抓包及DNS报文分析 来来来 点我进行5分钟视频学习 冲冲冲 一 抓包整体描述 第一行 帧Frame 2 指的是要发送的数据块 其中 所抓帧的序号为2 捕获字节数等于传送字节数 696字节 第二行 以太网 有线局域网技术
  • java正则表达式的语法详解及常用方法

    一 实例 今天在实现一个功能时遇到了这样一个问题 及接口传过来一个字符串 我需要判断它是一个区间还是一段文字并对其做分别处理 这里面的问题就在于我怎么去判断区间 按照数学规律区间可分为以下几种情况 M M N N N M N M N N N
  • 计算机网络重点知识(期末考研复习)

    点个关注 更多精彩持续更新为考研和期末助力 一起加油 计算机网络 第一章 思维导图 概述 计算机网络的主要性能指标 计算机网络的体系结构 OSI RM模型 TCP IP 两种模型对比 第二章 思维导图 数据通信主要指标与信道极限容量 多路通
  • java8新特性学习笔记

    使用lambda表达式排序 Collections sort temp String a String b gt return b compareTo a Collections sort temp String a String b gt
  • Camera2拍照时部分机型非常暗

    一 问题描述 1 部分手机在弱光环境下不管什么分辨率 预览和拍出来的照片都非常的暗 2 部分手机在弱光环境下 预览分辨率1920x1080 输出图片分辨率1920x1080时 预览和拍出来的照片亮度比较亮 但是在预览分辨率1920x1080
  • 重现U盘文件

    U盘中毒了 查毒后发现U盘空间还在 但是就是无法查看里面的文件 在 工具 gt 文件夹选项 中设置成 显示系统文件夹中的内容 去掉 隐藏受保护的操作系统文件 推荐 以及设置成 显示所有文件和文件夹 也不能正常显示 最近遇到很多优盘中的文件夹
  • 图像特征提取技术

    目 录 前 言 基于颜色的特征提取 1 颜色空间 2 直方图以及特征提取 基于纹理的特征提取 1 灰度共生矩阵 2 tamura纹理 基于深度神经网络的图像处理 前 言 图像特征提取属于图像分析的范畴 是数字图像处理的高级阶段 本文将从理论
  • SeleniumLibrary4.5.0 关键字详解(三)

    SeleniumLibrary4 5 0 关键字详解 三 库版本 4 5 0 库范围 全局 命名参数 受支持 简介 SeleniumLibrary是Robot Framework的Web测试库 本文档说明了如何使用SeleniumLibra
  • 获取对象Object的长度

    获取对象的长度 obj id 1 id2 1 id3 1 id4 1 id5 1 id6 1 id7 1 id8 1 id9 1 id10 1 let i Object keys this obj length console log i
  • 嵌入式linux 搭建L2TP+IPSEC客户端

    搭建L2TP IPSEC客户端需要对应的源码 xl2tpd 1 3 10和openswan 还需要一些依赖的库 gmp libpcap 一 安装openswan 安装依赖库gmp 6 1 2 1 下载 https gmplib org DO