小白网-奉贤部落-奉贤免费信息发布平台
标题:
网络安全里四层发现的工具介绍
[打印本页]
作者:
[db:作者]
时间:
2025-7-26 13:06
标题:
网络安全里四层发现的工具介绍
我前面已经介绍了第二层和第三层发现。今天我就分享一些第四层发现的工具。
第二层和第四层中的网络发现扫描的目的是发现网络中幸存的IP地址。虽然第四层基于TCP和UDP进行扫描,但它不会识别目标端口的状态。
对四层网络的扫描发现,只有四层网络通信用于识别目标IP的生存状态。
发现四层具有这些优点:
可路由和可靠的结果。
不太可能被防火墙过滤掉。
您甚至可以找到过滤了所有端口的主机。当然,也有一些缺点:
基于状态过滤的防火墙可以过滤扫描。
全端口扫描速度慢。据说前面四层发现用的是TCP和UDP。简单来说,大概如下。
TCP:
未经请求的确认-RST
同步-同步/确认、RST直接发送ACK包。一般来说,状态为up的目标主机会返回一个RST包来终止这条异常的TCP链路;您也可以发送正常的SYN数据包。如果目标主机返回SYN/ACK或SRT数据包,就可以证明目标主机处于运行状态。
UDP:
ICMP端口无法到达,并且永远消失了。如果目的IP up,UDP目的端口关闭,目的主机会返回一个目的端口不可达的数据包,可以证明目的端口up。
TCP和UDP的具体定义和交互逻辑这里就不展开了。如果没有概念,可以上网查一下。还有更详细的解释帖。
需要注意的是,随着网络安全意识的提高,有些服务器其实对扫描做了一些保护。比如收到直接收到ACK的包,就不会返回包,以免被扫描。所以现在扫描的结果只是参考,不要完全相信。
Scapy-TCP演示了使用TCP和Scapy的四层扫描:
Scapy使用tcp进行四层扫描。
收到的响应数据包:
a .显示()
可以看出,返回的分组标志=R指示它是RST。
用一行代码请求:
A = sr1(IP(dst = ' 192 . 168 . 31 . 97 ')/TCP(dport = 80,flags='A '),timeout=1
根据以上解释,您可以使用tcp为四层发现制作一个脚本:
#!/usr/bin/python导入日志记录logging . get logger(' scapy . runtime ')。setLevel(日志记录。ERROR)from scapy . all im
port *if len(sys . argv)!= 2:print('用法。/ack_ping_s
cript.py [/24网络地址]')print('示例。/ACK _ ping _ s
cript . py 172 . 18 . 14 . 0 ')print(' Example将对172.18.14.0/24范围执行TCP ACK ping扫描')sys . exit()address = str(sys . argv[1])IP _ num _ list = address . split(' . ')prefix = ip_num_list[0] +' . '+ ip_num_list[1] +' . '+ ip_num_list[2] +' . 'for addr in range(1,254):A = sr1(IP(dst = prefix+str(addr))/TCP(dport = 333,flags='A '),timeout=0.1,verbose = 0)try:if int(A[TCP]。flags)= = 4:print(prefix+str(addr))除:pass
解释为什么脚本中的20行使用4作为判断:
收到的响应数据包中的标志
从图中可以看出,RST换算成十进制后是4,所以在剧本中用于这样的判断。
在执行之前,您仍然需要更改权限。执行过程是这样的:
python 3 ack _ ping _ s
cript . py 192 . 168 . 31 . 0
scapy-udp使用udp进行四层扫描时,需要设置几乎不使用的端口,因为我们只是通过无法到达的目标端口来检测ip是否有效。
具体用途:
Scapy使用udp进行四层扫描。
如果ip不存在或端口正常打开,则不会收到返回的数据包:
目标ip不存在。
还要编写一个使用udp进行四层发现的脚本:
#!/usr/bin/python导入日志记录logging . get logger(' scapy . runtime ')。setLevel(日志记录。ERROR)from scapy . all im
port *if len(sys . argv)!= 2:print('用法。/udp_ping_s
cript.py [/24网络地址]')print('示例。/UDP _ ping _ s
cript . py 172 . 18 . 14 . 0 ')print(' Example将对172.18.14.0/24范围执行UDP ping扫描')sys . exit()address = str(sys . argv[1])IP _ num _ list = address . split(' . ')prefix = ip_num_list[0] +' . '+ ip_num_list[1] +' . '+ ip_num_list[2] +' . 'for addr in range(1,254):a = sr1(IP(dst = prefix+str(addr))/UDP(dport = 23687),timeout=0.1,verbose = 0)try:if int(a[IP].proto)= = 1:print(prefix+str(addr))除:pass
解释第20行的判断依据:
1代表ICMP
执行结果:
python 3 UDP _ Pinger . py 192 . 168 . 31 . 0
我在scapy中使用tcp和udp做四层发现时,得到的结果有些不同,所以再次提醒大家,扫描结果只能作为参考。
Nmapnmap在三层和四层发现中的作用应该算是主流。当然也有可能是我接触的工具还是比较少的。如果有更好的工具,请推荐给我。接下来,我们来介绍一下nmap在四层发现中的使用。
Nmap使用udp进行四层发现:
nmap 192 . 168 . 31 . 1-254-pu 12345-sn
Nmap使用tcp进行四层发现:
nmap 192 168 . 1 . 1-254-pa 12345-sn
实际上,nmap还为四层发现提供了一些其他参数:
四层发现的参数
在实践中,如果时间充裕,四层发现最好改变几个参数,可能会得到不同的结果,综合比较后的结果会更有参考性。
前一篇文章还说nmap也可以发送ip文档作为参数来扫描文档中指定的ip:
nmap -iL ip.txt -PA123 -sn
HP 3 hp3也可以用于四层发现。如果使用udp,则如下所示:
hp3-UDP 192 . 168 . 31 . 97-p 12345-C1
如果udp用于四层发现,参数传输中的端口也应该使用未打开的端口。
使用hp3编写四层发现脚本:
#!/bin/bashif[" $ # "-ne 1];然后echo '用法。/UDP _ hp3 . sh[/24网络地址]'echo '示例。/UDP _ hp3 . sh 192 . 168 . 31 . 0 'echo '示例将对192.168.31.0/24网络执行UDP ping扫描,并输出到output.txt文件'exitfiprefix = $(echo $ 1 | cut-d '。'-f1-3)for addr in $(seq 1 254);dohp3 $前缀。$ addr-UDP-p 13215-c 1 gt; gtr . txtdo
negrep Unreachable r . txt | cut-d ' '-F5 | cut-d ' = '-F2 gt; gtoutput.txtrm r.txt
hp3使用时不加- udp,即默认使用tcp扫描:
hp3 192 . 168 . 31 . 168-C1
您还可以编写一个使用tcp的hp3脚本:
#!/bin/bashif[" $ # "-ne 1];然后echo '用法。/UDP _ hp3 . sh[/24网络地址]'echo '示例。/UDP _ hp3 . sh 192 . 168 . 31 . 0 'echo '示例将对192.168.31.0/24网络执行UDP ping扫描,并输出到output.txt文件'exitfiprefix = $(echo $ 1 | cut-d '。'-f1-3)for addr in $(seq 1 254);dohp3 $前缀。$ addr-C1 gt; gtr . txtdo
negrep Unreachable r . txt | cut-d ' '-F5 | cut-d ' = '-F2 gt; gtoutput.txtrm r.txt
执行的结果是这样的:
。/TCP _ hp3 . sh 36 . 152 . 44 . 0
这里如果用hp3扫描同一个网段,会自动降级到arp协议,变成二层扫描。通过抓包可以看到,有兴趣可以试试。
欢迎光临 小白网-奉贤部落-奉贤免费信息发布平台 (http://www.ts-xiangyue.com/)
Powered by Discuz! X3.2