34 lines
930 B
Python
34 lines
930 B
Python
from pwn import *
|
|
import numpy as np
|
|
from skyfield.api import load
|
|
import astropy.units
|
|
|
|
satellites = load.tle_file('./stations.txt')
|
|
|
|
ts = load.timescale()
|
|
|
|
r = tubes.remote.remote('where.satellitesabove.me', 5021)
|
|
r.clean()
|
|
r.send('THE_TICKET\n')
|
|
|
|
|
|
r.readuntil('find the correct satellite:')
|
|
t = ts.utc(*[float(x) for x in r.readuntil('\n').decode().strip()[1:-1].split(', ')])
|
|
|
|
r.readuntil('coordinates to find the satellite:')
|
|
eci_coords = np.array([float(x) for x in r.readuntil('\n').decode().strip()[1:-1].split(', ')])
|
|
|
|
match = satellites[np.argmin([np.linalg.norm(s.at(t).position.km-eci_coords) for s in satellites])]
|
|
|
|
for _ in range(3):
|
|
r.readuntil('X coordinate at the time of:')
|
|
new_t = ts.utc(*[float(x)
|
|
for x in r.readuntil('?\n', drop=True).decode().strip()[1:-1].split(', ')])
|
|
print(new_t.utc_jpl())
|
|
|
|
x,y,z = match.at(new_t).position.km
|
|
r.send(f'{x}\n')
|
|
r.send(f'{y}\n')
|
|
r.send(f'{z}\n')
|
|
|
|
r.interactive() |