不管是做软件开发还是信息安全,理解和用好 socket,是网络编程的基础,是编写与网络相关脚本工具的前提,本章使用 Python 的 socket 模块,创建 TCP 和 UDP 服务端及客户端。并实现了 netcat,TCP 代理等工具,是学习后续知识的铺垫。
作者提到,在目标网络环境下,可能没有开发环境,甚至不会有互联网条件,但是如果目标安装了 Python,利用 Python 随时创建网络通信工具,在内网环境下进行渗透测试,是一个可行的办法。另外,用 Python 开发渗透测试脚本,最重要是为了侦察和攻击的“短平快”,应该简单处理套接字阻塞、套接字异常等问题,注重实现功能,针对性强,弱化开发设计的全面性。
在实现这些工具之前,有必要对网络基础和 Python 的 socket 模块做些更深入的理解,知其所以然,也是补充自己的知识盲点。之后丰富下书中的代码,学以致用。
网络编程基础
互联网的本质就是一系列统一标准的网络协议,就像不同国家的人用英语作为交流的统一标准,网络编程就是按照这些标准的协议规则解决网络通信的问题。按照功能不同,网络协议中最重要的是 OSI 七层协议,或 TCP/IP 五层/四层 协议。
维基上有张图,很好的解释了在网络上的两个主机是如何通信的。
Two Internet hosts connected via two routers and the corresponding layers used at each hop. The application on each host executes read and write operations as if the processes were directly connected to each other by some kind of data pipe. Every other detail of the communication is hidden from each process. The underlying mechanisms that transmit data between the host computers are located in the lower protocol layers.
借助 bing 翻译下,网络上的两个主机是通