αž’αž“αŸ’αž‘αžΆαž€αŸ‹ (tarpit) αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ SSH αž…αžΌαž›

αžœαžΆαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžšαžΏαž„αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž‘αŸαžŠαŸ‚αž›αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαž‚αžΊαž‡αžΆαž”αžšαž·αž™αžΆαž€αžΆαžŸαž’αžšαž·αž—αžΆαž–αžαŸ’αž›αžΆαŸ†αž„αŸ” αžŠαžšαžΆαž”αžŽαžΆαž’αŸ’αž“αž€αž›αžΎαž€αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αžœαžΆαž“αžΉαž„αž‘αž‘αž½αž›αžšαž„αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†αž—αŸ’αž›αžΆαž˜αŸ— αž“αž·αž„αž€αžΆαžšαžŸαŸ’αž€αŸαž“αž…αŸ’αžšαžΎαž“αŸ” αž§αž‘αžΆαž αžšαžŽαŸ Honeypot αž–αžΈαžŸαž“αŸ’αžαž·αžŸαž»αž αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ‰αžΆαž“αŸ‹αžŸαŸ’αž˜αžΆαž“αž‘αŸ†αž αŸ†αž“αŸƒαž…αžšαžΆαž…αžšαžŽαŸαžŸαŸ†αžšαžΆαž˜αž“αŸαŸ‡αŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‡αžΆαž˜αž’αŸ’αž™αž˜ 99% αž“αŸƒαž…αžšαžΆαž…αžšαž’αžΆαž…αž‡αžΆαž–αŸ’αž™αžΆαž”αžΆαž‘αŸ”

Tarpit αž‚αžΊβ€‹αž‡αžΆβ€‹αž…αŸ’αžšαž€β€‹αž’αž“αŸ’αž‘αžΆαž€αŸ‹β€‹αžŠαŸ‚αž›β€‹αž”αŸ’αžšαžΎβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž–αž“αŸ’αž™αžΊαžβ€‹αž€αžΆαžšβ€‹αžαž—αŸ’αž‡αžΆαž”αŸ‹β€‹αž…αžΌαž›αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž…αŸ’αžšαž€αž“αŸαŸ‡ αž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž”αž·αž‘αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž”αžΆαž“αž›αžΏαž“αž“αŸ„αŸ‡αž‘αŸαŸ” αž“αžΆαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαžαŸ’αž‡αŸ‡αžαŸ’αž‡αžΆαž™αž’αž“αž’αžΆαž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž“αžΆαž„ αž αžΎαž™αžšαž„αŸ‹αž…αžΆαŸ†αžšαž αžΌαžαžŠαž›αŸ‹αž’αžŸαŸ‹αž–αŸαž›αž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ αž¬αž”αž‰αŸ’αž…αž”αŸ‹αžœαžΆαžŠαŸ„αž™αžŠαŸƒαŸ”

αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ tarpits αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αžΆαžšαž–αžΆαžšαŸ” αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžšαž–αžΆαžšαž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž–αž–αž½αž€ Worm αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαŸ” αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž•αŸ’αž›αžΆαž‰αž‡αžΈαžœαž·αžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαžŸαžΆαžšαž₯αžαž”αžΆαž“αž€αžΆαžš αž“αž·αž„αž’αŸ’αž“αž€αžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœαžŠαŸ‚αž›αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αž€αŸαž“αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™αž“αŸƒαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‡αžΆαž”αŸ‹αŸ—αž‚αŸ’αž“αžΆ (αž§αž‘αžΆαž αžšαžŽαŸαž“αŸ…αž›αžΎHabrΓ©αŸ– αž”αŸ’αžšαž‘αŸαžŸαž’αžΌαž‘αŸ’αžšαžΈαžŸ, αž’αŸŠαž»αž™αž€αŸ’αžšαŸ‚αž“).

αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž˜αŸ’αž“αžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡ Chris Wellons αž‘αŸ†αž“αž„αž‡αžΆαž’αž»αž‰αž‘αŸ’αžšαžΆαž“αŸ‹αž“αžΉαž„αž€αžΆαžšαž˜αžΎαž›αžšαžΏαž„αž’αžΆαž˜αŸ‰αžΆαžŸαŸ‹αž“αŸαŸ‡ αž αžΎαž™αž‚αžΆαžαŸ‹αž”αžΆαž“αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΌαž…αž˜αž½αž™ αž‚αŸ’αž˜αžΆαž“αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž‘αžΆαŸ†αž„αž€αŸ’αžšαžŽαžΆαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ SSH αžŠαŸ‚αž›αž”αž“αŸ’αžαž™αž›αŸ’αž”αžΏαž“αž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž…αžΌαž›αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸαŸ‡αž”αžΎαž€αž…αŸ’αžšαž€αž˜αž½αž™ (αž…αŸ’αžšαž€αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž‚αžΊ 2222) αž αžΎαž™αž’αŸ’αžœαžΎαž–αž»αžαž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ SSH αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž–αž·αžαžœαžΆαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‚αŸ’αž˜αžΆαž“αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž…αžΌαž›αžšαž αžΌαžαžŠαž›αŸ‹αžœαžΆαž”αŸ„αŸ‡αž”αž„αŸ‹αŸ” αžœαžΆαž’αžΆαž…αž”αž“αŸ’αžαžšαž™αŸˆαž–αŸαž›αž‡αžΆαž…αŸ’αžšαžΎαž“αžαŸ’αž„αŸƒ αž¬αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž“αŸαŸ‡ αžšαž αžΌαžαžŠαž›αŸ‹αž’αžαž·αžαž·αž‡αž“αž’αŸ’αž›αžΆαž€αŸ‹αŸ”

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ–

$ make
$ ./endlessh &
$ ssh -p2222 localhost

αž•αŸ’αž‘αžΆαŸ†αž„αž€αŸ’αžšαžŽαžΆαžαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž™αŸ‰αžΆαž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αžΉαž„αž™αž€αž’αž“αž’αžΆαž“αž–αžΈαž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž’αŸ’αž“αž€αž‘αŸ…αž‘αŸ€αžαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž”αž‰αŸ’αž αžΆαž“αŸƒαž’αž“αž’αžΆαž“αž‘αŸαŸ” αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’ αž‚αžΆαžαŸ‹αž”αžΆαž“αžŸαžšαžŸαŸαžšαžαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αžΊαž‰αŸ€αž“αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžœαžΆαž˜αžΆαž“αž’αžαž·αžαž·αž‡αž“αž…αŸ†αž“αž½αž“ 27 αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž‡αžΆαž”αŸ‹αž‚αžΆαŸ†αž„ αž αžΎαž™αž–αž½αž€αž‚αŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αžŸαž”αŸ’αžαžΆαž αŸαŸ” αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž€αŸ†αž–αžΌαž›αž“αŸƒαžŸαž€αž˜αŸ’αž˜αž—αžΆαž– αž’αžαž·αžαž·αž‡αž“ 1378 αž“αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αžΆαž”αŸ‹αž‚αžΆαŸ†αž„αž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž› 20 αž˜αŸ‰αŸ„αž„!

αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Endlessh αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαžŠαŸ†αž‘αžΎαž„αž“αŸ…αž›αžΎαž…αŸ’αžšαž€αž’αž˜αŸ’αž˜αžαžΆ 22 αžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž‡αž“αž€αŸ’αž”αžαŸ‹αž‡αžΆαžαž·αž‚αŸ„αŸ‡αž‘αŸ’αžœαžΆαžšαžŠαŸαž’αŸ†αŸ” αž’αž“αž»αžŸαžΆαžŸαž“αŸαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžαŸ‚αž„αžαŸ‚αžŽαŸ‚αž“αžΆαŸ†αž’αŸ„αž™αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈ SSH αž‘αŸ…αž…αŸ’αžšαž€αž•αŸ’αžŸαŸαž„ αžŠαŸ‚αž›αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž‘αŸ†αž αŸ†αž“αŸƒαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž—αŸ’αž›αžΆαž˜αŸ—αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αŸ”

