《Python 黑帽子》学习笔记 - netcat 介绍1- Day 5

netcat 被称为网络瑞士军刀,是一个功能强大设计优雅的网络工具。

netcat 介绍

netcat 是什么,引用 wiki 的说明如下:

Netcat (often abbreviated to nc) is a computer networking utility for reading from and writing to network connections using TCP or UDP. Netcat is designed to be a dependable back-end that can be used directly or easily driven by other programs and scripts. At the same time, it is a feature-rich network debugging and investigation tool, since it can produce almost any kind of connection its user could need and has a number of built-in capabilities.

Its list of features includes port scanning, transferring files, and port listening, and it can be used as a backdoor.

自己解释下,即:

  • netcat 是一个计算机网络工具,可以读取和写入使用 TCP 或 UDP 的网络连接数据。
  • netcat 被开发为一个可靠的后台工具,可以被其他程序和脚本直接或间接地使用。
  • netcat 也是一个功能丰富的网络调试和检查工具,可以生成几乎所有你想要的网络连接。
  • netcat 拥有很多内建功能。包括但不限于端口扫描,文件传输,端口监听,以及后门等功能。

netcat 功能

能够用好 netcat,其实可以解决渗透测试的很多问题。下面对其功能做些测试。

HTTP 请求

netcat 可以通过发送 HTTP request 给 Web 服务器,获取 Web 返回的 response 和页面数据。从而知道 Web 服务器的容器,脚本语言,以及其他 Banner 信息,很简单就可以做些渗透测试的信息收集。

要获取返回的 response 用 HEAD 请求。

echo -ne "HEAD / HTTP/1.1\r\nHost:192.168.1.3\r\n\r\n" | nc 192.168.1.3 80.

要获取页面数据一般用 GET 请求。

echo -ne "GET / HTTP/1.1\r\nHost:192.168.1.3\r\n\r\n" | nc 192.168.1.3 80.

这里的 echo 命令会将输入的字符串送往标准输出,通过管道传给 nc 命令,即为 nc 命令的输入。echo 输出的字符串间以空白字符隔开, 并在最后加上换行号,加上 -n 表示不要在最后自动换行,加上 -e 表示会将 \r \n 处理为换行符。

nc-http-request

端口扫描

netcat 可以用于简单的端口扫描,如:

nc -v -n

### 关于《Python黑帽子第二版》中的Netcat实现 在网络安全工具中,`netcat`是一个非常重要的网络实用程序。通过使用Python来重新构建这个功能强大的工具,《Python黑帽子第二版》提供了详细的指导以及源码实例。 书中提到创建一个简单的TCP客户端和服务端的例子[^1]: #### 创建TCP服务器 ```python import socket def tcp_server(host='localhost', port=9999): """启动一个基本的TCP服务器""" with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((host, port)) s.listen(5) print(f'[*] Listening on {host}:{port}') while True: client_socket, addr = s.accept() print(f'[+] Accepted connection from {addr[0]}:{addr[1]}') request = client_socket.recv(1024) print(f"[++] Received: {request.decode('utf-8')}") client_socket.send(b"ACK!") client_socket.close() if __name__ == '__main__': tcp_server() ``` 此脚本会监听指定地址上的连接请求,并处理来自客户端的消息。当接收到数据包时,它将打印消息并回复确认信息给发送者。 #### 构建TCP客户端 为了与上述服务端通信,可以编写如下所示的一个简易客户端: ```python import socket def tcp_client(target_host="127.0.0.1", target_port=9999): """向目标主机发起TCP连接""" with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client: client.connect((target_host, target_port)) client.send(b"GET / HTTP/1.1\r\nHost: google.com\r\n\r\n") response = client.recv(4096) print(response.decode()) if __name__ == "__main__": tcp_client() ``` 这段代码尝试连接到特定的目标机器和端口上,模拟HTTP GET请求的行为并向对方发送一些数据;之后读取响应内容显示出来。 这两个例子展示了如何利用Python快速搭建起基础版本的Netcat工具。当然,在实际应用过程中还需要考虑更多因素如错误处理机制、多线程支持等特性以增强其健壮性和功能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值