Closed damluk closed 2 months ago
Hi,
The use case seems quite limited to me (to be implemented directly in this library).
From what I understand, you want to send different payloads for each of your requests. Given that an ICMPRequest
object is single-use, passing a payload generator to ICMPRequest
is of no interest. To achieve what you want, you would need to implement your own ping function where each request could have different payloads.
You could use something like:
from icmplib import ICMPv4Socket, ICMPRequest, Host, ICMPLibError
def generate_payload():
# Your code here
def ping(address, count=4, interval=1, timeout=2, id=0, source=None,
privileged=True, **kwargs):
packets_sent = 0
rtts = []
with ICMPv4Socket(source, privileged) as sock:
for sequence in range(count):
if sequence > 0:
sleep(interval)
request = ICMPRequest(
destination=address,
id=id,
sequence=sequence,
payload=generate_payload(),
**kwargs)
try:
sock.send(request)
packets_sent += 1
reply = sock.receive(request, timeout)
reply.raise_for_status()
rtt = (reply.time - request.time) * 1000
rtts.append(rtt)
except ICMPLibError:
pass
return Host(address, packets_sent, rtts)
Does this meet your needs?
I will try it, thanks.
I would like to have more influence on packet payload for a ping sequence. I can think of at least two ways:
ICMPRequest
.ICMPRequest
, defaulting toICMPRequest
.