Chris Wellons αž“αž·αž™αžΆαž™αžαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αž‘αžΆαž‰αž™αž€αž€αžαžΆαžαžŽαŸ’αžŒαž˜αž½αž™αž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹ RFC 4253 αž‘αŸ…αž–αž·αž’αžΈαž€αžΆαžš SSH αŸ” αž—αŸ’αž›αžΆαž˜αŸ—αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹ TCP αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž»αž“αž–αŸαž›αž€αžΆαžšαž‚αŸ’αžšαžΈαž”αž‚αŸ’αžšαžΈαž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αž αž—αžΆαž‚αžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαžαŸ’αžšαžΌαžœαžαŸ‚αž•αŸ’αž‰αžΎαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαŸ” αž αžΎαž™αž˜αžΆαž“αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ†αž•αž„αžŠαŸ‚αžšαŸ– "αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αžΆαž…αž•αŸ’αž‰αžΎαž‡αž½αžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž˜αž»αž“αž–αŸαž›αž•αŸ’αž‰αžΎαž‡αž½αžšαž€αŸ†αžŽαŸ‚"αŸ” αž“αž·αž„ αž‚αŸ’αž˜αžΆαž“β€‹αžŠαŸ‚αž“β€‹αž€αŸ†αžŽαžαŸ‹ αž“αŸ…αž›αžΎαž”αžšαž·αž˜αžΆαžŽαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡ αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αžΈαž˜αž½αž™αŸ—αž‡αžΆαž˜αž½αž™ SSH-.

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Endlessh αž’αŸ’αžœαžΎαŸ– αžœαžΆαŸ” αž•αŸ’αž‰αžΎ αž‚αŸ’αž˜αžΆαž“αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹ αžŸαŸ’αž‘αŸ’αžšαžΈαž˜αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αžŠαŸ‚αž›αž’αž“αž»αž›αŸ„αž˜αžαžΆαž˜ RFC 4253 αž–αŸ„αž›αž‚αžΊαž•αŸ’αž‰αžΎαž˜αž»αž“αž–αŸαž›αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αžΈαž˜αž½αž™αŸ—αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™ SSH- αž“αž·αž„αž˜αž·αž“αž›αžΎαžŸαž–αžΈ 255 αžαž½αž’αž€αŸ’αžŸαžš αžšαž½αž˜αž‘αžΆαŸ†αž„αžαž½αž’αž€αŸ’αžŸαžšαž”αž‰αŸ’αž…αž”αŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αŸ” αž‡αžΆαž‘αžΌαž‘αŸ…αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαžŸαŸ’αžšαž”αžαžΆαž˜αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαŸ”

αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž„αŸ‹αž…αžΆαŸ† 10 αžœαž·αž“αžΆαž‘αžΈαžšαžœαžΆαž„αž€αžΆαžšαž•αŸ’αž‰αžΎαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αŸ” αž“αŸαŸ‡αžšαžΆαžšαžΆαŸ†αž„αž’αžαž·αžαž·αž‡αž“αž˜αž·αž“αž±αŸ’αž™αž’αžŸαŸ‹αž–αŸαž› αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αžαž·αžαž·αž‡αž“αž“αžΉαž„αž‡αžΆαž”αŸ‹αž‚αžΆαŸ†αž„αž‡αžΆαžšαŸ€αž„αžšαž αžΌαžαŸ”

αžŠαŸ„αž™αžŸαžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž˜αž»αž“αž–αŸαž›αž€αžΆαžšαž‚αŸ’αžšαžΈαž”αž‚αŸ’αžšαžΈαž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αž αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸαŸ‡αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαŸ” αžœαžΆαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠαžŽαžΆαž˜αž½αž™αž‘αžΎαž™ αž αžΎαž™αž‚αžΆαŸ†αž‘αŸ’αžšαž–αž·αž’αžΈαž€αžΆαžšαž…αŸ’αžšαžΎαž“αŸ”

αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αžΆαž“αžΆαžαžΆαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž’αžΆαž“αž’αž”αŸ’αž”αž”αžšαž˜αžΆ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž˜αž·αž“αž˜αžΆαž“αž“αžšαžŽαžΆαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αž˜αž·αž“αžŠαžΌαž…αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αž…αžΆαžαŸ‹αž˜αŸαžšαŸ„αž‚αž‘αŸ†αž“αžΎαž” αž“αž·αž„ "αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–" αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸ αžœαžΆαž˜αž·αž“αž‚αž½αžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αžΊαžαž“αŸ„αŸ‡αž‘αŸαŸ” αž‚αžΆαžαŸ‹β€‹αž”αžΆαž“β€‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„β€‹αž€αžΆαžαŸ‹β€‹αž”αž“αŸ’αžαž™β€‹αž‘αžΆαŸ†αž„β€‹αž…αžšαžΆαž…αžš αž“αž·αž„β€‹αž€αžΆαžšβ€‹αž”αŸ’αžšαžΎβ€‹αž”αŸ’αžšαžΆαžŸαŸ‹β€‹αž’αž„αŸ’αž‚β€‹αž…αž„αž…αžΆαŸ†β€‹αžŠαŸ„αž™β€‹αžŸαžΆαžšβ€‹αž€αžΆαžšβ€‹αž’αž“αž»αžœαžαŸ’αžβ€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž›αŸ’αž”αž·αž…αž€αž›β€‹αž”αž“αŸ’αžαž·αž…αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™αž“αŸ…αž›αžΎαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžαŸ’αž˜αžΈ αž“αŸ„αŸ‡αž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžŸαž€αŸ’αžαžΆαž“αž»αž–αž›αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžš DDoS αžŠαŸ„αž™αž”αžΎαž€αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αŸ…αž“αžΉαž„αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž αžαŸ‹αž“αžΏαž™αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αžαŸ’αžŸαŸ‚αžαŸ‚αž˜αž½αž™αž€αŸ’αž“αž»αž„αž˜αž½αž™αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž€αŸαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαž›αŸ’αž’αž”αŸ†αž•αž»αžαžŠαŸ‚αžš αž–αŸ’αžšαŸ„αŸ‡αžαžΊαžŽαŸ‚αž›αž“αžΉαž„αžαŸ’αž‡αŸ‡αžαŸ’αž‡αžΆαž™αž’αž“αž’αžΆαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αŸ”

αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž› Chris Wellons αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‡αž˜αŸ’αžšαžΎαžŸαžŸαŸ’αžšαžΆαž›αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Endlessh: αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ‚αž›αž˜αžΆαž“αžαŸ’αžŸαŸ‚αžαŸ‚αž˜αž½αž™ poll(2)αžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž’αžαž·αžαž·αž‡αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž“αŸ’αž‘αžΆαž€αŸ‹αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‚αŸ’αž˜αžΆαž“αž’αž“αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αžŠαŸ„αž™αž˜αž·αž“αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž…αžΌαž›αžœαžαŸ’αžαž»αžšαž“αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΊαžŽαŸ‚αž› αž“αž·αž„ 78 αž”αŸƒαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαžΆαž˜αžŠαžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ Endlessh αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αž€αžΆαžšαž‘αž‘αž½αž› αž“αž·αž„αž•αŸ’αž‰αžΎαžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαž·αžαž·αž‡αž“αž“αžΈαž˜αž½αž™αŸ— Endlessh αž”αžΎαž€αžšαž“αŸ’αž’αž…αžΌαž›αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹ αž αžΎαž™αž”αž€αž”αŸ’αžšαŸ‚αž€αž‰αŸ’αž…αž”αŸ‹ TCP αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹ αžŠαŸ„αž™αžšαŸ†αž›αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ TCP/IP stack αŸ” αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž…αžΌαž›αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž™αžΎαž„αž˜αž·αž“αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αžΌαž›αŸ”

αž’αŸ’αž“αž€β€‹αž“αž·αž–αž“αŸ’αž’β€‹αž“αž·αž™αžΆαž™β€‹αžαžΆ αž“αŸ…β€‹αž–αŸαž›β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αžšαž”αžŸαŸ‹β€‹αž‚αžΆαžαŸ‹ αž˜αž·αž“αž”αžΆαž“β€‹αžŠαžΉαž„ αž’αŸ†αž–αžΈαž’αžαŸ’αžαž·αž—αžΆαž–αž“αŸƒ asycio αžšαž”αžŸαŸ‹ Python αž“αž·αž„ tarpits αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αžΆαžαŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈ asycio αž‚αžΆαžαŸ‹αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αžαŸ’αžšαžΉαž˜αžαŸ‚ 18 αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ PythonαŸ–

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 αž‚αžΊαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαžšαžŸαŸαžš tarpits αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž‘αŸ†αž–αž€αŸ‹αž“αŸαŸ‡αž“αžΉαž„αž”αž„αŸ’αž€αž€ 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())

Tarpit αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαŸαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαžΆαž€αŸ‹αž‘αžŽαŸ’αžŒαž€αž˜αŸ’αž˜αž›αžΎαž€αžΆαžšαž‚αŸ†αžšαžΆαž˜αž€αŸ†αž αŸ‚αž„αžαžΆαž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαŸ” αž–αž·αžαž˜αŸ‚αž“ αžœαžΆαž˜αžΆαž“αž αžΆαž“αž·αž—αŸαž™αžαŸ’αž›αŸ‡ αž•αŸ’αž‘αž»αž™αž‘αŸ…αžœαž·αž‰ αž€αžΆαžšαž‘αžΆαž€αŸ‹αž‘αžΆαž‰αž…αŸ†αžŽαžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž…αŸ†αž–αŸ„αŸ‡αž’αžΆαž€αž”αŸ’αž”αž€αž·αžšαž·αž™αžΆαž˜αž·αž“αž’αž˜αŸ’αž˜αžαžΆαžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹ αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž‚αž·αžαž’αŸ†αž–αžΈαž€αžΆαžšαžŸαž„αžŸαžΉαž€ αž“αž·αž„αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžš DDoS αž‚αŸ„αž›αžŠαŸ…αž›αžΎ IP αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αž–αŸαž›αž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αž€αžšαžŽαžΈαž”αŸ‚αž”αž“αŸαŸ‡αž‘αŸαž αžΎαž™ tarpits αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αŸ”

αž˜αž‡αŸ’αžˆαž˜αžŽαŸ’αžŒαž›αŸ–
Python, αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž–αŸαžαŸŒαž˜αžΆαž“, αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ, αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’

