gor

gor sudo ./gor --input-raw :8080 --output-stdout sudo ./gor --input-raw :8000 --output-http="http://localhost:8001" sudo ./gor --input-raw :8000 --output-file=requests.gor sudo ./gor --input-file requests.gor --output-http="http://localhost:8001" sudo ./gor --input-file requests.gor --output-stdout

2020-04-16 · 1 min · 26 words · -

fuchsia

fuchsia curl -s "https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT" | base64 --decode | bash Recommended: export PATH="/root/projects/fuchsia/.jiri_root/bin:$PATH" https://fuchsia.dev/ fuchsia-china.com

2020-04-14 · 1 min · 14 words · -

IPtables中SNAT、DNAT和MASQUERADE的含义

IPtables中SNAT、DNAT和MASQUERADE的含义 IPtables中可以灵活的做各种网络地址转换 (NAT) ,网络地址转换主要有两种: SNAT和DNAT。 SNAT是source networkaddress translation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是因为,这个服务器收到的数据包的报头里边的"源地址",已经被替换了,所以叫做SNAT,基于源地址的地址转换。 DNAT是destination networkaddress translation的缩写,即目标网络地址转换,典型的应用是,有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip,互联网上的访问者使用公网ip来访问这个网站,当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网ip,防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip,然后再把这个数据包发送到内网的web服务器上,这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换。 MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。 在iptables中有着和SNAT相近的效果,但也有一些区别,但使用SNAT的时候,出口ip的地址范围可以是一个,也可以是多个,例如: 如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip然后发出去, iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT -to-source192.168.5.3 如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3/192.168.5.4/192.168.5.5等几个ip然后发出去 iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT -to-source192.168.5.3-192.168.5.5 这就是SNAT的使用方法,即可以NAT成一个地址,也可以NAT成多个地址,但是,对于SNAT,不管是几个地址,必须明确的指定要SNAT的ip,假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变,而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址,这个时候如果按照现在的方式来配置iptables就会出现问题了,因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的,每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip,这样是非常不好用的。 MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT。 比如下边的命令: iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE 如此配置的话,不用指定SNAT的目标ip了,不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。 ———————————————— 版权声明: 本文为CSDN博主「siaisjack」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接: https://blog.csdn.net/jk110333/java/article/details/8229828

2020-04-12 · 1 min · 60 words · -

Turn On or Off Network Discovery in Windows 10

Turn On or Off Network Discovery in Windows 10 https://www.tenforums.com/tutorials/49652-turn-off-network-discovery-windows-10-a.html?cf_chl_jschl_tk=7e5927d7ceeff33af2e19733866ca589a4bc180d-1585367318-0-ATPawPfoOVJN7e3AvKtip7DRsrphy31i2BYZqBjNp4sAiFvtZDLUiNlRSC5jO-NIaXjwLfdMPLirZw3ZpJlK7Zp_sTimiHDPY-SbitbDuO9dJoix_zQy_D-LvLIVXNoCdYDOznNGV51hYsxdlJoo9_BetbBL-PBp3TtlF86LuoZnwZ7Fz55qGkDJ646AtovSmzMna8vlV1Dy6xMW3aZQ6If7ogrpS7TGCe9sjKJ4IXM4SZAl_Sqh5DGOQuT_E3v7sdp0xDazqrbw9rATqu2pEZtpCKqY1JO8W5LayTCAlPLO85_P6U2V33Wy-lXmRntOZrNqwEGtF77S2ncamjIFzK6Z3quUqxJ3qKqVuqCSgSzK

2020-03-29 · 1 min · 10 words · -

jenkins api token

jenkins api token Jenkins REST API提供了API token,使得可以在程序中使用API token进行认证 (而不是使用你真实的密码) 。 API token可以在用户个人设置界面查看 到用户→用户id→设置页面,在API Token区域点击Show API token按钮,便可查看API token,同时还可以更改API token 相应的URL是http://<JENKINS_URL>/user//configure 取编译结果 BUILD_STATUS=$(curl -k -user user0:jenkins_token_0 -silent ${BUILD_URL}api/json | jq -r ‘.result’) https://cloud.tencent.com/developer/article/1415887 https://stackoverflow.com/questions/22264431/getting-a-jobs-build-status-as-post-build-variable

