月度归档: 2024 年 9 月

  • 正则表达式 – 修饰符

    正则表达式中常用的模式修正符有i、g、m、s、U、x、a、D、e 等。它们之间可以组合搭配使用。

    修饰符 含义 描述
    i ignore – 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
    g global – 全局匹配 查找所有的匹配项。
    m more – 多行匹配 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
    s 特殊字符圆点 . 中包含换行符 \n 默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

    i 不区分(ignore)大小写

    例如: /abc/i 可以匹配 abc、aBC、Abc

    g 全局(global)匹配

    如果不带g,正则过程中字符串从左到右匹配,找到第一个符合条件的即匹配成功,返回

    如果带g,则字符串从左到右,找到每个符合条件的都记录下来,知道字符串结尾位置

    例如:

    var str = ‘aaaaaaaa’

    var reg1 = /a/; str.match(reg1) // 结果为:[“a”, index: 0, input: “aaaaaaaa”]

    var reg2 = /a/g; str.match(reg2) // 结果为:[“a”, “a”, “a”, “a”, “a”, “a”, “a”, “a”]

    m 多(more)行匹配

    若存在换行\n并且有开始^或结束$符的情况下,和g一起使用实现全局匹配,

    因为存在换行时默认会把换行符作为一个字符任务匹配字符串是个单行,

    g只匹配第一行,添加m之后实现多行,每个换行符之后就是开始

    var str = “abcggab\nabcoab”;

    var preg1 = /^abc/gm; str.match(preg1) // 结果为:[“abc”, “abc”]

    var preg2 = /ab$/gm; str.match(preg2) // 结果为:[“ab”, “ab”]

    s 特殊字符圆点 . 中包含换行符

    默认的圆点 . 是 匹配除换行符 \n 之外的任何单字符,加上s之后, . 中包含换行符

    $str = “abggab\nacbs”;

    $preg = “/b./s”;

    preg_match_all($preg, $str,$matchs);

    print_r($matchs);//Array ( [0] => Array ( [0] => bg [1] => b [2] => bs ) )

    U 只匹配最近的一个字符串;不重复匹配;

    $mode=”/a(.*?)c/”;

    $preg=”/a.*c/U”;//这两个正则返回相同的值

    $str=”abcabbbcabbbbbc” ;

    preg_match($mode,$str,$content); echo $content[0];//abc

    preg_match($preg,$str,$content); echo $content[0];//abc

    修正符:x 将模式中的空白忽略; 修正符:A 强制从目标字符串开头匹配; 修正符:D 如果使用$限制结尾字符,则不允许结尾有换行; 修正符:e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;

  • 正则表达式-元字符

    正则表达式-元字符

    字符 描述
    \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。
    ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
    $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
    * 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。
    + 匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
    ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。
    {n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
    {n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
    {n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
    ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
    . 匹配除“\ n”之外的任何单个字符。要匹配包括“\ n”在内的任何字符,请使用像“(.|\n)”的模式。
    (pattern) 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(”或“\)”。
    (?:pattern) 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
    (?=pattern) 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
    (?!pattern) 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
    (?<=pattern) 反向肯定预查,与正向肯定预查类拟,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
    (?<!pattern) 反向否定预查,与正向否定预查类拟,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。
    x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。
    [xyz] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
    [^xyz] 负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”。
    [a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
    [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。
    \b 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
    \B 匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
    \cx 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。
    \d 匹配一个数字字符。等价于[0-9]。
    \D 匹配一个非数字字符。等价于[^0-9]。
    \f 匹配一个换页符。等价于\x0c和\cL。
    \n 匹配一个换行符。等价于\x0a和\cJ。
    \r 匹配一个回车符。等价于\x0d和\cM。
    \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
    \S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
    \t 匹配一个制表符。等价于\x09和\cI。
    \v 匹配一个垂直制表符。等价于\x0b和\cK。
    \w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
    \W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
    \xn 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。.
    \num 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
    \n 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。
    \nm 标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。
    \nml 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
    \un 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。
  • 正则表达式 – 语法

    正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。

    1.正则表达式基本语法

    两个特殊的符号’^’和’$’。他们的作用是分别指出一个字符串的开始和结束。例子如下:

    "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了; "notice":表示任何包含"notice"的字符串。

    象最后那个例子,如果你不使用两个特殊字符,你就在表示要查找的串在被查找串的任意部分——你并 不把它定位在某一个顶端。

    其它还有’*’,’+’和’?’这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或 更多”,“一次或更多”还有“没有或一次”。下面是几个例子:

    "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……); "ab+":表示一个字符串有一个a后面跟着至少一个b或者更多; "ab?":表示一个字符串有一个a后面跟着零个或者一个b; "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。

    你也可以使用范围,用大括号括起,用以表示重复次数的范围。

    "ab{2}":表示一个字符串有一个a跟着2个b("abb"); "ab{2,}":表示一个字符串有一个a跟着至少2个b; "ab{3,5}":表示一个字符串有一个a跟着3到5个b。

    请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。还有,你可能注意到了,’*’,’+’和 ‘?’相当于"{0,}","{1,}"和"{0,1}"。 还有一个’¦’,表示“或”操作:

    "hi¦hello":表示一个字符串里有"hi"或者"hello"; "(b¦cd)ef":表示"bef"或"cdef"; "(a¦b)*c":表示一串"a""b"混合的字符串后面跟一个"c";

    ‘.’可以替代任何字符:

    "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字; "^.{3}$":表示有任意三个字符的字符串(长度为3个字符);

    方括号表示某些字符允许在一个字符串中的某一特定位置出现:

    "[ab]":表示一个字符串有一个"a"或"b"(相当于"a¦b"); "[a-d]":表示一个字符串包含小写的’a’到’d’中的一个(相当于"a¦b¦c¦d"或者"[abcd]"); "^[a-zA-Z]":表示一个以字母开头的字符串; "[0-9]%":表示一个百分号前有一位的数字; ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。

    你也可以在方括号里用’^’表示不希望出现的字符,’^’应在方括号里的第一位。(如:"%[^a-zA-Z]%"表 示两个百分号中不应该出现字母)。

    为了逐字表达,你必须在"^.$()¦*+?{\"这些字符前加上转移字符’\’。

    请注意在方括号中,不需要转义字符。

    2.正则表达式验证控制文本框的输入字符类型

    1.只能输入数字和英文的:

    <input onkeyup="value=value.replace(/[\W]/g,”) " onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))" ID="Text1" NAME="Text1">

    2.只能输入数字的:

    <input onkeyup="value=value.replace(/[^\d]/g,”) " onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))" ID="Text2" NAME="Text2">

    3.只能输入全角的:

    <input onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,”)" onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\uFF00-\uFFFF]/g,”))" ID="Text3" NAME="Text3">

    4.只能输入汉字的:

    <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,”)" onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\u4E00-\u9FA5]/g,”))" ID="Text4" NAME="Text4">

    3.正则表达式的应用实例通俗说明


    //校验是否全由数字组成

    /^[0-9]{1,20}$/

    ^ 表示打头的字符要匹配紧跟^后面的规则

    $ 表示打头的字符要匹配紧靠$前面的规则

    [ ] 中的内容是可选字符集

    [0-9] 表示要求字符范围在0-9之间

    {1,20}表示数字字符串长度合法为1到20,即为[0-9]中的字符出现次数的范围是1到20次。 /^ 和 $/成对使用应该是表示要求整个字符串完全匹配定义的规则,而不是只匹配字符串中的一个子串。


    //校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串

    /^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/

    ^[a-zA-Z]{1} 表示第一个字符要求是字母。

    ([a-zA-Z0-9]|[.]){4,19} 表示从第二位开始(因为它紧跟在上个表达式后面)的一个长度为4到9位的字符串,它要求是由大小写字母、数字或者特殊字符集[.]组成。


    //校验用户姓名:只能输入1-30个以字母开头的字串

    /^[a-zA-Z]{1,30}$/


    //校验密码:只能输入6-20个字母、数字、下划线

    /^(\w){6,20}$/

    \w:用于匹配字母,数字或下划线字符


    //校验普通电话、传真号码:可以“+”或数字开头,可含有“-” 和 “ ”

    /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/

    \d:用于匹配从0到9的数字;

    “?”元字符规定其前导对象必须在目标对象中连续出现零次或一次

    可以匹配的字符串如:+123 -999 999 ; +123-999 999 ;123 999 999 ;+123 999999等


    //校验URL

    /^http[s]{0,1}:\/\/.+$/ 或 /^http[s]{0,1}:\/\/.{1,n}$/ (表示url串的长度为length(“https://”) + n )

    \ / :表示字符“/”。

    . 表示所有字符的集

    • 等同于{1,},就是1到正无穷吧。
  • 如何在Windows 10上用cmd批量重命名多个文件

    如何使用命令提示符重命名多个文件

    也可以使用 ren(或rename)命令来批量更改单个文件的名称以及多个文件和扩展名。

    使用以下步骤在所需的文件夹位置打开命令提示符,并使用要重命名的文件:

    1. 打开文件浏览器
    2. 浏览到包含要重命名的所有文件的文件夹。
    3. 在地址栏中,键入cmd并按Enter键
    1. 快速提示:您可以按照以下步骤将“在此处打开命令窗口”选项返回到Windows 10的上下文菜单。

    在文件夹位置,您可以使用 renrename命令以多种方式批量重命名文件:

    1. ren “old-filename.txt” “new-filename.txt”

    重命名单个文件

    要仅重命名一个文件,请使用以下命令语法并按 Enter键:命令语法示例:

    ren "215155.docx"
    "nutou66.com"

    值得注意的是,您可以在没有引号的情况下运行命令,但如果您尝试更改包含一个或多个空格的文件的名称,则需要它们。

    重命名多个文件

    要重命名多个文件,请使用此命令语法并按 Enter键

    ren .ext1 ???-new_filename_part.

    命令语法示例:

    ren .pptx ????-嘤嘤嘤.

    在命令语法示例中,星号(*)是一个通配符,它​​告诉 ren命令匹配.jpg扩展名的所有内容。问号(?)也是通配符,但它表示原始文件名的字符。因此,在语法中,我们使用三个问号,这意味着输出文件名将包含原始文件的前三个字符(作为唯一标识符以避免重复)以及您之后使用的任何名称问号。

    例如,如果您使用此命令语法重命名 弹头分享 .PPTX木头分享-呵呵哒.PPTX,则输出将如下所示:弹头分享-嘤嘤嘤.pptx木头分享-嘤嘤嘤.pptx

    使文件名更短

    如果您有一长串使用长名称的文件,并且只是想让它们更短,您可以使用以下命令语法:

    ren . ?????.*

    在命令语法示例中,星号(*)匹配文件夹中的所有文件名和扩展名,问号(?)表示用于文件名的字符数。在这种情况下,如果文件名少于五个字符,则名称不会更改。(如果要使文件名更长,请添加额外的问号。)

    更改文件名的一部分

    要重命名类似文件的部分文件名,请使用以下命令语法结构并按 Enter键

    ren old_filename_part. new_filename_part.

    命令语法示例:

    >ren 木头分享. 嘻嘻嘻.

    更改文件扩展名

    如果您有许多具有特定文件扩展名的文件,并且您想将其更改为另一个兼容的扩展名,则可以使用以下命令:

    ren .ext1 .ext2

    命令语法示例:

    ren .txt .doc

  • Minio文件镜像同步配置

    背景

    项目中由于会使用到minio对象存储,在需要满足项目多点灾备的情况下,记录下使用mirror和replicate来实现minio同步和镜像的相关功能,作为后续配置参考。

    mirror和replicate的区别

    mc mirror 用于在两个minio server中的桶之间进行数据同步。mc mirror 命令类似于 Unix rsync 命令,会对源和目标地址进行比较,并只将新增或修改的内容从源复制到目标,可以实现将源目录快速同步到目标目录。

    mc replicate 用于配置 Minio 服务器上的桶(replication rules)用于在区域间自动复制对象。这通常用于地理冗余和跨区域数据复制。最大的优势是在源桶和目标桶之间实现自动、异步的对象复制。

    1
    mc replicate add <source-bucket> --priority <arg> --remote-bucket <arg> --storage-class <value> --tags <value> --prefix <string> --arn <string>

    replicate配置

    两者的主要区别在于mc replicate 适用于设置自动跨区域复制规则,而 mc mirror 则更适合于手动的、一次性的数据迁移或备份。

    配置别名(源节点和备节点)

    alias主要的作用是方便好记,方便后续配置。

    1
    2
    3
    mc alias set minio-server http://10.8.40.1:9000 minio password --api s3v4 
    mc alias set minio-backup http://10.8.40.2:9000 minio password --api s3v4 
    mc alias ls

     

    创建bucket(源节点)

    1
    2
    3
    4
    mc mb -p minio-server/ucap 
    mc mb -p minio-backup/ucap 
    mc version enable minio-server/ucap 
    mc version enable minio-backup/ucap

    配置双向同步的主主复制(源节点)

    1
    2
    3
    4
    5
    #主节点上配置 
    mc replicate add --remote-bucket http://minio:password@10.8.40.2:9000/ucap --replicate "delete,delete-marker,existing-objects" --sync minio-server/ucap --limit-upload 200Mi  
    
    #备份节点配置-如果是灾备,只有执行1条即可。 
    mc replicate add --remote-bucket http://minio:password@10.8.40.1:9000/ucap --replicate "delete,delete-marker,existing-objects" --sync minio-backup/ucap --limit-upload 200Mi

    测试效果

    用以下方法测试在多点写入,是否都可以访问。

    1
    2
    3
    4
    5
    6
    mc cp /etc/hosts minio-server/ucap 
    mc cp /etc/alias minio-backup/ucap 
    curl http://10.8.40.1:9000/ucap/hosts 
    curl http://10.8.40.2:9000/ucap/hosts 
    curl http://10.8.40.1:9000/ucap/alias 
    curl http://10.8.40.2:9000/ucap/alias

     

    replicate相关状态查看

    命令 描述
    mc replicate add 添加服务器端复制配置规则
    mc replicate edit 修改现有的服务器端复制配置规则
    mc replicate ls 列出服务器端复制配置规则
    mc replicate status 显示服务器端复制状态
    mc replicate resync 重新复制所有以前复制的对象
    mc replicate export 导出服务器端复制配置
    mc replicate import 以 JSON 格式导入服务器端复制配置
    mc replicate rm 删除服务器端复制配置规则

    mirror后续再补…..

    mirror后续再补…..

  • nps内网穿透代理服务器

    nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理p2p等,并带有功能强大的web管理端。

    背景

     

    web

    1. 做微信公众号开发、小程序开发等—-> 域名代理模式

    2. 想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,—-> tcp代理模式

    3. 在非内网环境下使用内网dns,或者需要通过udp访问内网机器等—-> udp代理模式

    4. 在外网使用HTTP代理访问内网站点—-> http代理模式

    5. 搭建一个内网穿透ss,在外网如同使用内网vpn一样访问内网资源或者设备—-> socks5代理模式

    特点

     
    • 协议支持全面,兼容几乎所有常用协议,例如tcp、udp、http(s)、socks5、p2p、http代理…
    • 全平台兼容(linux、windows、macos、群辉等),支持一键安装为系统服务
    • 控制全面,同时支持服务端和客户端控制
    • https集成,支持将后端代理和web服务转成https,同时支持多证书
    • 操作简单,只需简单的配置即可在web ui上完成其余操作
    • 展示信息全面,流量、系统信息、即时带宽、客户端版本等
    • 扩展功能强大,该有的都有了(缓存、压缩、加密、流量限制、带宽限制、端口复用等等)
    • 域名解析具备自定义header、404页面配置、host修改、站点保护、URL路由、泛解析等功能
    • 服务端支持多用户和用户注册功能

    没找到你想要的功能?不要紧,点击进入文档查找吧

    快速开始

     

    安装

     

    GETHUB: https://github.com/ehang-io/nps/releasesreleases:

    GETEE: https://gitee.com/houlijiang/common/tree/master/nps

    下载对应的系统版本即可,服务端和客户端是单独的

    服务端启动

     

    下载完服务器压缩包后,解压,然后进入解压后的文件夹

    • 执行安装命令

    对于linux|darwin sudo ./nps install

    对于windows,管理员身份运行cmd,进入安装目录 nps.exe install

    • 默认端口

    nps默认配置文件使用了80,443,8080,8024端口

    80与443端口为域名解析模式默认端口

    8080为web管理访问端口

    8024为网桥端口,用于客户端与服务器通信

    • 启动

    对于linux|darwin sudo nps start

    对于windows,管理员身份运行cmd,进入程序目录 nps.exe start

    安装后windows配置文件位于 C:\Program Files\nps,linux和darwin位于/etc/nps

    如果发现没有启动成功,可以查看日志(Windows日志文件位于当前运行目录下,linux和darwin位于/var/log/nps.log)

    • 访问服务端ip:web服务端口(默认为8080)
    • 使用用户名和密码登陆(默认admin/123,正式使用一定要更改)
    • 创建客户端

    客户端连接

     
    • 点击web管理中客户端前的+号,复制启动命令
    • 执行启动命令,linux直接执行即可,windows将./npc换成npc.exe用cmd执行

    如果需要注册到系统服务可查看注册到系统服务

    配置

     
    • 客户端连接后,在web中配置对应穿透服务即可
    • 更多高级用法见完整文档
  • NatTypeTester.exe 当前网络nat测试 1.98 MB

    NAT0: OpenInternet,没有经过NAT地址转换,公网IP NAT1: Full Cone NAT,动态家宽可以达到最优的状态,外网设备可以主动发信息给NAT1网络内的设备。 NAT2: Address-Restricted Cone NAT,只有内网设备(地址:任意端口)主动发过信息给外网设备,外网设备才能主动连接NAT2的该设备的地址(地址:任意端口) NAT3: Port-Restricted Cone NAT,只有内网设备(地址:指定端口)主动发过信息给外网设备,外网设备才能主动连接NAT3的该设备的地址(地址:指定端口),限制为通信过的端口 NAT4: Symmetric NAT,只能和NAT0设备通讯

    打开软件,点击左侧菜单栏RFC 3489

    上方菜单栏中可选择STUN服务器,大陆境内推荐使用QQ和MIWIFI

    点击TEST即可得到测试结果,如图FullCone即为NAT1,具体释义可参考上文

    公网IP,NAT0

    下载:https://gitee.com/houlijiang/common/raw/master/NatTypeTester.exe

  • NPS-比frp还简单易用的内网穿透及端口映射工具

    为什么要使用NPS

    1. 1. frp手动编写映射规则配置文件。nps在浏览器中可视化配置。
    2. 2. frp新增映射规则需要重启客户端。nps无需重启客户端,所有配置均在服务端进行配置立即生效。
    3. 3. frp需要手动设置开机自启。nps安装后自动注册到系统服务,随系统启动而启动。

    教程内容比较多,总体下来部署非常快,除去安装的过程需要命令操作安装完成后就完全脱离了终端操作。

    搭建教程

    客户端与服务端下载地址:https://github.com/ehang-io/nps/releases github镜像 下载地址 https://githubfast.com/ehang-io/nps/releases/ 一定要选择适合自己服务器内核的版本!一定要选择适合自己服务器内核的版本!一定要选择适合自己服务器内核的版本! 要是不知道自己的服务器是什么内核,linux用arch命令查看,显示aarch64 的就是arm64内核

    在Linux上搭建

    下载服务端文件

    mkdir nps && cd nps
    # 下载服务端
    wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz
    # 解压
    tar -zxvf linux_amd64_server.tar.gz

    编辑配置文件

    vim conf/nps.conf

    常用配置:

    • • http_proxy_port:域名代理http代理监听端口。
    • • https_proxy_port:域名代理https代理监听端口。
    • • https_just_proxy:为false时仅代理https转发,为true则可以配置站点的ssl证书。
    • • web_port:web管理端口。
    • • web_username:web界面管理账号。
    • • web_password:web界面管理密码。

    安装服务端

    # 进行安装
    ./nps install
    # 启动nps
    nps start

    安装完成后,nps的配置文件会存放在 /etc/nps目录下。

    在windows上搭建

    下载服务端文件并存放解压:

    https://github.com/ehang-io/nps/releases/download/v0.26.10/windows_amd64_server.tar.gz

    编辑配置文件

    使用记事本或者你任意喜欢的文本编辑器编辑 conf/nps.conf文件,配置文件的内容与Linux中部署是一样的道理。

    安装服务端

    我们需要使用 管理员权限来运行cmd终端:

    640

    进入到存放 nps目录的地方执行命令安装:

    nps.exe install
    640-1

    如果跟我一样出现:

    load config file error the target config file: C:\Program Files\nps\conf\nps.conf don't exist

    相似的错误,只需要将 nps下的conf目录完整的拷贝至 C:\Program Files\nps\目录下,然后重新执行nps.exe install来安装,安装完成后使用以下命令来启动。

    # 需要使用管理员模式下的cmd执行启动
    net start nps

    访问web控制台

    通过访问 http://127.0.0.1:8080来进入到控制台登录界面,使用配置的web_usernameweb_password来进行登录。

    创建客户端

    一台需要映射的机器视作一个客户端,我们需要先在控台创建好客户端,才能对需要穿透的主机进行穿透。我们点击左侧的 客户端进入到客户端管理界面。点击新增客户端添加一个需要映射客户端的基本信息:

    640-2

    填写 备注基本就可以了,填写完成点击新增按钮即可添加成功,新增完会自动回到客户端列表,此时刷新即可看到新增的客户端:

    640
    1. 1. ID:id是用来区分主机的,胚子的域名绑定和端口映射都是跟id挂钩的。
    2. 2. 备注:用于方便区分不同的机器。
    3. 3. 版本:内网机器安装的客户端版本。
    4. 4. 唯一验证密钥:内网机器安装的客户端通过这个密码可以找到与平台挂钩的映射配置,唯一且只能被一个客户端引用。

    配置端口映射

    在每个客户端后面也就是右侧中有两个按钮,在 隧道中可以配置端口映射规则,进入到隧道我们新增一个隧道:

    640-1

    依次来看:

    1. 1. 模式:映射的端口走的什么协议,比如(TCP,UDP)等等。一般映射网站也可以使用TCP协议。
    2. 2. 客户端ID:这个映射规则被哪个客户端所使用,一般情况下也可以直接修改现有规则的客户端ID将规则移动到指定客户端下。
    3. 3. 备注:给自己看的,用于分别映射用途。
    4. 4. 服务端端口:即搭建NPS服务器的自身端口,不可重复使用同一个端口。
    5. 5. 目标(IP:端口):指内网客户端需要映射的端口,如(127.0.0.1:3389),也可以是内网其他机器如(192.168.1.100:3389)。

    点击下方 新增按钮即可立即生效。

    配置域名访问

    如果内网存在网站这种服务,想要使用域名访问内网的网站则可以配置 主机映射,同样的在客户单列表中选择指定的客户端右侧的主机按钮进入到域名配置页面,点击新增按钮:

    640

    继续来看每一个作用重复的内容不再赘述:

    1. 1. 主机:即需要是什么域名来访问咱们的服务,填写域名即可。
    2. 2. 模式:这里分(http、https)。
    3. 3. URL路由:则是区分不同的路由访问不同的服务类似nginx代理(http://a.com/a、http://a.com/b)。

    如果经常使用域名访问服务,还是比较推荐使用域名泛解析 *来解析道NPS服务器的IP上。

    安装客户端

    Linux上安装

    mkdir npc && cd npc
    wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz
    tar -zxvf linux_amd64_client.tar.gz
    # 安装命令
    ./npc install -server=127.0.0.1:8024 -vkey=8x95ia9d2zjwjvco -type=tcp
    # 启动客户端开始映射
    npc start
    1. 1. -server:这里是你NPS服务器的IP地址。
    2. 2. -vkey:是指定客户端的唯一验证密钥,即安装成功后可以看到当前客户端处于在线状态。

    windows上安装

    下载客户端文件并存放解压:

    https://github.com/ehang-io/nps/releases/download/v0.26.10/windows_amd64_client.tar.gz

    同理,以 管理员权限打开cmd进入存放客户单的目录下执行:

    # 安装命令
    npc.exe install -server=127.0.0.1:8024 -vkey=8x95ia9d2zjwjvco -type=tcp
    # 启动映射
    net start npc

    这里需要注意:在windwos上可能会被杀毒软件误杀,找回文件放入白名单即可。


    至此,所有的安装和配置过程均已结束。后面添加映射规则只需要前往 web控制台操作即可,每一条规则添加完成后都是立即生效的无需重启任何服务。服务端和客户端如若出现电脑重启的情况也没关系,等系统启动后映射服务会自动启动,无需担心穿透失联。

  • 主题:案例分析:两兄弟基因确诊,哥哥临床确诊,弟弟临床没确诊

    主题:案例分析:两兄弟基因确诊,哥哥临床确诊,弟弟临床没确诊

    案例分析

    一、老大情况分析

    案例情况: 老大 19 年确诊,确诊后单锌治疗,喝的冲剂,一次两袋一天三次,偶尔降量到一袋,现在急性肝衰竭,腹水,排铜水一月后,锌 12 片,青 1/8 片每次,一天两次。

    分析: 孩子目前的症状都是因为铜沉积造成的,七八岁确诊的时候肝内已经沉积了不少铜,可是医生没有排铜,并且给孩子吃了剂量比较小的颗粒锌,加上家长自己没有重视,没有好好吃药,就不断地有铜沉积在肝脏,撑了四年,肝脏里的铜饱和,爆发了,现在就成了急性肝衰。

    建议:

    1 )锌减量至 10 片。

    2 )测尿铜后,青加量 1/8 ,并且保证空腹。现在吃锌,就是抑制铜的吸收,但是现阶段最重要的还是要吃青排铜,让身体让肝脏得以恢复。目前吃 1/4 的剂量肯定是不够的,要慢慢加到体重对应的剂量,但是也不能盲目加,因为你们铜不少,如果加得太快太猛,会让铜激活得比较多,引起二次伤害。

    3 )加量期间要监测尿铜,来辅助判断排铜和身体内铜的水平。

    4 )给孩子做复查表,把孩子历年来的检查结果和对应的用药整理一下。

    5 )老大近段时间尽量避免一些剧烈运动。

    二、两兄弟基因检查情况分析

    案例情况: 下图(图一)是一家人基因检查结果,明显可以看出父母亲及二弟为携带者,三弟和老大基因一模一样。

    d4b28244f4655bc3b9a5f1141022b5ce

    (图一)

    以下(图二、图三)是老三的铜蓝蛋白及尿铜检查情况,以此为依据,老三并不具备确诊的条件。

    989508fb03f6d987fd6ad9bf51103d0d

    (图二)

    a5df010576dfc689b49b45564a3dc2fa

    (图三)

    分析: 这一家的基因挺有意思的,是一个很好的案例,同样的突变点位,在老大身上致病,在老三那儿没致病。由此可见,基因只是一个辅助手段,不是决定判断的依据,一切还是要结合临床。

    建议:

    1 )老三要定期查肝功和尿铜,一年一次,家长不放心就一年两次。

    2 )低铜饮食没必要,锌可以吃一点,但不用按照肝豆治疗的剂量来。比如老三五岁, 一天 1 颗就行了。

    我们现在给出来的参考意见就是,老三要重点监测。监测的目的 就是他如果出现异常,我们能在最早的时间发现,可以及时干预、控制住。如果老三在十来岁还没出现相关的临床指征,比如尿铜和肝功一直都很正常,那就可以排除。

    如果换做 20 年前,压根就不会做基因,老大依然还是确诊肝豆,老二老三不还是看肝功和铜蓝吗?细致的家长会跟着监测,心大的家长就直接给排除了。

    你们现在就当没有做这份基因,老三铜蓝 0.18 ,尿铜 10+ ,九成九就是排除了,之后无非是给他追踪一下,把监测频率调高一点而已。

    三、关于基因的一些解析

    以前我经常说基因不确诊不一定排除肝豆病,基因确诊一定能确诊肝豆,但是后来就不说了,因为我以为基因检测是绝对准确的,现在看来是很难做到的,结合临床才是王道。

    这个就跟隔墙传话一样,从第一个传到最后一个的意思可能就不同了。同样一个基因点位遗传给下一代,不同人对应的表现就是不同的,对 A 来说致病,不代表对 B 也会,也许遗传给 A 的时候缺陷是 90% ,给 B 的就只有 20% 了。就像大家的基因点位基本都是差不多的,尤其是亚洲人的高发点位 2333 ,很多肝豆患者都有,可实际表现都是有差异的。还有之前说过的同卵双胎的肝豆,他们有不同病情表现和程度,那既然程度会有不同,现在这一家的情况也就可以理解了。

    下图(图四)是针对肿瘤基因的一篇报道,放在肝豆上也是一样的道理,大家不要太过看重基因,现在对基因的研究开发真的还太少了,我们只看到简单的点位突变,却很难去研究内里跟疾病的关系和程度,所以关于基因的这些事也不用纠结。

    33f048dca70a7ad6190c02fe5847a8de

    (图四)

  • 主题:简析青霉胺与曲恩汀对比

    主题:简析青霉胺与曲恩汀对比

    1. 青霉胺

    关于曲恩汀,很多家长认为“进口药也许效果更好,听说副作用比青霉胺小,我要给孩子最好的,哪怕是贵一点”,其实都只是自我感动自我安慰。

    首先,青霉胺原本也是国外研发用来治疗肝豆的,只是因为提取工艺相对简单,我国有充足的原研条件去制作,所以我们现在吃的信宜青霉胺是国产原研药。

    其次青霉胺的很多副作用,在我们群里一段时间的群友都知道,很多副作用是由于服用方法不当造成的,比如昨天义乌家长说孩子直接一天三颗起步过敏了,对我们群的人来说其实副作用都是可以规避的。

    2. 青霉胺的副作用

    以下是关于青霉胺的副作用问题:

    9afc96c5cebe7073da98ebf41c685910

    3. 曲恩汀的副作用

    另外就是关于曲恩汀的副作用,原先在早期应用时,因为临床数据较少,所以普遍认为曲恩汀副作用小,可随着使用人数的增多,其副作用也逐渐与青霉胺相当,这一点,在 2022 版肝豆状核变性诊疗指南中也有说明:

    0cd3ad5ce50a7bb032ddff58c784adfb

    最后就是关于是否需要使用曲恩汀的问题。我们已知身体里的铜必须要用足量的药物才能最大程度地排出,否则就是温水煮鸡蛋,时间再长也不能把鸡蛋煮熟,所以,根据各种文献资料(有兴趣可以自己搜,不赘述)显示,曲恩汀的排铜效果<青霉胺,那么我们就无法通过尿铜判断排铜的真实情况,更不能确保有效将体内铜排出,加上昂贵的价格,那不是多此一举吗?

    综上,我们不推荐曲恩汀。当然,如果谁愿意为了肝豆献身,一直吃曲恩汀给我们反馈效果,我们也不反对