ΠΠ΅ ΡΠ΅ΠΊΡΠ΅Ρ, ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ β ΠΎΡΠ΅Π½Ρ Π²ΡΠ°ΠΆΠ΄Π΅Π±Π½Π°Ρ ΡΡΠ΅Π΄Π°. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ, ΠΎΠ½ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π°ΡΠ°ΠΊΠ°ΠΌ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡΠΌ. ΠΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ΅
Tarpit β ΡΡΠΎ ΠΏΠΎΡΡ-Π»ΠΎΠ²ΡΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ. ΠΡΠ»ΠΈ ΡΡΠΎΡΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΏΠΎΡΡΡ, ΡΠΎ Π±ΡΡΡΡΠΎ Π·Π°ΠΊΡΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ. ΠΠΉ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΡΠ°ΡΠΈΡΡ ΡΠ²ΠΎΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΠΈ ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠ΅ΡΠ²ΡΡΡΡ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ°ΡΡΡ, ΠΈΠ»ΠΈ Π²ΡΡΡΠ½ΡΡ ΡΠ°Π·ΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ.
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ°ΡΠΏΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ. Π’Π΅Ρ
Π½ΠΈΠΊΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ
ΡΠ΅ΡΠ²Π΅ΠΉ. Π ΡΠ΅ΠΉΡΠ°Ρ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΡΡΠΈΡΡ ΠΆΠΈΠ·Π½Ρ ΡΠΏΠ°ΠΌΠ΅ΡΠ°ΠΌ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΠΈΡΠΎΠΊΠΈΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ
IP-Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΏΠΎΠ΄ΡΡΠ΄ (ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π° Π₯Π°Π±ΡΠ΅:
ΠΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΡΠΈΡΠ°Π΄ΠΌΠΈΠ½ΠΎΠ² ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΡΠΈΡ ΠΠ΅Π»Π»ΠΎΠ½Ρ, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π½Π°Π΄ΠΎΠ΅Π»ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° ΡΡΠΈΠΌ Π±Π΅Π·ΠΎΠ±ΡΠ°Π·ΠΈΠ΅ΠΌ β ΠΈ ΠΎΠ½ Π½Π°ΠΏΠΈΡΠ°Π» ΠΌΠ°Π»Π΅Π½ΡΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΊΡ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΠΈΠ»ΠΈΡΡ:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΡΠΏΠΈΡ ΠΎΡΠ½ΠΈΠΌΠ΅Ρ Ρ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠ° Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΡΠ΅ΠΌ Ρ Π²Π°Ρ. ΠΠΎ Π΄Π΅Π»ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ Π² ΡΠ΅ΡΡΡΡΠ°Ρ
. ΠΠ²ΡΠΎΡ
Π ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅ΡΠ²Π΅Ρ Endlessh Π½ΡΠΆΠ½ΠΎ ΡΡΠ°Π²ΠΈΡΡ Π½Π° ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΠΎΡΡ 22, ΠΊΡΠ΄Π° ΠΌΠ°ΡΡΠΎΠ²ΠΎ ΡΡΡΡΠ°ΡΡΡ Ρ ΡΠ»ΠΈΠ³Π°Π½Ρ. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ SSH Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΡ, ΡΡΠΎ ΡΡΠ°Π·Ρ Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π»ΠΎΠ³ΠΎΠ².
ΠΡΠΈΡ ΠΠ΅Π»Π»ΠΎΠ½Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ Π΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Π°Π±Π·Π°Ρ ΠΈΠ· ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ SSH-
.
ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Endlessh: ΠΎΠ½Π° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ RFC 4253, ΡΠΎ Π΅ΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ, Π° ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ SSH-
ΠΈ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ 255 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΠΌΠ²ΠΎΠ» ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ. Π ΠΎΠ±ΡΠ΅ΠΌ, Π²ΡΡ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ 10 ΡΠ΅ΠΊΡΠ½Π΄ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠ°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ°ΡΡΡ, ΡΠ°ΠΊ ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΡΠΈΠ΄Π΅ΡΡ Π² Π»ΠΎΠ²ΡΡΠΊΠ΅ Π²Π΅ΡΠ½ΠΎ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΠΈ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°Ρ. Π Π½Π΅ΠΉ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠΈΡΡΠΎΠ² ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ².
ΠΠ²ΡΠΎΡ ΠΏΠΎΡΡΠ°ΡΠ°Π»ΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠΈΠ»ΠΈΡΠ° ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ»Π° ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ ΡΠ°Π±ΠΎΡΠ°Π»Π° Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠΎΠ² ΠΈ Π΄ΡΡΠ³ΠΈΡ Β«ΡΠΈΡΡΠ΅ΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈΒ», ΠΎΠ½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΠΌΠΎΠ·ΠΈΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ. ΠΠΌΡ ΡΠ΄Π°Π»ΠΎΡΡ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΡΠ°ΡΠΈΠΊ, ΠΈ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π·Π° ΡΡΡΡ ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ Ρ ΠΈΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠ»ΠΈ Π±Ρ ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π» ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π° Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΡΠΎ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ DDoS-Π°ΡΠ°ΠΊΡ, ΠΎΡΠΊΡΡΠ² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΈΡΡΠ΅ΡΠΏΠ°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅. ΠΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ β ΡΠΎΠΆΠ΅ Π½Π΅ Π»ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΄ΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΠ°ΡΠΈΡΡ ΡΠ΅ΡΡΡΡΡ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ.
ΠΠΎΡΡΠΎΠΌΡ ΠΡΠΈΡ ΠΠ΅Π»Π»ΠΎΠ½Ρ Π²ΡΠ±ΡΠ°Π» Π΄Π»Ρ Endlessh ΡΠ°ΠΌΡΠΉ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ: ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ poll(2)
, Π³Π΄Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π² Π»ΠΎΠ²ΡΡΠΊΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡ Π»ΠΈΡΠ½ΠΈΡ
ΡΠ΅ΡΡΡΡΠΎΠ², Π½Π΅ ΡΡΠΈΡΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠΊΠ΅ΡΠ° Π² ΡΠ΄ΡΠ΅ ΠΈ Π΅ΡΡ 78 Π±Π°ΠΉΡ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π² Endlessh. Π§ΡΠΎΠ±Ρ Π½Π΅ Π²ΡΠ΄Π΅Π»ΡΡΡ Π±ΡΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Endlessh ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΎΠΊΠ΅Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΈ Π½Π°ΠΏΡΡΠΌΡΡ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΡ TCP, ΠΈΠ³Π½ΠΎΡΠΈΡΡΡ ΠΏΠΎΡΡΠΈ Π²Π΅ΡΡ ΡΡΠ΅ΠΊ TCP/IP ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡ
ΠΎΠ΄ΡΡΠΈΠΉ Π±ΡΡΠ΅Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π°Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ.
ΠΠ²ΡΠΎΡ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
import asyncio
import random
async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % random.randint(0, 2**32))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 2222)
async with server:
await server.serve_forever()
asyncio.run(main())
Asyncio ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ°ΡΠΏΠΈΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠ°Ρ Π»ΠΎΠ²ΡΡΠΊΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΎΠ² ΠΏΠΎΠ΄Π²Π΅ΡΠΈΡ Firefox, Chrome ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ HTTP-ΡΠ΅ΡΠ²Π΅ΡΡ:
import asyncio
import random
async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (header, value))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 8080)
async with server:
await server.serve_forever()
asyncio.run(main())
Π’Π°ΡΠΏΠΈΡ β ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π½Π°ΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-Ρ
ΡΠ»ΠΈΠ³Π°Π½ΠΎΠ². ΠΡΠ°Π²Π΄Π°, Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΡΠΊ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΏΡΠΈΠ²Π»Π΅ΡΡ ΠΈΡ
Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡΠΎ-ΡΠΎ
Π₯Π°Π±Ρ:
Python, ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ, Π‘ΠΎΡΡ, Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ΅ΡΠΊΠΈ:
SSH, Endlessh, tarpit, ΡΠ°ΡΠΏΠΈΡ, Π»ΠΎΠ²ΡΡΠΊΠ°, asycio
ΠΠΎΠ²ΡΡΠΊΠ° (ΡΠ°ΡΠΏΠΈΡ) Π΄Π»Ρ Π²Ρ
ΠΎΠ΄ΡΡΠΈΡ
SSH-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ
ΠΠ΅ ΡΠ΅ΠΊΡΠ΅Ρ, ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ β ΠΎΡΠ΅Π½Ρ Π²ΡΠ°ΠΆΠ΄Π΅Π±Π½Π°Ρ ΡΡΠ΅Π΄Π°. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ, ΠΎΠ½ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π°ΡΠ°ΠΊΠ°ΠΌ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡΠΌ. ΠΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ΅
Tarpit β ΡΡΠΎ ΠΏΠΎΡΡ-Π»ΠΎΠ²ΡΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ. ΠΡΠ»ΠΈ ΡΡΠΎΡΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΏΠΎΡΡΡ, ΡΠΎ Π±ΡΡΡΡΠΎ Π·Π°ΠΊΡΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ. ΠΠΉ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΡΠ°ΡΠΈΡΡ ΡΠ²ΠΎΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΠΈ ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠ΅ΡΠ²ΡΡΡΡ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ°ΡΡΡ, ΠΈΠ»ΠΈ Π²ΡΡΡΠ½ΡΡ ΡΠ°Π·ΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ.
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ°ΡΠΏΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ. Π’Π΅Ρ
Π½ΠΈΠΊΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ
ΡΠ΅ΡΠ²Π΅ΠΉ. Π ΡΠ΅ΠΉΡΠ°Ρ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΡΡΠΈΡΡ ΠΆΠΈΠ·Π½Ρ ΡΠΏΠ°ΠΌΠ΅ΡΠ°ΠΌ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΠΈΡΠΎΠΊΠΈΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ
IP-Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΏΠΎΠ΄ΡΡΠ΄ (ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π° Π₯Π°Π±ΡΠ΅:
ΠΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΡΠΈΡΠ°Π΄ΠΌΠΈΠ½ΠΎΠ² ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΡΠΈΡ ΠΠ΅Π»Π»ΠΎΠ½Ρ, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π½Π°Π΄ΠΎΠ΅Π»ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° ΡΡΠΈΠΌ Π±Π΅Π·ΠΎΠ±ΡΠ°Π·ΠΈΠ΅ΠΌ β ΠΈ ΠΎΠ½ Π½Π°ΠΏΠΈΡΠ°Π» ΠΌΠ°Π»Π΅Π½ΡΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΊΡ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΠΈΠ»ΠΈΡΡ:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΡΠΏΠΈΡ ΠΎΡΠ½ΠΈΠΌΠ΅Ρ Ρ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠ° Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΡΠ΅ΠΌ Ρ Π²Π°Ρ. ΠΠΎ Π΄Π΅Π»ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ Π² ΡΠ΅ΡΡΡΡΠ°Ρ
. ΠΠ²ΡΠΎΡ
Π ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅ΡΠ²Π΅Ρ Endlessh Π½ΡΠΆΠ½ΠΎ ΡΡΠ°Π²ΠΈΡΡ Π½Π° ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΠΎΡΡ 22, ΠΊΡΠ΄Π° ΠΌΠ°ΡΡΠΎΠ²ΠΎ ΡΡΡΡΠ°ΡΡΡ Ρ ΡΠ»ΠΈΠ³Π°Π½Ρ. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ SSH Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΡ, ΡΡΠΎ ΡΡΠ°Π·Ρ Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π»ΠΎΠ³ΠΎΠ².
ΠΡΠΈΡ ΠΠ΅Π»Π»ΠΎΠ½Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ Π΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Π°Π±Π·Π°Ρ ΠΈΠ· ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ SSH-
.
ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Endlessh: ΠΎΠ½Π° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ RFC 4253, ΡΠΎ Π΅ΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ, Π° ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ SSH-
ΠΈ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ 255 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΠΌΠ²ΠΎΠ» ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ. Π ΠΎΠ±ΡΠ΅ΠΌ, Π²ΡΡ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ 10 ΡΠ΅ΠΊΡΠ½Π΄ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠ°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ°ΡΡΡ, ΡΠ°ΠΊ ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΡΠΈΠ΄Π΅ΡΡ Π² Π»ΠΎΠ²ΡΡΠΊΠ΅ Π²Π΅ΡΠ½ΠΎ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΠΈ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°Ρ. Π Π½Π΅ΠΉ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠΈΡΡΠΎΠ² ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ².
ΠΠ²ΡΠΎΡ ΠΏΠΎΡΡΠ°ΡΠ°Π»ΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠΈΠ»ΠΈΡΠ° ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ»Π° ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ ΡΠ°Π±ΠΎΡΠ°Π»Π° Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠΎΠ² ΠΈ Π΄ΡΡΠ³ΠΈΡ Β«ΡΠΈΡΡΠ΅ΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈΒ», ΠΎΠ½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΠΌΠΎΠ·ΠΈΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ. ΠΠΌΡ ΡΠ΄Π°Π»ΠΎΡΡ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΡΠ°ΡΠΈΠΊ, ΠΈ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π·Π° ΡΡΡΡ ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ Ρ ΠΈΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠ»ΠΈ Π±Ρ ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π» ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π° Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΡΠΎ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ DDoS-Π°ΡΠ°ΠΊΡ, ΠΎΡΠΊΡΡΠ² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΈΡΡΠ΅ΡΠΏΠ°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅. ΠΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ β ΡΠΎΠΆΠ΅ Π½Π΅ Π»ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΄ΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΠ°ΡΠΈΡΡ ΡΠ΅ΡΡΡΡΡ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ.
ΠΠΎΡΡΠΎΠΌΡ ΠΡΠΈΡ ΠΠ΅Π»Π»ΠΎΠ½Ρ Π²ΡΠ±ΡΠ°Π» Π΄Π»Ρ Endlessh ΡΠ°ΠΌΡΠΉ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ: ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ poll(2)
, Π³Π΄Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π² Π»ΠΎΠ²ΡΡΠΊΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡ Π»ΠΈΡΠ½ΠΈΡ
ΡΠ΅ΡΡΡΡΠΎΠ², Π½Π΅ ΡΡΠΈΡΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠΊΠ΅ΡΠ° Π² ΡΠ΄ΡΠ΅ ΠΈ Π΅ΡΡ 78 Π±Π°ΠΉΡ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π² Endlessh. Π§ΡΠΎΠ±Ρ Π½Π΅ Π²ΡΠ΄Π΅Π»ΡΡΡ Π±ΡΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Endlessh ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΎΠΊΠ΅Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΈ Π½Π°ΠΏΡΡΠΌΡΡ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΡ TCP, ΠΈΠ³Π½ΠΎΡΠΈΡΡΡ ΠΏΠΎΡΡΠΈ Π²Π΅ΡΡ ΡΡΠ΅ΠΊ TCP/IP ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡ
ΠΎΠ΄ΡΡΠΈΠΉ Π±ΡΡΠ΅Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π°Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ.
ΠΠ²ΡΠΎΡ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
import asyncio
import random
async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % random.randint(0, 2**32))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 2222)
async with server:
await server.serve_forever()
asyncio.run(main())
Asyncio ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ°ΡΠΏΠΈΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠ°Ρ Π»ΠΎΠ²ΡΡΠΊΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΎΠ² ΠΏΠΎΠ΄Π²Π΅ΡΠΈΡ Firefox, Chrome ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ HTTP-ΡΠ΅ΡΠ²Π΅ΡΡ:
import asyncio
import random
async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (header, value))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 8080)
async with server:
await server.serve_forever()
asyncio.run(main())
Π’Π°ΡΠΏΠΈΡ β ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π½Π°ΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-Ρ
ΡΠ»ΠΈΠ³Π°Π½ΠΎΠ². ΠΡΠ°Π²Π΄Π°, Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΡΠΊ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΏΡΠΈΠ²Π»Π΅ΡΡ ΠΈΡ
Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡΠΎ-ΡΠΎ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com