2020-03-22 · 1 min · 32 words · -

maven输出版本到文件

maven输出版本到文件 https://stackoverflow.com/questions/3532135/using-maven-to-output-the-version-number-to-a-text-file Create a text file somewhere in src/main/resources, call it version.txt (or whatever) File content: ${project.version} now in your pom.xml, inside the build element, put this block: <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/version.txt</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <excludes> <exclude>**/version.txt</exclude> </excludes> </resource> ... </resources> </build>

2020-03-22 · 1 min · 47 words · -

字节序 大端 小端

‘字节序 大端 小端’ 大端字节序 (big endian) 和小端字节序 (little endian) 。 什么会有小端字节序? 答案是,计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。 但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,比如网络传输和文件储存。 计算机处理字节序的时候,不知道什么是高位字节,什么是低位字节。它只知道按顺序读取字节,先读第一个字节,再读第二个字节。 如果是大端字节序,先读到的就是高位字节,后读到的就是低位字节。小端字节序正好相反。 理解这一点,才能理解计算机如何处理字节序。 字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。 字节序分为两类: Big-Endian 和 Little-Endian,引用标准的 Big-Endian 和 Little-Endian 的定义如下: Little-Endian: 就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 Big-Endian: 就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 网络字节序: TCP/IP各层协议将字节序定义为 Big-Endian (这与主机序相反) ,因此TCP/IP协议中使用的字节序通常称之为网络字节序。 示例 举例来说,数值0x2211使用两个字节储存: 高位字节是0x22,低位字节是0x11。 大端字节序: 高位字节在前,低位字节在后,这是人类读写数值的方法。 小端字节序: 低位字节在前,高位字节在后,即以0x1122形式储存。 比特序 比特序(bit order) 字节序是一个对象中的多个字节之间的顺序问题,比特序就是一个字节中的8个比特位(bit)之间的顺序问题。一般情况下系统的比特序和字节序是保持一致的。 一个字节由8个bit组成,这8个bit也存在如何排序的情况,跟字节序类似的有最高有效比特位、最低有效比特位。 比特序1 0 0 1 0 0 1 0在大端系统中最高有效比特位为1、最低有效比特位为0,字节的值为0x92。在小端系统中最高、最低有效比特位则相反为0、1,字节的值为0x49。 跟字节序类似,要想保持一个字节值不变那么就要使系统能正确的识别最高、最低有效比特位。 字节序转换函数ntohl(s)、htonl(s) 在socket编程中经常要用到网络字节序转换函数ntohl、htonl来进行主机序和网络序(大端序)的转换,在主机序为小端的系统中字节序列78 56 34 12(val=0x12345678)经过htonl转换后字节序列变成12 34 56 78: 版权声明: 本文为CSDN博主「NoneSec」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接: https://blog.csdn.net/liuxingen/java/article/details/45420455 https://www.ruanyifeng.com/blog/2016/11/byte-order.html https://blog.erratasec.com/2016/11/how-to-teach-endian.html#.XnB-KHVfjmE

2020-03-19 · 1 min · 71 words · -

Java RESTful 框架

Java RESTful 框架 RESTEasy + Netty RESTEasy + Undertow https://colobu.com/2015/11/17/Jax-RS-Performance-Comparison/

2020-03-18 · 1 min · 10 words · -

git-am

