diff --git a/agents/agent.go b/agents/agent.go index d3ae9aa..6ca656c 100644 --- a/agents/agent.go +++ b/agents/agent.go @@ -7,8 +7,12 @@ import ( "log" "net/http" "net/url" + // "os" "os/exec" - // "time" + "time" + "math/rand" + "math" + "strconv" "github.com/gorilla/websocket" ) @@ -17,12 +21,13 @@ const( webServerAddr = "127.0.0.1:3333" webSocketAddr = "127.0.0.1:5555" registerURL = "http://" + webServerAddr + "/agents" - wsURL = "ws://" + webSocketAddr + "/data" + // wsURL = "ws://" + webSocketAddr + "/data" ) type Agent struct { AgentName string `json:"agentName"` AgentID string `json:"agentId"` + AgentIP string `json:"agentIp"` InitialContact string `json:"initialContact"` LastContact string `json:"lastContact"` } @@ -30,7 +35,7 @@ type Agent struct { var conn *websocket.Conn -func registerAgent(agentName string, agentId string) error { +func registerAgent(agentName string, agentId string, agentIp string) error { // agent:= Agent{ // AgentName: agentName, // InitialContact: time.Now().Format(time.RFC3339), @@ -47,6 +52,7 @@ func registerAgent(agentName string, agentId string) error { form := url.Values{} form.Add("agentId", agentId) form.Add("agentName", agentName) + form.Add("IPv4Address", agentIp) resp, err := http.PostForm(registerURL, form) if err != nil { @@ -63,7 +69,8 @@ func registerAgent(agentName string, agentId string) error { } -func connectToWebSocket() error { +func connectToWebSocket(agentName string, agentIp string) error { + wsURL := fmt.Sprintf("ws://%s/data?agentName=%s&IPv4Address=%s", webSocketAddr, url.QueryEscape(agentName), url.QueryEscape(agentIp)) var err error conn, _, err = websocket.DefaultDialer.Dial(wsURL, nil) if err != nil { @@ -102,15 +109,25 @@ func listenForCommands() { } } +func randomInt(length int) int { + rand.Seed(time.Now().UnixNano()) + min := int(math.Pow10(length-1)) + max := int(math.Pow10(length)) -1 + return rand.Intn(max-min+1) + min + +} + func main() { agentName := "Agent-001" - agentId := "1234" + // agentId := "1234" + agentId := strconv.Itoa(randomInt(5)) + agentIp := "127.0.0.1" - if err := registerAgent(agentName, agentId); err != nil { + if err := registerAgent(agentName, agentId, agentIp); err != nil { log.Fatalf("Agent registration failed: %v", err) } - if err := connectToWebSocket(); err != nil { + if err := connectToWebSocket(agentName, agentIp); err != nil { log.Fatalf("Websocket connection failed: %v", err) } diff --git a/main.go b/main.go index 44d50de..c9449c6 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "encoding/json" "os" "strings" "time" @@ -271,7 +272,7 @@ func updateAgent(w http.ResponseWriter, r *http.Request, agentId string) { lastContact := r.FormValue("lastContact") IPv4Address := r.FormValue("IPv4Address") - query := "UPDATE agents SET agentName = ?, IPv4Address= ?, lastContact = ? where agentId = ?" + query := "UPDATE agents SET agentName = ?, IPv4Address = ?, lastContact = ? where agentId = ?" _, err = db.Exec(query, agentName, IPv4Address, lastContact, agentId) if err != nil { http.Error(w, "Failed to update agent", http.StatusInternalServerError) @@ -342,6 +343,29 @@ func getAgent(w http.ResponseWriter, r *http.Request, agentId string) { } +func getAgentNames(w http.ResponseWriter, r *http.Request) { + query := "SELECT agentName from agents" + rows, err := db.Query(query) + if err != nil { + http.Error(w, "Failed to fetch agent names", http.StatusInternalServerError) + return + } + defer rows.Close() + + var agentNames []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + http.Error(w, "Error reading agent names", http.StatusInternalServerError) + return + } + agentNames = append(agentNames, name) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(agentNames) +} + type webSocketHandler struct { upgrader websocket.Upgrader } @@ -368,6 +392,42 @@ func (wsh webSocketHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } + +// func executeCommand(w http.ResponseWrite, r *http.Request) { + +// } + +var agentSockets = make(map[string]*websocket.Conn) +var agentSocketsMutex sync.Mutex + +var executeCommand http.HandlerFunc = func(w http.ResponseWriter, r *http.Request){ + err := r.ParseForm() + if err != nil { + http.Error(w, "Invalid form data", http.StatusBadRequest) + } + + agentName := r.FormValue("agentName") + command := r.FormValue("command") + + agentSocketsMutex.Lock() + conn, ok := agentSockets[agentName] + agentSocketsMutex.Unlock() + + if !ok { + http.Error(w, "Agent not connected", http.StatusNotFound) + return + } + + err = conn.WriteMessage(websocket.TextMessage, []byte(command)) + if err != nil { + http.Error(w, "Failed to send command to the agent", http.StatusInternalServerError) + return + } + + w.WriteHeader(http.StatusOK) + w.Write([]byte("Command sent successfully")) +} + func main() { ctx, cancel := context.WithCancel(context.Background()) @@ -380,7 +440,9 @@ func main() { } webSocketMux := http.NewServeMux() + // webSocketMux.Handle("/data", webSocketHandler) webSocketMux.Handle("/data", webSocketHandler) + webSocketMux.Handle("/executeCommand", executeCommand) websocketServer := &http.Server{ Addr: ":5555", Handler: webSocketMux, @@ -392,6 +454,7 @@ func main() { // webMux.HandleFunc("/hello", getHello) // webMux.HandleFunc("/agents", fetchAgents) webMux.HandleFunc("/agents", agentsHandler) + webMux.HandleFunc("/agentNames", getAgentNames) // webMux.HandleFunc("/newagentform", getAgentForm) // webMux.HandleFunc("/getagentupdateform/{agentId}", getAgentUpdateForm) webMux.HandleFunc("/agents/{agentId}", agentsHandler) diff --git a/prefix_adjectives b/prefix_adjectives new file mode 100644 index 0000000..5f34691 --- /dev/null +++ b/prefix_adjectives @@ -0,0 +1,712 @@ +abiding +abounding +abundant +academic +acceptable +accepting +accessible +acclaimed +accommodating +accountable +accurate +actionable +active +actual +adaptable +adaptive +adequate +admirable +adored +advantageous +advisable +affectionate +agreeable +agricultural +alert +alive +alluring +amazed +ambitious +amicable +amusing +animated +appealing +appetizing +appreciative +approachable +appropriate +ardent +arresting +artful +articulate +artistic +aspiring +assertive +assured +assuring +astonishing +astounding +astronomical +astute +athletic +attainable +attractive +auspicious +authoritative +avid +awake +aware +balance +banging +beaming +beautiful +bedazzled +bedazzling +believable +beloved +beneficial +benevolent +benign +better +bewildering +bewitching +big-hearted +bilingual +blameless +blazing +blessed +blissful +blooming +blossoming +blushing +bodacious +boisterous +bold +bouncy +boundless +boyish +brainy +brave +bravo +brawny +brazen +breathtaking +breezy +bright +brilliant +buoyant +bustling +calm +calming +candid +capable +captivated +captivating +carefree +careful +caring +cautious +ceaseless +celebrated +celestial +centered +cerebral +ceremonial +certified +changeable +charismatic +charitable +charmed +charming +chatty +cheeky +cheerful +cheery +childlike +chivalrous +choice +chuckling +cinematic +civilized +classic +classical +clean +clear +clearheaded +clever +close +coachable +cognitive +coherent +cohesive +collaborative +collegial +colloquial +colorful +colossal +comfortable +comforted +comforting +commanding +commemorative +commendable +committed +communicative +compact +compassionate +compelling +competent +complete +completed +complex +complimentary +comprehensive +conceivable +concerted +concise +confident +confidential +confirmable +confirmed +congruent +connected +conscientious +conscious +consensual +consenting +conservative +considerate +consistent +consoling +conspiratorial +contented +cool +countryside +courageous +cozy +creative +cryptic +cultured +dainty +dapper +daring +dashing +daughterly +dazzling +dear +debonair +decadent +decisive +decorative +decorous +dedicated +deep +defendable +defensible +definable +definitive +delectable +deliberate +deliberative +delicious +delighted +delightful +demonstrative +demure +dependable +designer +desirous +detailed +determined +devoted +devout +didactic +dignified +diligent +dim +diplomatic +direct +disarming +disciplined +discontented +discreet +discriminating +distant +distinct +distinguished +distracting +diverse +diversified +dizzying +doable +dogged +dogmatic +domestic +dominant +doting +dramatic +dreamy +dressy +driven +dusky +dutiful +dynamic +early +earnest +earthy +easy-going +easygoing +eccentric +economical +ecstatic +edgy +educated +educational +effective +effervescent +efficient +effortless +effusive +egalitarian +elaborate +electric +electrifying +elegant +elevated +eligible +elite +eloquent +emblematic +emboldened +empathetic +empirical +enamored +enchanted +enchanting +encouraged +encouraging +endearing +endurable +enduring +energetic +energizing +enforceable +engrossing +enhanced +enigmatic +enjoyable +enlightened +enough +enterprising +entertained +entertaining +enthralled +enthused +enthusiastic +enticing +entire +entranced +entrepreneurial +enumerable +enviable +equal +equitable +erect +essential +established +eternal +ethereal +ethical +euphoric +even +eventful +everlasting +evocative +exact +exalted +excellent +exceptional +excitable +excited +exciting +exclusive +executable +exhaustive +exhilarated +exhilarating +exotic +expansive +expectant +expected +exquisite +extensive +extraordinary +exuberant +fabled +fabulous +factual +fair +fairy-tale-like +faithful +famous +fantastic +far-flung +farming-related +fascinated +fascinating +fashionable +fastidious +fateful +fatherly +fathomable +favorable +favourite +fearless +fertile +fervent +fetching +fierce +fiery +fine +firm +first +fit +flamboyant +flashy +flattered +flattering +flavorful +flawless +flexible +flirtatious +flowery +fluent +fluffy +focused +fond +foreseeable +forgivable +forgiving +formal +formative +formidable +forthright +fortuitous +fortunate +forward +foxy +fragrant +frank +fraternal +free +freedom +fresh +friendly +frisky +fulfilled +fulfilling +full +fun +functional +fundamental +funny +futuristic +gainful +gallant +game +generous +genial +genius +gentle +genuine +giant +giddy +gifted +gigantic +giggling +giving +glad +glaring +gleaming +glittering +glorious +glossy +glowing +golden +good-looking +goof +gorgeous +graceful +gracious +grandiose +grateful +gratified +gratifying +great +greatest +grinning +gripping +groomed +groovy +guaranteed +guiltless +gutsy +hallowed +handsome +happy +hard-working +hardworking +hardy +harmless +harmonic +harmonious +heady +healthy +heart-warming +hearty +heavenly +heedful +helpful +heroic +high +historic +historical +holistic +homey +honest +honourable +hopeful +hot +huggable +human +humble +hygienic +idealistic +illimitable +illuminating +illustrious +imaginative +immaculate +immeasurable +immense +immortal +immovable +impartial +impassioned +impenetrable +impervious +important +impressive +improved +improving +inalienable +incandescent +inclusive +incomparable +incontrovertible +incredible +industrious +inexpensive +infinite +influenced +influential +informative +informed +ingenuous +inhabitable +innovative +inquisitive +insightful +inspirational +inspiring +intelligent +intense +intensity +interesting +intriguing +invaluable +inviting +iridescent +jadeite +jaunty +jazzed +jentacular +jocular +jocund +jovial +joyful +jubilant +judicious +kaleidoscopic +keen +kidding +kind +kindhearted +kinetic +kingly +king-sized +kissable +kissy +knowable +knowledgeable +kooky +kosher +kudos +laughable +lengthy +liberal +light-hearted +likable +limitless +listenable +lively +lofty +logical +loveable +loving +loyal +lucky +luminous +luxurious +luxury +magical +magnetic +marketable +maternal +mature +meaningful +meditative +merciful +merry +mindful +miraculous +modest +motivational +moving +mysterious +mystical +naughty +neighborly +new +nostalgic +notable +noteworthy +nutritious +obedient +observant +okay +open +open-minded +optimistic +organized +original +otherworldly +outstanding +overflowing +palatial +parental +passionate +pastoral +paternal +patient +peaceful +peerless +perceptive +personable +phenomenal +pioneering +playful +pleasant +polite +positive +powerful +practical +precocious +premium +pretty +pristine +productive +prolific +protective +proud +pure +qualified +quantifiable +quick +quiet +quirky +quotable +radiant +rational +real +realistic +refreshing +regal +rejuvenating +relaxed +relevant +reliable +remarkable +reserved +resilient +resourceful +respectful +responsive +reverent +rich +right +romantic +roomy +rural +safety +sand-covered +sandy +sane +satisfied +scrupulous +seemly +sensational +sensible +sensitive +sentimental +serene +sexy +shiny +sincere +smart +sociable +soulful +spacious +spirited +spotless +steady +stimulating +straightforward +strong +stunning +suave +successful +sufficient +sun-drenched +sun-soaked +superb +sweet +tactful +tenacious +terrific +thoughtful +towering +tranquil +trustworthy +unique +unspoiled/unspoilt +uplifting +vast +vibrant +vivacious +wholesome +willing +xenial +yielding +youthful +zestful diff --git a/suffix_names b/suffix_names new file mode 100644 index 0000000..ac4c417 --- /dev/null +++ b/suffix_names @@ -0,0 +1,194 @@ +Ai +Albjofe +Alfr +Amras +Amrod +An +Anarr +Anduin +Andvari +Aragorn +Arathorn +Aredhel +Artanis +Arwen +Austri +Bafurr +Beleg +Beorn +Beren +Bilbo +Billingr +Bomburr +Boromir +Bruni +Bufurr +Buldr +Buri +Caranthir +Celeborn +Celebrian +Celebrían +Celegorm +Cirdan +Círdan +Cotton +Curufin +Dainn +Damrod +Denethor +Dilgbrasir +Dori +Draupnir +Dufr +Duilin +Durinn +Dvalinn +Eärendil +Eärwen +Ecthelion +Eikinskjaldi +Eldarion +Elendil +Elessar +Elladan +Elrohir +Elrond +Eluréd +Elurín +Elwing +Envinyatar +Eöl +Eomer +Eowyn +Éowyn +Erestor +Faniel +Faramir +Fëanor +Fili +Finduilas +Fingolfin +Fingon +Finnr +Finrod +Flalarr +Frar +Frawgr +Frodo +Frosti +Fundinn +Galadriel +Gandalf +Gandalfr +Gildor +Gil-galad +Gilwen +Gimli +Ginnarr +Gloinn +Glorfindel +Goldberry +Gollum +Haldir +Hanarr +Har +Haugspori +Hepti +Hirnbori +Hlevangr +Húrin +Idril +Imladris +Indis +Isildur +Isilme +Istarien +Itarillë +Idril +Jari +Kili +Lalaith +Legolas +Lindir +Lissë +Litr +Lofarr +Loni +Lothíriel +Luthien +Lúthien +Maedhros +Maeglin +Maglor +Melian +Meneldor +Merry +Brandybuck +Míriel +Morwen +Motsognir +Nainn +Nali +Nar +Narr +Nellas +Nerdanel +Nessa +Nienna +Nienor +Nimloth +Nimrodel +Níniel +Nioi +Nipingr +Nori +Norori +Nyraor +Nyu +Ori +Orodreth +Orophin +Pekkr +Pengolodh +Pippin +Took +Porinn +Prainn +Pror +Qurvangr +Raosvidr +Reginn +Rosamunda +Rúmil +Samwise +Gamgee +Saruman +Sauron +Skafidr +Skirvir +Suori +Sviorr +Tauriel +Theoden +Théoden +Thingol +Thorin +Thranduil +Tinúviel +Treebeard +Tuor +Turambar +Turgon +Urwen +Vairë +Varda +Veigr +Vestri +Vievir +Vili +Vindalfr +Vitr +Wormtongue +Yavanna +Yngvi diff --git a/templates/index.html b/templates/index.html index af79f55..2db4526 100644 --- a/templates/index.html +++ b/templates/index.html @@ -17,6 +17,22 @@ console.error(evt.detail.xhr.responseText); }); +