我想用python响应ping,我已经使用以下命令echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all关闭了linux中的默认ping响应器。
现在我想使用我自己的python脚本进行响应,最终目标是创建一个ping防火墙,但现在,我的目标是以某种方式响应ping,并自定义延迟,例如,当我ping我的服务器时,它将在90ms或任何自定义时间内响应ping。
这是我到现在为止的代码:
import socket
import struct
def listen():
s = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_ICMP)
s.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1)
while 1:
data, addr = s.recvfrom(1508)
icmp_header = data[20:28]
type, code, checksum, p_id, sequence = struct.unpack('bbHHh', icmp_header)
listen()发布于 2021-07-09 13:53:21
对于每个人,我已经找到了解决方案!
虽然它只能在linux上运行,但对我来说已经足够好了,
结果是,我可以为icmp创建一个python防火墙,添加这个延迟,您可以用它做更多的事情,不管怎样,这里是解决方案。
首先,我运行以下命令,使NFQUEUE成为对icmp数据包进行判断的权威:iptables -A INPUT -p icmp -j NFQUEUE --queue-num 1
然后是下面的python代码:
from struct import pack
from scapy.all import IP,ICMP,TCP,Raw
import os
os.system("iptables -A INPUT -p icmp -j NFQUEUE --queue-num 1")
from scapy.utils import *
import time
from netfilterqueue import NetfilterQueue
import socket
import threading
import random
from string import digits
import time
import threading
def modify_icmp(packet, src):
if not src=="127.0.0.1":
time.sleep(0.1)
packet.accept()
def accept_pkt(packet):
packet.accept()
def modify(packet):
pkt = IP(packet.get_payload())
packet.set_payload(bytes(pkt))
coming_from = pkt.src
going_to = pkt.dst
if pkt.haslayer(ICMP):
threading.Thread(target=modify_icmp, args=(packet,coming_from)).start()
nfqueue = NetfilterQueue()
nfqueue.bind(1, modify)
try:
nfqueue.run()
except KeyboardInterrupt:
pass注意:仅当从您自己的计算机以外的计算机执行pinging操作时,该命令才有效
例如: pinging 127.0.0.1不会增加延迟
kritagya@v0ldemrt - ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=1.66 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=1.74 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=1.89 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=1.64 ms但是当我从另一台机器ping我自己的机器时,你可以看到:
ping 192.168.29.102
PING 192.168.29.102 (192.168.29.102) 56(84) bytes of data.
64 bytes from 192.168.29.102: icmp_seq=1 ttl=64 time=102 ms
64 bytes from 192.168.29.102: icmp_seq=2 ttl=64 time=102 ms
64 bytes from 192.168.29.102: icmp_seq=3 ttl=64 time=102 ms
64 bytes from 192.168.29.102: icmp_seq=4 ttl=64 time=103 ms
64 bytes from 192.168.29.102: icmp_seq=5 ttl=64 time=102 ms它增加了延迟
https://stackoverflow.com/questions/68310357
复制相似问题