一、PmapAnon是什麼
PmapAnon是一款端口掃描工具,可以掃描指定IP地址的開放端口。它可以用來檢查目標主機上哪些服務正在運行,並且可以分析服務的漏洞。開發者使用了C語言和Python實現了這個功能強大的工具。
二、PmapAnon的使用方法
下載PmapAnon之後,直接運行pmapanon命令,給出目標主機的IP地址即可開始進行端口掃描。用戶也可以使用一些參數來控制掃描的方式和範圍。
./pmapanon [options] target_ip
常用參數:
-t time_out: 設置超時時間
-p port_range: 設置掃描的端口範圍,默認為1-65535
三、PmapAnon的實現原理
端口掃描是通過網絡連接來實現的,PmapAnon是通過構造各種TCP/UDP數據包進行掃描的。它會對目標主機的所有端口進行嘗試,並且根據返回的數據包確定端口是否開放。
PmapAnon掃描端口的方法有三種:
- 全連接掃描:試圖完成與目標主機的三次握手,如果能成功建立連接,則端口開放。
- 半連接掃描:通過發送SYN數據包來嘗試建立連接,如果目標主機返回了SYN-ACK數據包,則端口開放。
- UDP掃描:發送UDP數據包,如果目標主機無法正確響應則端口開放。
四、PmapAnon的代碼實現
PmapAnon的主要實現由C語言和Python完成。以下是C語言實現的無連接掃描方法。
struct sniff_ip *ip; // IP頭部
struct sniff_tcp *tcp; // TCP頭部
int sockfd, n;
char buf[MAXLINE];
// 填充IP頭部
ip = (struct sniff_ip *) buf;
...
// 填充TCP頭部
tcp = (struct sniff_tcp *) (buf + IP_HL(ip)*4);
tcp->th_sport = htons(SRC_PORT); // 源端口(隨機選擇)
tcp->th_dport = htons(dst_port); // 目標端口
...
// 發送數據包
if ((n = sendto(sockfd, buf, IP_HL(ip)*4+tcp->th_off*4, 0,
(struct sockaddr *) &sa, sizeof(sa))) < 0)
err_sys("sendto error");
Python實現的使用Scapy庫構造IP數據包的示例代碼如下。
from scapy.all import *
# 構造TCP數據包
dst_ip = "192.168.1.1"
dst_port = 80
src_port = RandShort()
packet = IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags="S")
ans = sr1(packet, timeout=1, verbose=0) // 發送並等待響應
if ans is None: // 無響應
print("Filtered")
elif ans.haslayer(TCP): // 有響應
if ans[TCP].flags == 18: // 目標主機返回SYN-ACK
print("Open")
elif ans[TCP].flags == 20: // 目標主機返回RST
print("Closed")
else:
print("Unexpected packet")
else:
print("Unexpected packet")
五、PmapAnon的優缺點
PmapAnon是一款強大的端口掃描工具,可以用來發現目標主機的漏洞和安全問題。它可以在短時間內掃描完一個主機的所有端口。
與此同時,PmapAnon也有一些明顯的缺點。首先,它不能完全保證掃描的準確性。由於目標主機可能會暫時關閉端口,導致掃描結果不準確。其次,PmapAnon需要很長時間才能掃描完整個IP地址空間,因此掃描大規模網絡時需要考慮效率問題。
六、結語
端口掃描是一項非常重要的安全工作,可以幫助我們發現目標主機的安全漏洞。PmapAnon是一款功能強大的端口掃描工具,它通過構造各種TCP/UDP數據包來實現端口掃描。開源代碼已經公開,有興趣的朋友可以參考實現方法,進一步了解網絡安全。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/192419.html