Hoi allemaal,
Ik ben bezig met een CTFje te schrijven (normaal doe ik ze) en ik ben nu eens met sockets aan het pielen in Python. Punt is dat ik daar nog nooit wat mee gedaan heb en niet voor elkaar krijg wat ik wil.
Mijn CTF doet alsof hij een number station is, op bepaalde momenten (elke paar minuten) moet hij data sturen naar alle clients. Soms is het dus ook even stil.
Het aantal clients gaat niet gek hoog zijn, en performance is dus geen issue. Wel is het zo dat omdat het soms stil is ik geen timeouts wil hebben en de clients zo simpel mogelijk wil houden (lees mensen moeten zelf maar wat in elkaar beunen met netcat/socat/python).
Nu wil je bij een reguliere TCP verbinding telkens data heen en weer sturen. Dat wil ik niet doen, mensen moeten gewoon kunnen luisteren. Ik heb het nu lokaal prima werkend gekregen met deze opstelling:
En dan met krijg ik netjes elke seconde wat data binnen.
Maar goed, dan stuur ik zelf gericht naar mijn socat de data terwijl ik het eigenlijk omgedraaid wil. Ik heb UDP gekozen omdat ik dan niet over handshakes enzo hoef na te denken, maar iets in me zegt me dat me dit hier op kan breken (hoe weet de server welke clients er luisteren...).
Dan maar TCP?
Het verveldende met een TCP-socket in dit soort voorbeelden (https://docs.python.org/3/howto/sockets.html) is dat je telkens moet wachten tot de client je data heeft gestuurd. Ik wil eigenlijk dat de client helemaal niets hoeft te zenden als de connectie er eenmaal is.
Als alternatief zou ik op het netwerk kunnen broadcasten maar dat vind ik niet zo supersjiek bij een CTF. Kan iemand me een duw de goeie kant op geven?
Ik ben bezig met een CTFje te schrijven (normaal doe ik ze) en ik ben nu eens met sockets aan het pielen in Python. Punt is dat ik daar nog nooit wat mee gedaan heb en niet voor elkaar krijg wat ik wil.
Mijn CTF doet alsof hij een number station is, op bepaalde momenten (elke paar minuten) moet hij data sturen naar alle clients. Soms is het dus ook even stil.
Het aantal clients gaat niet gek hoog zijn, en performance is dus geen issue. Wel is het zo dat omdat het soms stil is ik geen timeouts wil hebben en de clients zo simpel mogelijk wil houden (lees mensen moeten zelf maar wat in elkaar beunen met netcat/socat/python).
Nu wil je bij een reguliere TCP verbinding telkens data heen en weer sturen. Dat wil ik niet doen, mensen moeten gewoon kunnen luisteren. Ik heb het nu lokaal prima werkend gekregen met deze opstelling:
code:
1
2
3
4
5
6
7
8
| while True: MESSAGE='a' print ( MESSAGE) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP sock.sendto(MESSAGE, (127.0.0.1, 1602)) else: print(seconds, "NOTHING SENT") time.sleep(1) |
En dan met
socat UDP-RECV:1602 STDOUT
Maar goed, dan stuur ik zelf gericht naar mijn socat de data terwijl ik het eigenlijk omgedraaid wil. Ik heb UDP gekozen omdat ik dan niet over handshakes enzo hoef na te denken, maar iets in me zegt me dat me dit hier op kan breken (hoe weet de server welke clients er luisteren...).
Dan maar TCP?
Het verveldende met een TCP-socket in dit soort voorbeelden (https://docs.python.org/3/howto/sockets.html) is dat je telkens moet wachten tot de client je data heeft gestuurd. Ik wil eigenlijk dat de client helemaal niets hoeft te zenden als de connectie er eenmaal is.
Als alternatief zou ik op het netwerk kunnen broadcasten maar dat vind ik niet zo supersjiek bij een CTF. Kan iemand me een duw de goeie kant op geven?
[ Voor 10% gewijzigd door Boudewijn op 06-07-2018 21:43 ]