- 关于内网地址判断的基础知识
- 内网地址是在一个局部网络(如家庭网络、企业内部网络)中使用的 IP 地址。常见的内网网段有 10.0.0.0 - 10.255.255.255、172.16.0.0 - 172.31.255.255、192.168.0.0 - 192.168.255.255。
- 实现思路及示例代码
- 以下是一个使用 Python 结合
scapy
库(用于抓包)来实现判断是否为内网地址的示例代码。这里假设你已经安装了scapy
库。
- 以下是一个使用 Python 结合
python
from scapy.all import sniff
import re
def is_internal_ip(ip):
internal_ip_ranges = [
re.compile('^10\.'),
re.compile('^172\.(1[6 - 9]|2[0 - 9]|3[0 - 1])\.'),
re.compile('^192\.168\.')
]
for range in internal_ip_ranges:
if range.match(ip):
return True
return False
def check_internal_network(packets):
ip_dict = {}
for packet in packets:
if packet.haslayer('IP'):
ip = packet['IP'].src
if ip not in ip_dict:
ip_dict[ip] = 1
else:
ip_dict[ip]+=1
if is_internal_ip(ip):
print(f"{ip} is an internal IP.")
else:
print(f"{ip} is an external IP.")
def packet_callback(packet):
return packet
packets = sniff(prn = packet_callback, count = 10)
check_internal_network(packets)
-
在上述代码中:
is_internal_ip
函数用于通过正则表达式判断一个 IP 地址是否属于常见的内网网段。check_internal_network
函数用于处理抓包得到的数据包。它通过一个字典ip_dict
来记录每个 IP 地址出现的次数,同时调用is_internal_ip
函数来判断 IP 地址是否为内网地址。packet_callback
函数是scapy
抓包时的回调函数,这里只是简单返回数据包。- 最后通过
sniff
函数进行抓包(这里设置了只抓 10 个包,可以根据实际需求修改),然后将抓到的包传递给check_internal_network
函数进行处理。
-
如果要指定端口(如 5000 端口)抓包,可以修改
packet_callback
函数如下:
python
def packet_callback(packet):
if packet.haslayer('TCP') and packet['TCP'].dport == 5000:
return packet
return None
- 这样,在抓包过程中就只会处理目标端口为 5000 的 TCP 数据包。请注意,这里只是一个简单的示例,实际应用中可能需要根据具体的网络环境和需求进行更多的调整和优化。