goroutine pool

goroutine pool type worker struct { Func func() } func main() { var wg sync.WaitGroup channels := make(chan worker, 10) for i := 0; i < 5; i++ { wg.Add(1) go func() { defer wg.Done() for ch := range channels { //reflect.ValueOf(ch.Func).Call(ch.Args) ch.Func() } }() } for i := 0; i < 100; i++ { j := i wk := worker{ Func: func() { fmt.Println(j + j) }, } channels <- wk } close(channels) wg.Wait() } package pool type PayloadProcessor func(payload interface{}) type Pool struct { Size int Channels chan interface{} Processor PayloadProcessor } func New(size int, processor func(interface{})) *Pool { p := Pool{ Size: size, Channels: make(chan interface{}, 0), Processor: processor, } for i := 0; i < p.Size; i++ { go func() { for payload := range p.Channels { p.Processor(payload) } }() } return &p } func (p *Pool) Process(payload interface{}) { p.Channels <- payload } http://legendtkl.com/2016/09/06/go-pool/

2020-04-19 · 1 min · 149 words · -

ssh client config

ssh config host host0 hostname 192.168.1.10 port 22 user root # for openwrt ssh-rsa HostkeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa https://daemon369.github.io/ssh/2015/03/21/using-ssh-config-file https://blog.csdn.net/XXY2083123843/article/details/128370472 vim ~/.ssh/config #--- Host * ControlMaster auto # ssh multiplexing ControlPath ~/.ssh/master-%r@%h:%p ControlPersist 10m ForwardAgent yes # ssh agent forward User root # 默认用户 使用通配符 (wildcard) host 192.168.* user root ssh client config, 保持连接 避免SSH连接因超时闲置断开 ssh 客户端保持连接 vim ~/.ssh/config Host 192.168.* ServerAliveInterval 120 User root 用 SSH 过程连接电脑时,经常遇到长时间不操作而被服务器踢出的情况,常见的提示如: ...

2020-04-18 · 2 min · 236 words · -

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 · -

tcp reset, rst

tcp reset, rst 在谈 RST 攻击前,必须先了解 TCP: 如何通过三次握手建立 TCP 连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP 的 flag 标志位里 RST 在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下 RST 攻击是怎么回事。 TCP是什么? TCP 是在 IP 网络层之上的传输层协议,用于提供 port 到 port 面向连接的可靠的字节流传输。我来用土语解释下上面的几个关键字: port到port: IP层只管数据包从一个IP到另一个IP的传输,IP层之上的TCP层加上端口后,就是面向进程了,每个port都可以对应到用户进程。 可靠: TCP会负责维护实际上子虚乌有的连接概念,包括收包后的确认包、丢包后的重发等来保证可靠性。由于带宽和不同机器处理能力的不同,TCP要能控制流量。 字节流: TCP会把应用进程传来的字节流数据切割成许多个数据包,在网络上发送。IP包是会失去顺序或者产生重复的,TCP协议要能还原到字节流本来面目。 从上面我用PowerPoint画的TCP协议图可以看到,标志位共有六个,其中RST位就在TCP异常时出现,也是我这篇文章重点关注的地方。 通过三次握手建立连接 下面我通过A向B建立TCP连接来说明三次握手怎么完成的。 为了能够说清楚下面的RST攻击,需要结合上图说说: SYN标志位、序号、滑动窗口大小。 建立连接的请求中,标志位SYN都要置为1,在这种请求中会告知MSS段大小,就是本机希望接收TCP包的最大大小。 发送的数据TCP包都有一个序号。它是这么得来的: 最初发送SYN时,有一个初始序号,根据RFC的定义,各个操作系统的实现都是与系统时间相关的。之后,序号的值会不断的增加,比如原来的序号是100,如果这个TCP包的数据有10个字节,那么下次的TCP包序号会变成110。 滑动窗口用于加速传输,比如发了一个seq=100的包,理应收到这个包的确认ack=101后再继续发下一个包,但有了滑动窗口,只要新包的seq与没有得到确认的最小seq之差小于滑动窗口大小,就可以继续发。 滑动窗口 滑动窗口毫无疑问是用来加速数据传输的。TCP要保证"可靠",就需要对一个数据包进行ack确认表示接收端收到。有了滑动窗口,接收端就可以等收到许多包后只发一个ack包,确认之前已经收到过的多个数据包。有了滑动窗口,发送端在发送完一个数据包后不用等待它的ack,在滑动窗口大小内可以继续发送其他数据包。举个例子来看吧。 大家看上图,标志位为.表示所有的flag都为0。标志位P表示flag为PSH的TCP包,用于快速传输数据。 前三个包是三次握手,客户端表示自己的滑动窗口大小是65535 (我的XP机器) ,服务器端表示滑动窗口是5840 (屏幕宽了,没截出来) 。从第四个包开始,客户端向服务器发送PSH包,数据长度是520字节,服务器发了ack确认包。注意此时win窗口大小发生了改变哈。以此类推。 倒数第二、三包,服务器在滑动窗口内连续向客户端发包,客户端发送的ack 124同时确认了之前的两个包。这就是滑动窗口的功能了。 如果谈到TCP攻击就需要注意,TCP的各种实现中,在滑动窗口之外的seq会被扔掉!下面会讲这个问题。 四次握手的正常TCP连接关闭 先画张简单的正常关闭连接状态变迁图。 FIN标志位也看到了,它用来表示正常关闭连接。图的左边是主动关闭连接方,右边是被动关闭连接方,用netstat命令可以看到标出的连接状态。 FIN是正常关闭,它会根据缓冲区的顺序来发的,就是说缓冲区FIN之前的包都发出去后再发FIN包,这与RST不同。 RST 标志位 RST 表示复位,用来异常的关闭连接,在 TCP 的设计中它是不可或缺的。就像上面说的一样,发送 RST 包关闭连接时,不必等缓冲区的包都发出去 (不像上面的 FIN 包) ,直接丢弃缓存区的包发送 RST 包。而接收端收到 RST 包后,也不必发送 ACK 包来确认。 ...

2020-04-16 · 5 min · 877 words · -

go metrics

go metrics import "github.com/jregovic/go-metrics-influxdb" go influxdb.InfluxDB( metrics.DefaultRegistry, time.Duration(10)*time.Second, "http://192.168.50.244:8086", "database0", "measurement0", "", "", false, ) go metrics.Log( metrics.DefaultRegistry, time.Duration(metricsOutputDuration)*time.Second, logger.GetLogger(), ) meter := metrics.GetOrRegisterMeter("foo", nil) meter.Mark(1) https://github.com/rcrowley/go-metrics

2020-04-15 · 1 min · 27 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 · -

ping command, fping

ping command, fping options -s<数据包大小>:设置数据包的大小; -M hint 设置MTU(最大传输单元)分片策略。 可设置为: ‘do’:禁止分片,即使包被丢弃; ‘want’:当包过大时分片; ‘dont’:不设置分片标志(DF flag); install # ubuntu apt install iputils-ping # archlinux install fping pacman -S fping windows 长 ping ping 192.168.1.100 -t 指定网络设备 ping -c 1 -I veth0 192.168.3.102 同时显示统计信息 fping -l google.com 什么是 ping PING (Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。 什么是 TTL TTL: 生存时间 指定数据包被路由器丢弃之前允许通过的网段数量。 TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。 使用PING时涉及到的 ICMP 报文类型 一个为ICMR请求回显 (ICMP Echo Request) 一个为ICMP回显应答 (ICMP Echo Reply) TTL 字段值可以帮助我们识别操作系统类型。 UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255 Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64 微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128 微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32 当然,返回的TTL值是相同的 但有些情况下有所特殊 LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64 FreeBSD 4.1, 4.0, 3.4; Sun Solaris 2.5.1, 2.6, 2.7, 2.8; OpenBSD 2.6, 2.7, NetBSD HP UX 10.20 ICMP 回显应答的 TTL 字段值为 255 Windows 95/98/98SE Windows ME ICMP 回显应答的 TTL 字段值为 32 Windows NT4 WRKS Windows NT4 Server Windows 2000 Windows XP ICMP 回显应答的 TTL 字段值为 128 这样,我们就可以通过这种方法来辨别操作系统 ...

2020-04-13 · 2 min · 323 words · -

docker save 与 docker export 的区别, docker 镜像 导出

docker save 与 docker export, docker 镜像 导出 导出 # save & load docker save f1905dce9659 > kafka.tar # 另外一种 save 语法 docker save -o images.tar postgres:9.6 # 从 tar 包加载镜像而不是 stdin, --input, -i: 指定导入的文件,代替 STDIN。 docker load -i foo.tar docker load < kafka.tar # docker load 之后 repository 和 tag 都是 none, 重新打一下 tag docker tag f1905dce9659 wurstmeister/kafka:latest # export & import docker export f299f501774c > hangger_server.tar docker import - new_hangger_server < hangger_server.tar docker save 和 docker export 的区别: docker save 保存的是镜像 (image) ,docker export 保存的是容器 (container) ; docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像; docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称。 ...

2020-04-13 · 1 min · 102 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 · -

idea plugin

idea plugin java 编码规范检查 Alibaba Java Coding Guidelines idea 中统计代码行数 plugin: Statistic https://blog.csdn.net/liuchaoxuan/article/details/81270341

2020-04-07 · 1 min · 13 words · -

chrome remote desktop

chrome remote desktop https://aur.archlinux.org/packages/chrome-remote-desktop/ yay -S chrome-remote-desktop

2020-04-07 · 1 min · 7 words · -

chromeos nfs, SMB

chromeos nfs, SMB Since Chrome 71, SMB is now natively supported by Chrome OS and this Chrome extension/app is deprecated. The new implementation is an order magnitude or two faster and much more reliable. On Chrome 71 or higher you can: Open the files app Click the “three dot menu” in the top right Choose “Add New Service” Choose “SMB file share” https://chrome.google.com/webstore/detail/network-file-share-for-ch/ndjpildffkeodjdaeebdhnncfhopkajk

2020-04-04 · 1 min · 63 words · -

监控一个 APP 的 HTTPS 流量

监控一个 APP 的 HTTPS 流量 在家里的电视上安装了 Plex 但是因为众所周知的原因, 登录 Plex 账号的过程或者登录之后的网络请求遇到了些问题, 路由器上配置的透明代理配置文件有可能并没有考虑 Plex 常用的地址, 所以需要用一些工具来分析 Plex 发出了哪些网络请求. https://www.anquanke.com/post/id/86238 https://calebfenton.github.io/2017/05/27/monitoring-https-of-a-single-app-on-osx/ 拦截 HTTPS 流量 生成一个根证书 安装这个根证书 用 proxychains 去代理指定的 app 使用 mitmproxy 去拦截流量 安装并配置 proxychains # macOS brew install proxychains-ng 创建一个配置文件 # macos /Users/wiloon/.proxychains/proxychains.conf 然后加入以下内容 strict_chain quiet_mode proxy_dns remote_dns_subnet 224 tcp_read_time_out 15000 tcp_connect_time_out 8000 [ProxyList] http 127.0.0.1 8080 strict_chain: 按照列表中出现的代理服务器的先后顺序组成一条链,要求所有的代理服务器都是有效的 quiet_mode: Quiet mode (no output from library) proxy_dns: Proxy DNS requests - no leak for DNS data remote_dns_subnet: 设置内部 dns 解析地址返回 IP 的网段 ProxyList: 代理服务器列表 ...

2020-04-03 · 2 min · 349 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 · -

shell 进制转换

shell 进制转换 16进制转换成10进制 printf %d 0xF echo $((16#F)) 10进制转换成16进制 printf %x 15 echo "obase=16;15"|bc 三、10进制转换成8进制 printf %o 9 11 四、8进制转换成10进制 echo $((8#11)) 9 五、同理二进制转换成10进制 echo $((2#111)) 7 六、10进制转换成二进制 echo “obase=2;15”|bc 1111 https://blog.csdn.net/rheostat/article/details/8057405

2020-03-24 · 1 min · 32 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 · -

dpkg

dpkg Ubuntu 查看软件包是否安装 # 显示包含此软件包的所有位置 dpkg -S softwarename # -s status, 查看软件包状态 dpkg -s <package-name> # 可以加通配符* dpkg-query -l <package-name> # 列出软件包的位置, 安装路径 dpkg -L <package-name> # 列出哪些软件包被安装 dpkg --get-selections | grep <package-name>* # 查看版本 dpkg -l softwarename debian install deb debian install deb package deb 包 deb 包是debian,ubuntu等LINUX发行版的软件安装包,是类似于rpm的软件包,而非debian,ubuntu系统不推荐使用deb软件包,因为要解决软件包依赖问题,安装也比较麻烦。 安装方法有两种: 一般在此类发行版中可以直接双击安装。 手动安装。如果您喜欢使用终端,您需要管理员权限来安装一个 .deb 文件。 sudo dpkg -i foo.deb 但是在包含有依赖关系的安装包手动安装的过程中会出现安装不成功的问题,这时只需输入命令: sudo apt-get -f install 待命令执行完成,软件也就安装成功了。 卸载安装包时,在终端中,输入:sudo dpkg -r package_name ...

2020-03-22 · 1 min · 78 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 · -