58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
from PIL import Image
|
|
import sys
|
|
|
|
from lib import *
|
|
|
|
IMAGE_COUNT = 8
|
|
IMAGE_FILENAME = 'img/xmsx_%i.png'
|
|
IPV6_SRC = sys.argv[1]
|
|
|
|
OFFSET_LEFT = 0
|
|
OFFSET_TOP = 128
|
|
INTERVAL_FRAMES = 1
|
|
INTERVAL_PIXELS_US = 10
|
|
|
|
########################################
|
|
|
|
|
|
def get_targets(left: int, top: int, image_id: int):
|
|
image = Image.open(IMAGE_FILENAME % image_id)
|
|
for x in range(image.size[0]):
|
|
for y in range(image.size[1]):
|
|
pixel = image.getpixel((x, y))
|
|
if len(pixel) == 1:
|
|
r = g = b = pixel[0]
|
|
elif len(pixel) == 3:
|
|
r, g, b = pixel
|
|
elif len(pixel) == 4:
|
|
r, g, b = pixel[0:3]
|
|
target_ip = f'fdcf:8538:9ad5:3333:{x+left:04x}:{y+top:04x}:11{r:02x}:{g:02x}{b:02x}'
|
|
yield target_ip
|
|
|
|
|
|
TARGETS = []
|
|
for i in range(IMAGE_COUNT):
|
|
new_targets = set(get_targets(OFFSET_LEFT, OFFSET_TOP, i))
|
|
if len(TARGETS):
|
|
new_targets = new_targets - TARGETS[-1]
|
|
TARGETS.append(new_targets)
|
|
|
|
if __name__ == '__main__':
|
|
sock = ICMPv6Socket(IPV6_SRC)
|
|
# Animation
|
|
while True:
|
|
for i in range(IMAGE_COUNT):
|
|
wait_until_time_unit(INTERVAL_FRAMES)
|
|
|
|
print(f'Sending {len(TARGETS[i])} packets for image {i+1}...')
|
|
sock.ping_batch(TARGETS[i], INTERVAL_PIXELS_US)
|
|
|
|
# # Still frame
|
|
# while True:
|
|
# i = 0
|
|
# print(f'Sending {len(TARGETS[i])} packets for image {i+1}...')
|
|
# sock.ping_batch(TARGETS[i])
|
|
|
|
# t = datetime.utcnow()
|
|
# sleep(60 - t.second)
|