networking - 格式错误的 IP Scapy
问题描述
我的目标是开发一个脚本,可以将 IP 数据包发送到任何主机到不同子网中的任何其他主机。现在一切似乎都在工作,除了我的 IP 数据包格式不正确,所以 scapy 无法发送它。
def sendIPMessage(interfaceName, dst_ip, routerIP, message):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", port))
src_addr = get_mac_address(interface=interfaceName)
my_ip = get_ip_address(interfaceName)
netmask = ipaddress.ip_address(dst_ip) in ipaddress.ip_network(my_ip)
if netmask is True: # if dst is in the same network
arp_MAC = sendArpMesage(interfaceName, dst_ip)
else:
arp_MAC = sendArpMesage(interfaceName, routerIP)
ether = Ether(src=str(src_addr), dst=str(arp_MAC))
print(ether.show())
size = len(message) + 14
ip = IP(src=my_ip, dst=dst_ip, proto=17, ihl=5, len=size, ttl=5, chksum=0)
#print(ip.show())
payload = Raw(message)
packet = ether / ip / msg
del packet[IP].chksum
packet = packet.__class__(bytes(packet)) # same as packet.show2()
print(packet.show())
success = send(packet)
if success is not None:
print(success.show)
else:
print("success is None")
这是 show() 信息
Begin emission:
*Finished sending 1 packets.
Received 1 packets, got 1 answers, remaining 0 packets
###[ Ethernet ]###
dst = 4e:98:22:86:f6:75
src = 00:00:00:00:00:11
type = LOOP
None
###[ Ethernet ]###
dst = 4e:98:22:86:f6:75
src = 00:00:00:00:00:11
type = IPv4
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 28
id = 1
flags =
frag = 0
ttl = 5
proto = udp
chksum = 0xe9c2
src = 192.168.1.101
dst = 10.0.0.1
\options \
###[ UDP ]###
sport = 21608
dport = 26995
len = 8297
chksum = 0x7320
###[ Padding ]###
load = 'a test'
None
.
Sent 1 packets.
success is None
我不确定问题是否是因为校验和值不对齐,但任何创建此数据包的帮助将不胜感激
解决方案
推荐阅读
- mysql - SQL SELECT everthing 值为 5 但未指定从哪一列
- tensorflow - 如何在张量流数据集 api 中添加随机操作?
- arrays - Perl 数组唯一元素
- react-native - 从导航标题调用时反应原生动画不起作用
- flutter - 此函数的返回类型为 'Future
'.尝试添加return语句 - javascript - 更改选项时未检测到 JS,变量保持未定义
- python - 我如何检查一组字符串中的所有字符是否每个索引都是唯一的?
- python - 获取数组中的复选框状态 - Tkinter
- python - 无论如何在pygame中递归地做到这一点?
- angular - 直接在类上访问主题或使用getter有什么区别