αžŸαŸ’αž›αžΆαž€:
SSH, Endlessh, tarpit, tarpit, trap, asycio
αž’αž“αŸ’αž‘αžΆαž€αŸ‹ (tarpit) αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ SSH αž…αžΌαž›

αžœαžΆαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžšαžΏαž„αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž‘αŸαžŠαŸ‚αž›αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαž‚αžΊαž‡αžΆαž”αžšαž·αž™αžΆαž€αžΆαžŸαž’αžšαž·αž—αžΆαž–αžαŸ’αž›αžΆαŸ†αž„αŸ” αžŠαžšαžΆαž”αžŽαžΆαž’αŸ’αž“αž€αž›αžΎαž€αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αžœαžΆαž“αžΉαž„αž‘αž‘αž½αž›αžšαž„αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†αž—αŸ’αž›αžΆαž˜αŸ— αž“αž·αž„αž€αžΆαžšαžŸαŸ’αž€αŸαž“αž…αŸ’αžšαžΎαž“αŸ” αž§αž‘αžΆαž αžšαžŽαŸ Honeypot αž–αžΈαžŸαž“αŸ’αžαž·αžŸαž»αž αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ‰αžΆαž“αŸ‹αžŸαŸ’αž˜αžΆαž“αž‘αŸ†αž αŸ†αž“αŸƒαž…αžšαžΆαž…αžšαžŽαŸαžŸαŸ†αžšαžΆαž˜αž“αŸαŸ‡αŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‡αžΆαž˜αž’αŸ’αž™αž˜ 99% αž“αŸƒαž…αžšαžΆαž…αžšαž’αžΆαž…αž‡αžΆαž–αŸ’αž™αžΆαž”αžΆαž‘αŸ”

Tarpit αž‚αžΊβ€‹αž‡αžΆβ€‹αž…αŸ’αžšαž€β€‹αž’αž“αŸ’αž‘αžΆαž€αŸ‹β€‹αžŠαŸ‚αž›β€‹αž”αŸ’αžšαžΎβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž–αž“αŸ’αž™αžΊαžβ€‹αž€αžΆαžšβ€‹αžαž—αŸ’αž‡αžΆαž”αŸ‹β€‹αž…αžΌαž›αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž…αŸ’αžšαž€αž“αŸαŸ‡ αž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž”αž·αž‘αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž”αžΆαž“αž›αžΏαž“αž“αŸ„αŸ‡αž‘αŸαŸ” αž“αžΆαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαžαŸ’αž‡αŸ‡αžαŸ’αž‡αžΆαž™αž’αž“αž’αžΆαž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž“αžΆαž„ αž αžΎαž™αžšαž„αŸ‹αž…αžΆαŸ†αžšαž αžΌαžαžŠαž›αŸ‹αž’αžŸαŸ‹αž–αŸαž›αž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ αž¬αž”αž‰αŸ’αž…αž”αŸ‹αžœαžΆαžŠαŸ„αž™αžŠαŸƒαŸ”

αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ tarpits αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αžΆαžšαž–αžΆαžšαŸ” αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžšαž–αžΆαžšαž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž–αž–αž½αž€ Worm αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαŸ” αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž•αŸ’αž›αžΆαž‰αž‡αžΈαžœαž·αžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαžŸαžΆαžšαž₯αžαž”αžΆαž“αž€αžΆαžš αž“αž·αž„αž’αŸ’αž“αž€αžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœαžŠαŸ‚αž›αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αž€αŸαž“αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™αž“αŸƒαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‡αžΆαž”αŸ‹αŸ—αž‚αŸ’αž“αžΆ (αž§αž‘αžΆαž αžšαžŽαŸαž“αŸ…αž›αžΎHabrΓ©αŸ– αž”αŸ’αžšαž‘αŸαžŸαž’αžΌαž‘αŸ’αžšαžΈαžŸ, αž’αŸŠαž»αž™αž€αŸ’αžšαŸ‚αž“).

αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž˜αŸ’αž“αžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡ Chris Wellons αž‘αŸ†αž“αž„αž‡αžΆαž’αž»αž‰αž‘αŸ’αžšαžΆαž“αŸ‹αž“αžΉαž„αž€αžΆαžšαž˜αžΎαž›αžšαžΏαž„αž’αžΆαž˜αŸ‰αžΆαžŸαŸ‹αž“αŸαŸ‡ αž αžΎαž™αž‚αžΆαžαŸ‹αž”αžΆαž“αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΌαž…αž˜αž½αž™ αž‚αŸ’αž˜αžΆαž“αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž‘αžΆαŸ†αž„αž€αŸ’αžšαžŽαžΆαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ SSH αžŠαŸ‚αž›αž”αž“αŸ’αžαž™αž›αŸ’αž”αžΏαž“αž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž…αžΌαž›αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸαŸ‡αž”αžΎαž€αž…αŸ’αžšαž€αž˜αž½αž™ (αž…αŸ’αžšαž€αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž‚αžΊ 2222) αž αžΎαž™αž’αŸ’αžœαžΎαž–αž»αžαž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ SSH αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž–αž·αžαžœαžΆαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‚αŸ’αž˜αžΆαž“αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž…αžΌαž›αžšαž αžΌαžαžŠαž›αŸ‹αžœαžΆαž”αŸ„αŸ‡αž”αž„αŸ‹αŸ” αžœαžΆαž’αžΆαž…αž”αž“αŸ’αžαžšαž™αŸˆαž–αŸαž›αž‡αžΆαž…αŸ’αžšαžΎαž“αžαŸ’αž„αŸƒ αž¬αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž“αŸαŸ‡ αžšαž αžΌαžαžŠαž›αŸ‹αž’αžαž·αžαž·αž‡αž“αž’αŸ’αž›αžΆαž€αŸ‹αŸ”

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ–

$ make
$ ./endlessh &
$ ssh -p2222 localhost

αž•αŸ’αž‘αžΆαŸ†αž„αž€αŸ’αžšαžŽαžΆαžαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž™αŸ‰αžΆαž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αžΉαž„αž™αž€αž’αž“αž’αžΆαž“αž–αžΈαž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž’αŸ’αž“αž€αž‘αŸ…αž‘αŸ€αžαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž”αž‰αŸ’αž αžΆαž“αŸƒαž’αž“αž’αžΆαž“αž‘αŸαŸ” αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’ αž‚αžΆαžαŸ‹αž”αžΆαž“αžŸαžšαžŸαŸαžšαžαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αžΊαž‰αŸ€αž“αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžœαžΆαž˜αžΆαž“αž’αžαž·αžαž·αž‡αž“αž…αŸ†αž“αž½αž“ 27 αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž‡αžΆαž”αŸ‹αž‚αžΆαŸ†αž„ αž αžΎαž™αž–αž½αž€αž‚αŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αžŸαž”αŸ’αžαžΆαž αŸαŸ” αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž€αŸ†αž–αžΌαž›αž“αŸƒαžŸαž€αž˜αŸ’αž˜αž—αžΆαž– αž’αžαž·αžαž·αž‡αž“ 1378 αž“αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αžΆαž”αŸ‹αž‚αžΆαŸ†αž„αž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž› 20 αž˜αŸ‰αŸ„αž„!

αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Endlessh αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαžŠαŸ†αž‘αžΎαž„αž“αŸ…αž›αžΎαž…αŸ’αžšαž€αž’αž˜αŸ’αž˜αžαžΆ 22 αžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž‡αž“αž€αŸ’αž”αžαŸ‹αž‡αžΆαžαž·αž‚αŸ„αŸ‡αž‘αŸ’αžœαžΆαžšαžŠαŸαž’αŸ†αŸ” αž’αž“αž»αžŸαžΆαžŸαž“αŸαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžαŸ‚αž„αžαŸ‚αžŽαŸ‚αž“αžΆαŸ†αž’αŸ„αž™αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈ SSH αž‘αŸ…αž…αŸ’αžšαž€αž•αŸ’αžŸαŸαž„ αžŠαŸ‚αž›αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž‘αŸ†αž αŸ†αž“αŸƒαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž—αŸ’αž›αžΆαž˜αŸ—αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αŸ”

