Olá, você ta criando um chat com websocket, certo? caso sim você pode fazer o seguinte:

    // exemplo que usa socket.io
    // https://socket.io/docs/v4/client-api/
    import { io } from "https://cdn.socket.io/4.4.1/socket.io.esm.min.js";
    const input = document.querySelector("#input_ip");
    const button = document.querySelector("#connect");

    function connect() {
      var ip = input.value; // obtenha o ip atráves de um input, como: 192.168.0.1:8080
      const socket = io(ip, { reconnection: false });

      if (socket.connected) return socket;
      else throw "Invalid IP";
    }

    button.onclick = () => {
      const socket = connect();
    
      // determine os listeners!
      socket.on("connect", () => console.log(socket.id + " | connected"));
      socket.on("message", ...);
    }

Ou seja você pode pegar um IP pelo um input tentar conectar e caso conseguir conectar setar os eventos.


Sobre o firewall, em todo servidor local é necessário permitir o app no firewall. exemplo: um servidor LAN de minecraft, você tem que permitir o Java(TM) Platform SE binary.

Outra coisa é o usuário host tem que estar com um servidor websocket ligado, para fazer que ele não precise de ter o ambiente da linguagem instalada em sua máquina é necessario gerar um arquivo executável de um servidor.