性能测试, performance testing

性能测试, performance testing 基准测试, benchmarking testing 性能测试, performance testing 测试系统在各种负载条件下的响应时间、吞吐量、资源使用等性能表现,以确保系统在预期的使用场景下能正常运行。 性能测试是什么: 性能测试就是通过特定的方式对被测试系统按照一定测试策略施加压力,获取该系统的响应时间、TPS、吞吐量、资源利用率等性能指标,来检测系统上线后能否满足用户需求的过程。 性能测试要统一考虑这么几个因素: Thoughput吞吐量/吞吐率,Latency响应时间,资源利用 (CPU/MEM/IO/Bandwidth…) ,成功率,系统稳定性。 并发数 并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。 响应时间 响应时间是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。响应时间是指执行一个请求从开始到最后收到响应数据所花费的总体时间。 吞吐量/吞吐率 吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标。 QPS (每秒查询数) 、TPS (每秒事务数) 是吞吐量的常用量化指标,另外还有HPS (每秒HTTP请求数) 。 跟吞吐量有关的几个指标是: 并发数、响应时间。 QPS (TPS) ,并发数、响应时间它们三者之间的关系是: QPS (TPS) =并发数/平均响应时间 响应时间 指的是客户发出请求到得到响应的整个过程的时间。在某些工具中,请求响应时间通常会被称为"TTLB"(Time to laster byte) ,意思是从发起一个请求开始,到客户端收到最后一个字节的响应所耗费的时间。 https://blog.wiloon.com/?p=16015 资源指标 CPU使用率: 指用户进程与系统进程消耗的CPU时间百分比,长时间情况下,一般可接受上限不超过85%。 CPU指标主要指的CPU利用率,包括用户态(user)、系统态(sys)、等待态(wait)、空闲态(idle)。 CPU 利用率要低于业界警戒值范围之内,即小于或者等于75%; CPU sys%小于或者等于30%; CPU wait%小于或者等于5%; 内存利用率: 内存利用率=(1-空闲内存/总内存大小)*100%,一般至少有10%可用内存,内存使用率可接受上限为85%。 磁盘I/O: 磁盘主要用于存取数据,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据的时候对应的是写IO操作,取数据的时候对应的是是读IO操作,一般使用% Disk Time(磁盘用于读写操作所占用的时间百分比)度量磁盘读写性能。 网络带宽: 一般使用计数器Bytes Total/sec来度量,Bytes Total/sec表示为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较。 系统指标 并发用户数: 某一物理时刻同时向系统提交请求的用户数。 在线用户数: 某段时间内访问系统的用户数,这些用户并不一定同时向系统提交请求。 平均响应时间: 系统处理事务的响应时间的平均值。事务的响应时间是从客户端提交访问请求到客户端接收到服务器响应所消耗的时间。对于系统快速响应类页面,一般响应时间为3秒左右。 ...

2020-04-21 · 1 min · 154 words · -

性能测试-响应时间

性能测试-响应时间 https://www.cnblogs.com/fnng/archive/2012/07/01/2571990.html 响应时间过程分析 我们需要对这个过程进行分解,才能得到你真正想要的响应时间。我把整个过程分三个部分,呈现时间,数据传输时间和系统处理时间。 呈现时间 其实主要说的浏览器对接收到数据的一个处理展示的过程。几年前大家都在用IE,如果页面显示比较慢,我们肯定不会怪罪IE,只会怪罪电信运营商的网速或被访问的系统 (其实,大多情况我们不会考虑是被访问系统的问题) 。现在chrome来了,我们会发现同一台电脑同一个网站,通过chrome去访问,页面的呈现速度会比IE略快。这是各种评测及大众用户的整体感受。当然,我个人感觉,opera浏览器的呈现速度最快,但它的显示效果一直不太好。 当然,我说这个呈现时间总不能全怪罪与浏览器的身上吧!当然还和承载它的操作系统有关,以及电脑硬件 (比如cpu 内存) 。假如你有超快的浏览器,如果是一台极其垃圾的电脑,我想你多打开两个网页就有可能使电脑卡掉。 数据传输时间 千万不要忽视数据传输时间。如果你要寄信给你一个远方的朋友,你想是什么影响你将信息传递给远方的朋友?不是你写信的过程 (如果你写的信不像书一样厚的话) ,也不是你朋友读信的过程,而是送信的过程。 (ps, 我10天前在china-pub订购的一本书现在还没到货!XXX) 拿我们系统的数据传输过程来说,我们发送一个请求需要时间,系统处理完后返回给我们也需要时间。初学性能测试工具的同学喜欢拿工具去测试互联网上的一些系统,甚至不懂性能的同学认为可以用性能测试工具将互联网上的一些网站压崩溃。貌似这一招比任何黑客攻击厉害多去。 那么,我觉得这些同学应该补补网络知识了,你的带宽是多少?互联网是个网,就是算是相同的起点与终点,它有可能走的不同的路线。有没有考虑网络延迟?就算你的并发请求都能成功的发出,但到目的地的时候,已经不能叫并发了。 这也是为什么我们在一般做性能测试时,一般要强调要在局域网中进行。当然,也有特殊的性能测试需要在互联网中时行。它们重点不是求用户的最大的并发量。 系统处理时间 系统得到请求后对请求进行处理并将结果返回。那我进行性能测试主要就是验证系统的处理时间,因为前面的呈现时间和数据传输时间都我们不可控制的,用户使用的电脑及浏览器千差万别,用户的网络状况千差万别。我们唯一能控制的就是将系统的处理请求的时间缩到最短暂。 如果我们对系统的的处理进行分析和讲解的话,它会是一个非常庞大与复杂的过程。语言、语言框架、中间件,数据库、系统架构以及服务器系统。所以,想成为一个优秀的性能测试工程师我们的路还很长。 响应时间的定义: 响应时间 指的是客户发出请求到得到响应的整个过程的时间。在某些工具中,请求响应时间通常会被称为"TTLB"(Time to laster byte) ,意思是从发起一个请求开始,到客户端收到最后一个字节的响应所耗费的时间。 系统响应时间 应用系统从发出请求开始到客户端接收到响应所消耗的时间 合理的响应时间 在互联网上对于用户响应时间,有一个普遍的标准。2/5/10秒原则。 也就是说,在2秒之内给客户响应被用户认为是"非常有吸引力"的用户体验。在5秒之内响应客户被认为"比较不错"的用户体验,在10秒内给用户响应被认为"糟糕"的用户体验。如果超过10秒还没有得到响应,那么大多用户会认为这次请求是失败的。 这里我们还要考虑一个使用频率的概念。 我最早安装windows系统可能要1个小时,我们为什么觉得这很正常,因为我们要很久才装一次系统,如果系统使用得当,可能一个系统用几年不用重装,假如,我们在系统上装个任何小软件都要这么长时间,那我们一定是无法忍受的。对于软件控来说,他们会时常安装各种新鲜有趣的软件进行使用。 对于一个税务报账系统,该系统的用户每月使用一次,一次花费3小时进行数据的录入, 当用户单击"提交"按钮后,即使系统在10分钟后才给出"处理成功"的消息,我们也觉得是可以接受的。 因此,在进行性能测试时,“合理的响应时间"取决于用户的需求,而不能依据测试人员自己设想来决定。