git-am https://blog.csdn.net/mliubing2532/article/details/7577905 这篇文章主要介绍一下git-am 和 format-patch 的使用。 因为在git使用当中,会有很多时候别人 (供应商或者其他的开发人员) 发过来一系列的patch,这些patch通常的是类似这样的名字: 0001-JFFS2-community-fix-with-not-use-OOB.patch 0002-Community-patch-for-Fix-mount-error-in.patch 0003-partial-low-interrupt-latency-mode-for-ARM113.patch 0004-for-the-global-I-cache-invalidation-ARM11.patch 0005-1-arm-Add-more-cache-memory-types-macr.patch 0006-2-Port-imx-3.3.0-release-to-2.6.28.patch 0007-3-Add-MX25-support.patch 0008-Move-asm-arch-headers-to-linux-inc-dir.patch 0009-1-regulator-allow-search-by-regulator.patch 里面包含了提交的日志,作者,日期等信息。你想做的是把这些patch引入到你的代码库中,最好是也可以把日志也引入进来, 方便以后维护用。传统的打patch方式是 patch -p1 < 0001-JFFS2-community-fix-with-not-use-OOB.patch 这样来打patch,但是这样会把这些有用的信息丢失。由于这些patch显然是用git format-patch来生成的,所以用git的工具应该就可以很好的做好。git-am 就是作这件事情。 在使用git-am之前, 你要首先git am –abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am。 不然会遇到这样的错误。 .git/rebase-apply still exists but mbox given. git-am 可以一次合并一个文件,或者一个目录下所有的patch,或者你的邮箱目录下的patch. 下面举两个例子: 你现在有一个code base: small-src, 你的patch文件放在~/patch/0001-trival-patch.patch cd small-src git-am ~/patch/0001-trival-patch.patch 如果成功patch上去, 你就可以去喝杯茶了。如果失败了, git 会提示错误, 比如: error: patch failed: android/mediascanner.cpp:452 error: android/mediascanner.cpp: patch does not apply 这样你就需要先看看patch, 然后改改错误的这个文件,让这个patch能够patch上去。 你有一堆patch, 名字是上面提到的那一堆patch, 你把他们放在~/patch-set/目录下 (路径随意) ...

2020-03-17 · 2 min · 252 words · -

nexus go proxy

nexus go proxy nexus: 3.21.1 remote storage: https://goproxy.cn 勾选 Use certificates stored in the Nexus truststore to connect to external system save 401 unauthorized 问题 Administration> Security>Anonymous Access 勾选 Allow anonymous users to access the server

2020-03-14 · 1 min · 36 words · -

linux ping 时间戳

linux ping 时间戳 ping 192.168.2.1 -c 10 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) } '

2020-03-10 · 1 min · 15 words · -

java commands

java commands java -cp -class-path classpath, -classpath classpath, or -cp classpath https://blog.csdn.net/shixiaoguo90/article/details/50607716

2020-03-08 · 1 min · 12 words · -

golang 排序

golang 排序 Go 的排序思路和 C 和 C++ 有些差别。 C 默认是对数组进行排序, C++ 是对一个序列进行排序, Go 则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个 slice (分片, 类似于数组),或是包含 slice 的一个对象。 排序(接口)的三个要素: 待排序元素个数 n ; 第 i 和第 j 个元素的比较函数 cmp ; 第 i 和 第 j 个元素的交换 swap ; 乍一看条件 3 是多余的, c 和 c++ 都不提供 swap 。 c 的 qsort 的用法: qsort(data, n, sizeof(int), cmp_int); data 是起始地址, n 是元素个数, sizeof(int) 是每个元素的大小, cmp_int 是一个比较两个 int 的函数。 c++ 的 sort 的用法: sort(data, data+n, cmp_int); data 是第一个元素的位置, data+n 是最后一个元素的下一个位置, cmp_int 是比较函数。 ...

2020-03-04 · 1 min · 159 words · -

golang read docx

golang read docx https://github.com/unidoc/unioffice

2020-03-03 · 1 min · 4 words · -

Maven Dependency Version 依赖版本自动升级

Maven Dependency Version 依赖版本自动升级 [1.15.0,2.0.0) x>=1.15.0 && x<2.0.0 依赖调节是为了解决版本不一致的问题(multiple versions),并采取就近原则(nearest definition)。 举例来说,A项目通过依赖传递依赖了两个版本的D: A -> B -> C -> ( D 2.0 ) , A -> E -> ( D 1.0 ) 复制代码那么最终A依赖的D的version将会是1.0,因为1.0对应的层级更少,也就是更近。 除了我们常用的1.1.0,在声明依赖版本的时候,可以通过表达式灵活地配置版本号。 例如配置jar包x的标签支持如下几种语法: 1.0: 推荐依赖版本,此版本号可能会被覆盖。 复制代码还可以控制依赖的版本范围: (,1.0]: x <= 1.0 [1.2,1.3]: 1.2 <= x <= 1.3 [1.0,2.0): 1.0 <= x < 2.0 [1.5,): x >= 1.5 复制代码同时声明多个版本范围也是可以的,只要用逗号分隔即可: (,1.0],[1.2,): x <= 1.0 或者 x >= 1.2 ...

