backlog

Posted by 夏泽民

TCP建立连接是要进行三次握手,但是否完成三次握手后,服务器就处理(accept)呢?



method 接收者

Posted by 夏泽民

Go的类方法中,分为值接收者方法和指针接收者方法 指针类型,能够调用值和指针接收者方法,反之不行;值实现接口类型,能够被值和指针调用;反之不行; 函数返回值(没有值向指针隐式转换)和实现接口的时候需要注意; 值方法和指针方法



SYN-Cookie

Posted by 夏泽民

预防半连接攻击,SYN-Cookie是一种有效的机制,它的基本原理非常简单,那就是“完成三次握手前不为任何一个连接分配任何资源 1.编码信息 将一些本应该在本地保存的信息编码到返回给客户端的SYN-ACK的初始化序列号或者时间戳里面。握手尚未完成不分配任何资源(Linux即不分配request结构体)。 2.解码信息 等到客户端的ACK最终到来的时候,再从ACK序列号里面解码出保存的信息。 3.建立连接 利用第2步解码出来的信息建立一个TCP连接,此时因为握手已经完成,可以分配资源了。 编码过程图示 解码过程图示 通过上面的编码解码过程中好像没有什么check/compare操作,一般而言,对于类似HASH或者摘要的算法,都需要对信息进行比对,比如对一段信息生产一个摘要,为了确保该信息没有被篡改,需要再次使用相同的算法生成摘要,如果两段摘要的值不同,说明信息被篡改了!对于上面的算法,在生产Cookie的时候,我们注意到使用hash算法对元组生产了一个值,但是对于解码的过程,它并没有再次计算这个值与原始携带的值做比对,这样合理吗?         这事实上是Linux的一个hack!Linux将一段data做了限定,比如它的值严格在0-7之间,将这个data一同参与运算,而不是仅仅将其编码到固定的某几个bit,算法寄希望于:如果数据是伪造的或者被篡改了,那么解码出来的data的值仍然处在规定的严格区间里的可能性微乎其微! 24比特数据的编码和解码的过程:



SO_REUSEADDR SO_REUSEPORT

Posted by 夏泽民

每次kill掉该服务器进程并重新启动的时候,都会出现bind错误:error:98,Address already in use。然而再kill掉该进程,再次重新启动的时候,就bind成功了。 端口正在被使用,并处于TCP中的TIME_WAIT状态。再过两分钟,我再执行命令netstat -an|grep 9877



lsof netstat

Posted by 夏泽民

lsof命令只能以root的权限执行 用法如下:

  1. 显示开启文件abc.txt的进程 lsof abc.txt
  2. 显示22端口现在被什么程序占用 lsof -i 22
  3. 显示abc进程现在正在打开的文件 lsof -c abc
  4. 显示归属gid的进程情况 lsof -g gid
  5. 显示指定目录下被进程开启的文件,不会遍历该目录下的所有子目录 lsof +d /usr/local/
  6. 显示指定目录下被进程开启的文件,会遍历该目录下得所有子目录 lsof +D /usr/local/
  7. 显示使用fd为4的进程 lsof -d 4
  8. 不进行域名解析,缺省会进行,比较慢 lsof -n
  9. 查看进程号为12的进程打开了哪些文件 lsof -p 12
  10. 让lsof重复执行,缺省15s刷新 lsof +|-r [t] -r, lsof会永远执行,直到被中断 +r, lsof会一直执行,直到没可显示的内容 Example: 查看目前ftp连接的情况:lsof -i tcp@test.com:ftp -r
  11. 列出打开文件的大小,如果大小为0,则空 lsof -s
  12. 以UID,列出打开的文件 lsof -u username
  13. 显示符合条件的进程情况 语法:lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 46 – IPV4 or IPV6 protocol – TCP or UDP hostname – Internet host name hostaddr – IP地址 service – /etc/service中的service name(可多选) port – 端口号(可多选) Example: TCP:25 - TCP and port 25 @1.1.1.1 - IP 1.1.1.1 tcp@test.com - TCP protocol, ftp service netstat可以不在root权限下运行
  14. 查看进程占用的端口号 netstat -anp [root@nbatest ~]# netstat -anp | grep syslog //进程名 udp 0 0 0.0.0.0:514 0.0.0.0:* 31483/syslogd
    netstat -anp [root@nbatest ~]# netstat -anp | grep 514 //port口 udp 0 0 0.0.0.0:514 0.0.0.0:* 31483/syslogd


Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required