Chris Wellons αž“αž·αž™αžΆαž™αžαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αž‘αžΆαž‰αž™αž€αž€αžαžΆαžαžŽαŸ’αžŒαž˜αž½αž™αž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹ RFC 4253 αž‘αŸ…αž–αž·αž’αžΈαž€αžΆαžš SSH αŸ” αž—αŸ’αž›αžΆαž˜αŸ—αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹ TCP αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž»αž“αž–αŸαž›αž€αžΆαžšαž‚αŸ’αžšαžΈαž”αž‚αŸ’αžšαžΈαž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αž αž—αžΆαž‚αžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαžαŸ’αžšαžΌαžœαžαŸ‚αž•αŸ’αž‰αžΎαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαŸ” αž αžΎαž™αž˜αžΆαž“αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ†αž•αž„αžŠαŸ‚αžšαŸ– "αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αžΆαž…αž•αŸ’αž‰αžΎαž‡αž½αžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž˜αž»αž“αž–αŸαž›αž•αŸ’αž‰αžΎαž‡αž½αžšαž€αŸ†αžŽαŸ‚"αŸ” αž“αž·αž„ αž‚αŸ’αž˜αžΆαž“β€‹αžŠαŸ‚αž“β€‹αž€αŸ†αžŽαžαŸ‹ αž“αŸ…αž›αžΎαž”αžšαž·αž˜αžΆαžŽαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡ αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αžΈαž˜αž½αž™αŸ—αž‡αžΆαž˜αž½αž™ SSH-.

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Endlessh αž’αŸ’αžœαžΎαŸ– αžœαžΆαŸ” αž•αŸ’αž‰αžΎ αž‚αŸ’αž˜αžΆαž“αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹ αžŸαŸ’αž‘αŸ’αžšαžΈαž˜αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αžŠαŸ‚αž›αž’αž“αž»αž›αŸ„αž˜αžαžΆαž˜ RFC 4253 αž–αŸ„αž›αž‚αžΊαž•αŸ’αž‰αžΎαž˜αž»αž“αž–αŸαž›αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αžΈαž˜αž½αž™αŸ—αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™ SSH- αž“αž·αž„αž˜αž·αž“αž›αžΎαžŸαž–αžΈ 255 αžαž½αž’αž€αŸ’αžŸαžš αžšαž½αž˜αž‘αžΆαŸ†αž„αžαž½αž’αž€αŸ’αžŸαžšαž”αž‰αŸ’αž…αž”αŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αŸ” αž‡αžΆαž‘αžΌαž‘αŸ…αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαžŸαŸ’αžšαž”αžαžΆαž˜αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαŸ”

αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž„αŸ‹αž…αžΆαŸ† 10 αžœαž·αž“αžΆαž‘αžΈαžšαžœαžΆαž„αž€αžΆαžšαž•αŸ’αž‰αžΎαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αŸ” αž“αŸαŸ‡αžšαžΆαžšαžΆαŸ†αž„αž’αžαž·αžαž·αž‡αž“αž˜αž·αž“αž±αŸ’αž™αž’αžŸαŸ‹αž–αŸαž› αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αžαž·αžαž·αž‡αž“αž“αžΉαž„αž‡αžΆαž”αŸ‹αž‚αžΆαŸ†αž„αž‡αžΆαžšαŸ€αž„αžšαž αžΌαžαŸ”

αžŠαŸ„αž™αžŸαžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž˜αž»αž“αž–αŸαž›αž€αžΆαžšαž‚αŸ’αžšαžΈαž”αž‚αŸ’αžšαžΈαž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αž αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸαŸ‡αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαŸ” αžœαžΆαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠαžŽαžΆαž˜αž½αž™αž‘αžΎαž™ αž αžΎαž™αž‚αžΆαŸ†αž‘αŸ’αžšαž–αž·αž’αžΈαž€αžΆαžšαž…αŸ’αžšαžΎαž“αŸ”

αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αžΆαž“αžΆαžαžΆαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž’αžΆαž“αž’αž”αŸ’αž”αž”αžšαž˜αžΆ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž˜αž·αž“αž˜αžΆαž“αž“αžšαžŽαžΆαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αž˜αž·αž“αžŠαžΌαž…αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αž…αžΆαžαŸ‹αž˜αŸαžšαŸ„αž‚αž‘αŸ†αž“αžΎαž” αž“αž·αž„ "αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–" αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸ αžœαžΆαž˜αž·αž“αž‚αž½αžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αžΊαžαž“αŸ„αŸ‡αž‘αŸαŸ” αž‚αžΆαžαŸ‹β€‹αž”αžΆαž“β€‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„β€‹αž€αžΆαžαŸ‹β€‹αž”αž“αŸ’αžαž™β€‹αž‘αžΆαŸ†αž„β€‹αž…αžšαžΆαž…αžš αž“αž·αž„β€‹αž€αžΆαžšβ€‹αž”αŸ’αžšαžΎβ€‹αž”αŸ’αžšαžΆαžŸαŸ‹β€‹αž’αž„αŸ’αž‚β€‹αž…αž„αž…αžΆαŸ†β€‹αžŠαŸ„αž™β€‹αžŸαžΆαžšβ€‹αž€αžΆαžšβ€‹αž’αž“αž»αžœαžαŸ’αžβ€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž›αŸ’αž”αž·αž…αž€αž›β€‹αž”αž“αŸ’αžαž·αž…αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™αž“αŸ…αž›αžΎαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžαŸ’αž˜αžΈ αž“αŸ„αŸ‡αž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžŸαž€αŸ’αžαžΆαž“αž»αž–αž›αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžš DDoS αžŠαŸ„αž™αž”αžΎαž€αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αŸ…αž“αžΉαž„αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž αžαŸ‹αž“αžΏαž™αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αžαŸ’αžŸαŸ‚αžαŸ‚αž˜αž½αž™αž€αŸ’αž“αž»αž„αž˜αž½αž™αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž€αŸαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαž›αŸ’αž’αž”αŸ†αž•αž»αžαžŠαŸ‚αžš αž–αŸ’αžšαŸ„αŸ‡αžαžΊαžŽαŸ‚αž›αž“αžΉαž„αžαŸ’αž‡αŸ‡αžαŸ’αž‡αžΆαž™αž’αž“αž’αžΆαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αŸ”

αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž› Chris Wellons αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‡αž˜αŸ’αžšαžΎαžŸαžŸαŸ’αžšαžΆαž›αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Endlessh: αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ‚αž›αž˜αžΆαž“αžαŸ’αžŸαŸ‚αžαŸ‚αž˜αž½αž™ poll(2)αžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž’αžαž·αžαž·αž‡αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž“αŸ’αž‘αžΆαž€αŸ‹αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‚αŸ’αž˜αžΆαž“αž’αž“αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αžŠαŸ„αž™αž˜αž·αž“αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž…αžΌαž›αžœαžαŸ’αžαž»αžšαž“αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΊαžŽαŸ‚αž› αž“αž·αž„ 78 αž”αŸƒαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαžΆαž˜αžŠαžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ Endlessh αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αž€αžΆαžšαž‘αž‘αž½αž› αž“αž·αž„αž•αŸ’αž‰αžΎαžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαž·αžαž·αž‡αž“αž“αžΈαž˜αž½αž™αŸ— Endlessh αž”αžΎαž€αžšαž“αŸ’αž’αž…αžΌαž›αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹ αž αžΎαž™αž”αž€αž”αŸ’αžšαŸ‚αž€αž‰αŸ’αž…αž”αŸ‹ TCP αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹ αžŠαŸ„αž™αžšαŸ†αž›αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ TCP/IP stack αŸ” αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž…αžΌαž›αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž™αžΎαž„αž˜αž·αž“αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αžΌαž›αŸ”

αž’αŸ’αž“αž€β€‹αž“αž·αž–αž“αŸ’αž’β€‹αž“αž·αž™αžΆαž™β€‹αžαžΆ αž“αŸ…β€‹αž–αŸαž›β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αžšαž”αžŸαŸ‹β€‹αž‚αžΆαžαŸ‹ αž˜αž·αž“αž”αžΆαž“β€‹αžŠαžΉαž„ αž’αŸ†αž–αžΈαž’αžαŸ’αžαž·αž—αžΆαž–αž“αŸƒ asycio αžšαž”αžŸαŸ‹ Python αž“αž·αž„ tarpits αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αžΆαžαŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈ asycio αž‚αžΆαžαŸ‹αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αžαŸ’αžšαžΉαž˜αžαŸ‚ 18 αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ PythonαŸ–

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 αž‚αžΊαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαžšαžŸαŸαžš tarpits αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž‘αŸ†αž–αž€αŸ‹αž“αŸαŸ‡αž“αžΉαž„αž”αž„αŸ’αž€αž€ 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())

Tarpit αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαŸαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαžΆαž€αŸ‹αž‘αžŽαŸ’αžŒαž€αž˜αŸ’αž˜αž›αžΎαž€αžΆαžšαž‚αŸ†αžšαžΆαž˜αž€αŸ†αž αŸ‚αž„αžαžΆαž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαŸ” αž–αž·αžαž˜αŸ‚αž“ αžœαžΆαž˜αžΆαž“αž αžΆαž“αž·αž—αŸαž™αžαŸ’αž›αŸ‡ αž•αŸ’αž‘αž»αž™αž‘αŸ…αžœαž·αž‰ αž€αžΆαžšαž‘αžΆαž€αŸ‹αž‘αžΆαž‰αž…αŸ†αžŽαžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž…αŸ†αž–αŸ„αŸ‡αž’αžΆαž€αž”αŸ’αž”αž€αž·αžšαž·αž™αžΆαž˜αž·αž“αž’αž˜αŸ’αž˜αžαžΆαžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹ αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž‚αž·αžαž’αŸ†αž–αžΈαž€αžΆαžšαžŸαž„αžŸαžΉαž€ αž“αž·αž„αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžš DDoS αž‚αŸ„αž›αžŠαŸ…αž›αžΎ IP αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αž–αŸαž›αž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αž€αžšαžŽαžΈαž”αŸ‚αž”αž“αŸαŸ‡αž‘αŸαž αžΎαž™ tarpits αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αŸ”

αž’αž“αŸ’αž‘αžΆαž€αŸ‹ (tarpit) αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ SSH αž…αžΌαž›

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