m0_54724257
2022-06-06 23:55
采纳率: 50%
浏览 54
已结题

关scapy的send函数转发一个dst为自己虚拟网卡的icmp包却无法接收的问题

问题

我在写一个sslvpn,在客户端接收到数据包并把它拆开后,准备scapy的send函数转发一个dst为自己虚拟网卡地址,我的虚拟网卡接收不到自己发出的数据包,并且可以用wireshark抓到自己转发的包

错误代码

def receive(sock):

while True:  
    data=sock.recv(2048)#这个是一个ssl连接后的sock
    pkt = IP(aes.decrypt(data)) #pkt是一个icmp中reply数据包,原来加密在tls的data内
    print(" Inside:{} -->{}".format(pkt.src,pkt.dst))#输出
    send(pkt)

可运行代码但是不是我需要的代码

sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind((IP_A,PORT))

while True:
    data,(ip,port)=sock.recvfrom(2048)
    print("{}:{} -->{}:{}".format(ip,port,IP_A,PORT))
    pkt = IP(aes.decrypt(data)) 
    print(" Inside:{} -->{}".format(pkt.src,pkt.dst))
    send(pkt)

运行结果

ping不通并且wireshark抓到五个数据包,在TLS中发送时会把icmp封装进入data内,到.11的时候拆开转发
TLS 10.9.0.5->10.9.0.11
TCP 10.9.0.11->10.9.0.5
TLS 10.9.0.11->10.9.0.5
TCP 10.9.0.5->10.9.0.11
ICMP 192.168.60.6->192.168.53.99#53.99是本机虚拟网卡地址,60.6是我ping的目标地址

我的解答思路和尝试过的方法

我觉得是在send的时候把拆开后的icmp报文发送到1和2的中间网段了,所以才会被监测到,正常应该直接通过127.0.01回环直接接收走

2条回答 默认 最新

相关推荐 更多相似问题