putty,command方式操作的工具是plink putty,自带sftp工具叫做psftp putty,自带scp工具叫做pscp 最后,最主要的,putty当前的版本是0.70,你可以下载putty.zip这个文件,里面包含putty的官方文档。
分类: ECW
to record the skills, experience and some other interesting things about the Computer World
re子组和xml.etree.ElementTree写文件
关键信息临时中转╭(╯^╰)╮,
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import xml.etree.ElementTree as ET import re def handle_version_str(src_str): # 获取匹配的自组数据 m = re.search(r'(.*)(V\d{3}R\d{3}C\d{2})(.*)', src_str) if m is not None: ver = m.group(2) print(ver) # 通过获取的匹配内容,将其删除 dst_str = re.sub(ver, '', src_str) else: return None return dst_str def create_result_xml(): model = '''<data><country name="China">test</country></data>''' root = ET.fromstring(model) # 添加子节点 sub_attrib = {"location": "cn", "color":"black"} root.append("sub1", sub_attrib) # 如何通过ET写入不是parse方式创建的ET到一个xml文件 tree = ET.ElementTree(root) tree.write('result.xml') if __name__ == "__main__": ver_str = "Hello_V001R002C20_Release" dst_str = handle_version_str(ver_str) print(dst_str) create_result_xml() |
socketserver
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#-*- coding: utf-8 -*- import socketserver import socket """ 测试环境:Ubuntu Pyhton3.6.5 web访问: http://127.0.0.1:9999 通过 curl: curl http://127.0.0.1:9999 通过 """ class myHandler(socketserver.StreamRequestHandler): def handle(self): self.rdata = self.rfile.readline() # 测试for方法独到最后会持续阻塞 # for item in self.rfile: # print("{} write: {}".format(self.client_address[0], item)) self.function1() self.wfile.write(b'HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<html>hello</html>') def function1(self): if 'GET' in self.rdata.decode('utf-8'): self.function2() def function2(self): """测试rfile中的数据可以缓存后续继续read""" while True: item = self.rfile.readline() # 此处无法设置非阻塞,通过判断http请求中最后一组数据为\r\n来退出循环 if item == b"\r\n": break print("{} write: {}".format(self.client_address[0], item)) if __name__ == "__main__": # 全局设置端口重用 socketserver.ThreadingTCPServer.allow_reuse_address = True server = socketserver.ThreadingTCPServer(('127.0.0.1', 9999), myHandler) # 设置端口重用 # server.allow_reuse_address = True # 网上关于设置socket参数方法 # server.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 设置非阻塞不生效 server.socket.setblocking(False) server.serve_forever() |
python2: SockServer python3: socketserver 如果pyhton2一直提示找不到模块,尝试 pip install Werkzeug --upgrade
openssl测试crl列表
首先生成证书吊销列表,在存放自己跟证书和被吊销证书的目录下,执行下面操作:
|
1 2 3 4 5 6 7 |
touch index.txt serial crlnumber echo 00 > crlnumber echo 00 > serial openssl ca -revoke Server.pem -config openssl.cnf openssl ca -gencrl -out Server.crl -config openssl.cnf |
这样就产生了一个Server.pem证书的吊销列表,名为Server.crl 曾经以为这部分只是这样,没想到却落在坑里许久:-(:曾几何时,听别人的要求修改openssl.cnf,在[ v3_ca ]项下添加了如下信息: [crayon-6973f90e7d […]
通过java程序使用证书
以下java代码都来自ibm官网的大神,此处只是借用代码测试我们生成的证书好不好用。首先我们的证书有下面几个: Client.p12 - Client端keystore,不包含CA证书,通过openssl生成 ClientTrust.p12 - Client端可信任keystore,只导入Server的证书,通过keytool生成 Client_wc.p12 - Client端keys […]
使用openssl生成多级证书
离开北京之后很久都没有再接触openssl了,最近测试用到它来生成证书,所以重新学习一下,参考网上的资料有很多关于生成证书的内容,为了方便使用,特意写了一个脚本,可以方便的生成1~100级的证书:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
#!/bin/bash if [ $# -ne 1 ];then echo "usage ./mkcert.sh level" exit fi #是否给private key设定密码 PRIVATE_KEY_WITH_PASSWORD="false" PASSWORD="helloworld" DAYS=3650 SUBJECT="" POLICY="policy_anything" if [ $PRIVATE_KEY_WITH_PASSWORD == "true" ];then PASSOUT="-aes256 -passout pass:$PASSWORD" PASSIN="-passin pass:$PASSWORD" else PASSOUT="" PASSIN="" fi #keystore密码 PKCSPASSOUT="-passout pass:Aa123456" TRUSTKEYSTOREPASSWORD="Aa123456" rm -rf RootCA* newCert LV=0 while [ $LV -lt $1 ] do mkdir RootCA$LV touch RootCA$LV/index.txt RootCA$LV/serial echo "01" > RootCA$LV/serial CERTIFICATE="certificate = \$dir/RootCA$LV.pem" PRIVATE_KEY="private_key = \$dir/private/RootCA$LV.key" cp openssl.cnf openssl.cnf.tmp sed -i "48 a$CERTIFICATE" openssl.cnf.tmp sed -i "54 a$PRIVATE_KEY" openssl.cnf.tmp mv openssl.cnf.tmp RootCA$LV/openssl.cnf ((LV=LV+1)) done LV=0 while [ $LV -lt $1 ] do echo echo "======= creating RootCA$LV =======" echo if [ $LV -eq 0 ];then cd RootCA$LV openssl genrsa $PASSOUT -out RootCA$LV.key 2048 openssl req -new -x509 -days $DAYS -key RootCA$LV.key $PASSIN -out RootCA$LV.pem -subj /C=CN/ST=GS/L=LZ/O=LZUiversity/OU=ETS/CN=RootCA$LV/emailAddress=RootCA$LV@lzu.cn -config openssl.cnf -sha256 else cd ..; cd RootCA$LV openssl genrsa $PASSOUT -out RootCA$LV.key 2048 openssl req -new -x509 -days $DAYS -key RootCA$LV.key $PASSIN -out RootCA$LV.crt -subj /C=CN/ST=GS/L=LZ/O=LZUiversity/OU=ETS/CN=RootCA$LV/emailAddress=RootCA$LV@lzu.cn -config openssl.cnf openssl ca -ss_cert RootCA$LV.crt -cert ../RootCA$[$LV-1]/RootCA$[$LV-1].pem -keyfile ../RootCA$[$LV-1]/RootCA$[$LV-1].key $PASSIN -config openssl.cnf -policy $POLICY -out RootCA$LV.pem -outdir ./ -extensions v3_ca -batch fi ((LV=LV+1)) done ((LV=LV-1)) echo echo "======= creating Server.pem =======" echo openssl genrsa $PASSOUT -out Server.key 2048 openssl req -new -x509 -days $DAYS -key Server.key $PASSIN -out Server.crt -subj /C=CN/ST=GS/L=LZ/O=LZUiversity/OU=ETS/CN=Server/emailAddress=RootCA$LV@lzu.cn -config openssl.cnf openssl ca -ss_cert Server.crt -cert RootCA$LV.pem -keyfile RootCA$LV.key $PASSIN -config openssl.cnf -policy $POLICY -out Server.pem -outdir ./ -batch echo echo "======= creating Client.pem =======" echo openssl genrsa $PASSOUT -out Client.key 2048 openssl req -new -x509 -days $DAYS -key Client.key $PASSIN -out Client.crt -subj /C=CN/ST=GS/L=LZ/O=LZUiversity/OU=ETS/CN=Client/emailAddress=RootCA$LV@lzu.cn -config openssl.cnf openssl ca -ss_cert Client.crt -cert RootCA$LV.pem -keyfile RootCA$LV.key $PASSIN -config openssl.cnf -policy $POLICY -out Client.pem -outdir ./ -batch echo echo "======= verify Server.pem Client.pem =======" echo cp RootCA$LV.pem RootCA$LV.pem.bak ROOTS=0 while [ $ROOTS -lt $LV ] do cat ../RootCA$ROOTS/RootCA$ROOTS.pem >> RootCA$LV.pem ((ROOTS+=1)) done openssl verify -CAfile RootCA$LV.pem Server.pem Client.pem echo echo "======= collect cert =======" echo cd ..;mkdir newCert mv RootCA$LV/Server.key RootCA$LV/Server.pem RootCA$LV/Client.key RootCA$LV/Client.pem RootCA$LV/RootCA$LV.key RootCA$LV/RootCA$LV.pem newCert echo echo "======= verify the cert and private key =======" echo cd newCert openssl rsa -modulus -noout -in Server.key | openssl md5 openssl x509 -modulus -noout -in Server.pem | openssl md5 openssl rsa -modulus -noout -in Client.key | openssl md5 openssl x509 -modulus -noout -in Client.pem | openssl md5 #generate pkcs12 for java program echo echo "======= generate pkcs12 without chain for java program =======" echo openssl pkcs12 -export -in Server.pem -inkey Server.key -name Server $PKCSPASSOUT -out Server.p12 openssl pkcs12 -export -in Client.pem -inkey Client.key -name Client $PKCSPASSOUT -out Client.p12 keytool -import -alias Client -keystore ServerTrust.p12 -storepass $TRUSTKEYSTOREPASSWORD -noprompt -file Client.pem keytool -import -alias Server -keystore ClientTrust.p12 -storepass $TRUSTKEYSTOREPASSWORD -noprompt -file Server.pem echo echo "======= generate pkcs12 with chain for java program =======" echo openssl pkcs12 -export -chain -CAfile RootCA$LV.pem -in Server.pem -inkey Server.key -name Server $PKCSPASSOUT -out Server_wc.p12 openssl pkcs12 -export -chain -CAfile RootCA$LV.pem -in Client.pem -inkey Client.key -name Client $PKCSPASSOUT -out Client_wc.p12 |
将上面的内容保存成mk.sh脚本,然后将/etc/ssl/openssl.cnf文件拷贝到当前目录和mk.sh放在一起,修改openss […]
python数字转ASCII字符
数字转字符 - chr() 字符转数字 - ord() 于是就出现一个有意思的事情,chr()可以将数字转化为字符,而且根据python3的IDLE提示,chr()的范围为0<=i<=0x10ffff,如果我们遍历这之间的数值会有什么现象呢,如下:
|
1 2 3 4 5 6 7 8 9 10 |
for i in range(0,0x10ffff): print(format("%6X: %s") % (i, chr(i)) ) ----------------------------------------------------------------------- FFFF: <br>Traceback (most recent call last): File "C:\Users\jma\Desktop\chr.py", line 9, in <module> print(format("%10X: %s") % (i, chr(i)) ) UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 12-12: Non-BMP character not supported in Tk |
在超过65535的时候,系统就提示错误了,可是同样的程序在cmd里面却可 […]
python的两个笔试题
1.写一个函数,可以在有序的序列中插入数值 暂且不考虑序列是字符还是数字,当时不知为何第一个想到的就是二分查找,许久不曾接触基本的算法了,傻傻的拿起笔在纸上写了几句代码后才发现,在纸上的思路真的不是那么灵光了,于是干脆停笔只将所想到的解决思路写下来,第二个问题也是同样的方法处理。今天有空就重新回顾一下这个问题,先简单温习一下算法的基本过程,然后胡乱的凑了一些代码,基本功能反正是实现了: [cray […]