2020-03-03 · 1 min · 83 words · -

各种胎压,气压 – 小米充气宝

各种胎压,气压 – 小米充气宝 小米平衡车 plus 轮胎标注 35 psi = 2.413bar 官网建议 45~50 Psi 小宝的皮球 19 psi 有点硬下次试试 15 psi 高尔夫 2.5 bar = 36.26psi

2020-03-01 · 1 min · 24 words · -

JAVA 奇偶数

JAVA 奇偶数 int val=//一个数字 if(val%2==0) System.out.println("偶数"); else System.out.println("奇数"); https://blog.csdn.net/x369201170/article/details/8611485

2020-02-26 · 1 min · 9 words · -

番茄工作法, 番茄钟, Pomodoro

‘番茄工作法, 番茄钟, Pomodoro’ 简单来说,就是把工作时间划分为多个番茄时间。一个番茄时间包含两个部分: 25分钟的工作学习和5分钟的休息。

2020-02-24 · 1 min · 5 words · -

golang http

golang http get resp, err := http.Get("http://example.com/") http post func httpPostForm() { // params:=url.Values{} // params.Set("hello","fdsfs") //这两种都可以 params= url.Values{"key": {"Value"}, "id": {"123"}} resp, _:= http.PostForm("http://baidu.com", body) defer resp.Body.Close() body, _:= ioutil.ReadAll(resp.Body) fmt.Println(string(body)) } proxy https://www.flysnow.org/2016/12/24/golang-http-proxy.html package main import ( "bytes" "fmt" "io" "log" "net" "net/url" "strings" ) func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) l, err := net.Listen("tcp", ":8080") if err != nil { log.Panic(err) } for { client, err := l.Accept() if err != nil { log.Panic(err) } go handleClientRequest(client) } } func handleClientRequest(client net.Conn) { if client == nil { return } defer client.Close() log.Println(client.RemoteAddr()) var b [1024]byte n, err := client.Read(b[:]) if err != nil { log.Println(err) return } var method, host, address string fmt.Sscanf(string(b[:bytes.IndexByte(b[:], '\n')]), "%s%s", &method, &host) hostPortURL, err := url.Parse(host) if err != nil { log.Println(err) return } if hostPortURL.Opaque == "443" { //https访问 address = hostPortURL.Scheme + ":443" } else { //http访问 if strings.Index(hostPortURL.Host, ":") == -1 { //host不带端口, 默认80 address = hostPortURL.Host + ":80" } else { address = hostPortURL.Host } } //获得了请求的host和port,就开始拨号吧 server, err := net.Dial("tcp", address) if err != nil { log.Println(err) return } if method == "CONNECT" { fmt.Fprint(client, "HTTP/1.1 200 Connection established\r\n\r\n") } else { server.Write(b[:n]) } //进行转发 go io.Copy(server, client) io.Copy(client, server) } https://segmentfault.com/a/1190000013262746

2020-02-23 · 1 min · 206 words · -

hyphen、en dash 和 em dash

hyphen、en dash 和 em dash https://cherysunzhang.com/2016/08/using-hyphen-and-dash-correctly/ 在 Unicode 中 hyphen-minus 与 hyphen 和 minus 都是不同的符号,但是在 ASCII 中则是用 hyphen-minus 来同时替代 hyphen 和 minus,所以这就是其名称的来源。 为了适应早期的打字机和计算机,不得不作出妥协。除了用 hyphen-minus 这个符号来代替 hyphen 和 minus,以前经常还会用它直接代替 en dash。 因为大部分的编程语言都限制只能够使用 ASCII,所以在编写代码时所使用的表示负数或数字相减的符号即是 hyphen-minus,以及在变量名称中使用的连接符号。 另外,Unicode 中还有一个类似的 full hyphen-minus (-) 。

2020-02-18 · 1 min · 39 words · -