为了确保端到端的可靠传输,TCP对所发送出的每个数据包都分配序列编号,当对方收到数据包后则向发送方进行确认,接收方利用序列号来确认数据包的先后顺序,并丢弃重复的数据包。TCP序列号在TCP数据包中占32位字节,有发送序列号SEQS和确认序列号SEQA两种,它们分别对应SYN和ACK两个标志。当SYN置1时,表示所发送的数据包的序列号为SEQS ;当ACK置1时,表示接收方准备接收的数据包的序列号为SEQA 。 ① Xser → Server:SYN(SEQS=ISNC);使用User的IP作为源地址 ② Server → User :SYN(SEQS=ISNS),ACK(SEQA=ISNC+1) ③ Xser → Server:ACK(SEQA=ISNS+1);使用User的IP作为源地址 在这里,Xser以User的身份向服务器发送初始序列号,并置SYN=1,请求与服务器建立连接;当服务器收到该请求后,向User返回应答序列号,如果此时User能正常工作,则认为这是一个非法数据包而终止连接,使攻击者的目的落空,否则,攻击者将继续以User的身份向服务器发送已推测出的确认序列号ISNS+1,并与服务器建立连接,进而可在服务器上行使User的权限,执行相应的操作。 使用这种攻击需要具备两个基本条件:一是能推测出序列号ISNS的值;二是所冒充的可信任主机不能正常工作。其中,最关键的是要推测出由服务器返回的序列号ISNS的值。由服务器返回的这个值可能是个随机数,它通常与被信任主机和服务器间的RTT时间有关,必须经过多次采样和统计分析,才可能推测到这个值。通常,可重复多次与被攻击主机的某个端口(如SMTP)建立正常连接,然后断开,并记录每次连接所设定的ISN值。另外,还需要多次测试可信任主机与服务器间的RTT时间
发现 python 上收集系统信息的著名模块 psutil (https://github.com/giampaolo/psutil)已经有 go 的版本(https://github.com/shirou/gopsutil) 获取进程信息、网络信息、磁盘信息、内存信息、CPU信息 它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系统. go get github.com/shirou/gopsutil
https://blog.golang.org/profiling-go-programs https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programs 假设你手上有个Go语言编写的程序,你打算提升它的性能。目前有一些工具可以为此提供帮助。这些工具能帮你发现包括CPU、IO和内存在内多种类型的热点。所谓热点,是指那些为了能显著提升性能而值得你去关注的地方。有时候这些工具还能帮助你发现程序中主要的性能瑕疵。举个例子,你没必要每次执行SQL查询前都对SQL语句进行参数化解析,你可以将这个准备过程在程序启动时一次完成。再举个例子,当前某个算法的复杂度是O(N²),但其实存在一个复杂度是O(N)的解决方案。为了能发现这些问题,需要理智地检查你在优化分析器中获取到的信息。比如上面提到的第一个问题,你会注意到相当长的时间被花费在了对SQL语句的准备上。