2020-04-20 · 1 min · 41 words · -

cobra

cobra https://github.com/spf13/cobra-cli/blob/main/README.md go install github.com/spf13/cobra-cli@latest go mod init xxxxx cobra-cli init viper https://github.com/spf13/viper https://darjun.github.io/2020/01/17/godailylib/cobra/

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

json tool, jq command

json tool, jq command, json 格式化 install apt install jq https://stedolan.github.io/jq/ https://stedolan.github.io/jq/download/ jq ".[0]|.releases| .[0]|.downloads.linux.link" cat foo.txt|jq '.checklists|.[0]|.checkItems|.[].name' cat foo.txt|jq '.checklists|.[0]|.checkItems|.[]|if .state == "incomplete" then .name else "" end'|grep -v '""' jq 可以对 json 数据进行分片、过滤、映射和转换 jq 是用 C 编写,没有运行时依赖,所以几乎可以运行在任何系统上。预编译的二进制文件可以直接在Linux、OS X和windows系统上运行,当然在linux和OS X系统你需要赋与其可执行权限;在linux系统中也可以直接用yum安装。 下载页面: . 最简单的表达式 .,格式化输出 [index] 输出列表中的第一个元素,可以使用[0]: cat json.txt | jq ‘.[0]’ 管道符 | cat json.txt | jq ‘.[0] | .name ' json格式化 echo '{"kind": "Service", "apiVersion": "v1", "status": {"loadBalancer": true}}' | jq . { "kind": "Service", "apiVersion": "v1", "status": { "loadBalancer": true } } jq 生成 json 字符串 BUCKET_NAME=testbucket OBJECT_NAME=testworkflow-2.0.1.jar TARGET_LOCATION=/opt/test/testworkflow-2.0.1.jar JSON_STRING=$(jq -n \ --arg bucketname "$BUCKET_NAME" \ --arg objectname "$OBJECT_NAME" \ --arg targetlocation "$TARGET_LOCATION" \ '$ARGS.named') jq -n \ --arg foo "bar" \ --arg bar "foo" \ '$ARGS.named' –null-input | -n, 禁止 jq 读取输入, 在用 jq 生成 json 字符串时需要用这个选项把输入置空. –arg name value, 定义变量 Named arguments are also available to the jq program as $ARGS.named. https://stackoverflow.com/questions/48470049/build-a-json-string-with-bash-variables ...

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

docker 网络

docker 网络 安装 Docker 时,它会自动创建 3 个网络。可以使用 docker network ls 命令列出这些网络。 $ docker network ls NETWORK ID NAME DRIVER 7fca4eb8c647 bridge bridge 9f904ee27bf5 none null cf03ee007fb4 host host 运行一个容器时,可以使用 the -net 标志指定您希望在哪个网络上运行该容器。 bridge 网络表示所有 Docker 安装中都存在的 docker0 网络。除非使用 docker run -net=选项另行指定,否则 Docker 守护进程默认情况下会将容器连接到此网络。在主机上使用 ifconfig命令,可以看到此网桥是主机的网络堆栈的一部分。 none 网络在一个特定于容器的网络堆栈上添加了一个容器。该容器缺少网络接口。 host 网络在主机网络堆栈上添加一个容器。您可以发现,容器中的网络配置与主机相同。 用户定义的网络 您可以创建自己的用户定义网络来更好地隔离容器。Docker 提供了一些默认网络驱动程序来创建这些网络。您可以创建一个新 bridge 网络或覆盖一个网络。也可以创建一个网络插件或远程网络并写入您自己的规范中。 您可以创建多个网络。可以将容器添加到多个网络。容器仅能在网络内通信,不能跨网络进行通信。一个连接到两个网络的容器可与每个网络中的成员容器进行通信。当一个容器连接到多个网络时,外部连接通过第一个 (按词典顺序) 非内部网络提供。

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

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