Приветствуем!

Вы находитесь на русскоязычном форуме Web1.0 Hosting. Пользоваться форумом имеют право все желающие, в том числе и на тематику, даже не по теме хостинга, в соответствующих разделах.

Придерживайтесь правил приличия и приглашайте друзей. Давайте возродим форумы, как полезное средство обмена информацией и интересного времяпровождения.

Сменить тему оформления можно в своём профайле после регистрации.

Руководство по HamsterCMS от TomoTomoTan
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Предисловие и глава 1. - Как включить
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 2 - О шаблонах и содержимом
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 3 - Доступ к сайту через FTP, редактирование шаблона
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 4 - Устройство шаблона. Немного о включениях.
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 5 - Создание собственного шаблона. Загрузка файлов на сайт с помощью WebFTP

Частозадаваемые вопросы по хостингу | Вопросы по IRC | Веб-чат (работает в Opera 10.63/Win98 и современных браузерах, как и этот форум)

DMconnect - децентрализованный мессенджер для старых систем.

Правила раздела! Шаблон

Moderators: Ftod, BitByByte

User avatar
BitByByte
Набирающий обороты
Posts: 24
Joined: Thu Dec 19, 2024 11:18 am
Has thanked: 24 times
Been thanked: 8 times

Re: DMconnect - децентрализованный мессенджер для старых систем.

Post by BitByByte »

Ambreon866 wrote: Fri Jan 09, 2026 1:37 pm Те, кто хостит сервера с DMConnect - посоветуйте пожалуйста хостинг для него, очень надо :)
Я держу сервер saratov.ddns.net на VPS от https://ruvds.com/. Паспорт при регистрации не требуют, вроде бы.

Вот только есть минус (или плюс?) - IP сервера будет российским, если захочешь хоститься там.
User avatar
zhuzhun3000
Набирающий обороты
Posts: 27
Joined: Sun Mar 23, 2025 10:54 am
Location: не скажу
Has thanked: 1 time
Been thanked: 9 times

Re: DMconnect - децентрализованный мессенджер для старых систем.

Post by zhuzhun3000 »

JustHost - датацентроффф много, почти вся Европа есть (ну и Россия собсна), раньше VPS были дешёвые, ща из-за всей этой ситуации на рынке подорожали. Летом был там, если брать ДЦ в Европе (Латвия и т.д.) - может чудить с IP, но там их можно сменить, также как и ДЦ :)
IHC.ru - самый дешёвый VPS (75 рублей в месяц, но дц - Россия, осторожно). Европа от 275 рублей. Сейчас у меня ВПСка там, качество на высоте, не подводили. 600МБ хватает с головой для хостинга сайтов и мелких серверов (и даже дешевле самого слабого тарифа на JH).

Больше не знаю.. наверное.
Image
Image
User avatar
zhuzhun3000
Набирающий обороты
Posts: 27
Joined: Sun Mar 23, 2025 10:54 am
Location: не скажу
Has thanked: 1 time
Been thanked: 9 times

Re: DMconnect - децентрализованный мессенджер для старых систем.

Post by zhuzhun3000 »

zhuzhun3000 wrote: Fri Jan 09, 2026 1:50 pm JustHost - датацентроффф много, почти вся Европа есть (ну и Россия собсна), раньше VPS были дешёвые, ща из-за всей этой ситуации на рынке подорожали. Летом был там, если брать ДЦ в Европе (Латвия и т.д.) - может чудить с IP, но там их можно сменить, также как и ДЦ :)
IHC.ru - самый дешёвый VPS (75 рублей в месяц, но дц - Россия, осторожно). Европа от 275 рублей. Сейчас у меня ВПСка там, качество на высоте, не подводили. 600МБ хватает с головой для хостинга сайтов и мелких серверов (и даже дешевле самого слабого тарифа на JH).

Больше не знаю.. наверное.
сорян, что сделал не ответом на сообщение (про jh и ihc)
Дополню список ещё VDSina, самый дешёвый сервер за 150 рублей в месяц. Не густо, но и не пусто :)
подтверждение:
Image
Image
Image
User avatar
dsalin
Писака
Posts: 92
Joined: Mon Dec 30, 2024 5:01 pm
Has thanked: 51 times
Been thanked: 58 times

Re: DMconnect - децентрализованный мессенджер для старых систем.

Post by dsalin »

Вот код моего "временного" моста, который работал летом:

Code: Select all

import socket
import threading
import time
import re

# ===== CONFIGURATION =====
DM_HOST = "dsalin17.hoho.ws"
DM_PORT = 42439
DM_USERNAME = "bridge_user"     # <<< CHANGE THIS
DM_PASSWORD = "password"     # <<< CHANGE THIS

IRC_HOST = "irc.retronode.org"
IRC_PORT = 6667
IRC_CHANNEL = "#downgrade"
IRC_NICK = "brigita"
IRC_USER = "brigita"

# ===== GLOBAL SOCKETS =====
dm_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
irc_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

stop_event = threading.Event()

# ===== DM CONNECTION & BRIDGE =====
def dm_login_and_join():
    """Login and join 'general' subserver on DM Connect"""
    print("[DM] Logging in...")
    dm_sock.sendall(f"/login {DM_USERNAME} {DM_PASSWORD}\n".encode("utf-8"))

    # Wait for login success
    while True:
        data = dm_sock.recv(1024).decode("utf-8", errors="ignore").strip()
        print(f"[DM INIT] {data}")
        if "logged in" in data.lower() or "success" in data.lower():
            break
        elif "fail" in data.lower() or "incorrect" in data.lower():
            print("[DM] Login failed.")
            stop_event.set()
            return

    print("[DM] Joining 'general' subserver...")
    dm_sock.sendall(b"/join_server general\n")

def dm_keepalive():
    """Send keepalive pings to DM every 5 seconds"""
    while not stop_event.is_set():
        try:
            dm_sock.sendall(b"/")
        except:
            break
        time.sleep(5)

def dm_receiver():
    """Receive messages from DM and forward to IRC"""
    while not stop_event.is_set():
        try:
            data = dm_sock.recv(1024).decode("utf-8", errors="ignore").strip()
            if not data:
                continue
            if "*Ping!*" in data:
                continue
            if "[IRC:" in data:
                continue  # prevent echo loop
            print(f"[DM] {data}")
            irc_sock.sendall(f"PRIVMSG {IRC_CHANNEL} :[DM] {data}\r\n".encode("utf-8"))
        except Exception as e:
            print(f"[DM ERROR] {e}")
            break

# ===== IRC CONNECTION & BRIDGE =====
def irc_login_and_join():
    """Login to IRC and join #downgrade"""
    print("[IRC] Logging in...")
    irc_sock.sendall(f"NICK {IRC_NICK}\r\n".encode("utf-8"))
    irc_sock.sendall(f"USER {IRC_USER} 0 * :DM IRC Bridge\r\n".encode("utf-8"))

    while True:
        response = irc_sock.recv(1024).decode("utf-8", errors="ignore")
        print(f"[IRC INIT] {response.strip()}")
        if response.startswith("PING"):
            pong_val = response.split()[1]
            irc_sock.sendall(f"PONG {pong_val}\r\n".encode("utf-8"))
        if " 001 " in response:
            print("[IRC] Logged in, joining channel...")
            irc_sock.sendall(f"JOIN {IRC_CHANNEL}\r\n".encode("utf-8"))
            break

def irc_receiver():
    """Receive messages from IRC and forward to DM"""
    while not stop_event.is_set():
        try:
            response = irc_sock.recv(1024).decode("utf-8", errors="ignore")
            lines = response.strip().split("\r\n")
            for line in lines:
                print(f"[IRC] {line}")
                if line.startswith("PING"):
                    pong_val = line.split()[1]
                    irc_sock.sendall(f"PONG {pong_val}\r\n".encode("utf-8"))
                elif "PRIVMSG" in line:
                    match = re.match(r":([^!]+)!.* PRIVMSG #[^\s]+ :(.+)", line)
                    if match:
                        nick = match.group(1)
                        message = match.group(2)
                        formatted = f"[IRC:{nick}] {message}\n"
                        dm_sock.sendall(formatted.encode("utf-8"))
        except Exception as e:
            print(f"[IRC ERROR] {e}")
            break

# ===== THREAD STARTER =====
def start_threads():
    threading.Thread(target=dm_keepalive, daemon=True).start()
    threading.Thread(target=dm_receiver, daemon=True).start()
    threading.Thread(target=irc_receiver, daemon=True).start()

# ===== MAIN =====
def main():
    print("[*] Connecting to DM server...")
    dm_sock.connect((DM_HOST, DM_PORT))
    print("[+] DM connected.")

    print("[*] Connecting to IRC server...")
    irc_sock.connect((IRC_HOST, IRC_PORT))
    print("[+] IRC connected.")

    # Log in both services
    dm_login_and_join()
    irc_login_and_join()

    # Start listener threads
    start_threads()

    # Run until interrupted
    try:
        while not stop_event.is_set():
            time.sleep(1)
    except KeyboardInterrupt:
        print("\n[!] Shutting down bridge...")
        stop_event.set()
        dm_sock.close()
        irc_sock.close()

if __name__ == "__main__":
    main()

User avatar
BitByByte
Набирающий обороты
Posts: 24
Joined: Thu Dec 19, 2024 11:18 am
Has thanked: 24 times
Been thanked: 8 times

Re: DMconnect - децентрализованный мессенджер для старых систем.

Post by BitByByte »

dsalin wrote: Fri Jan 09, 2026 7:53 pm Вот код моего "временного" моста, который работал летом:

Code: Select all

import socket
import threading
import time
import re

# ===== CONFIGURATION =====
DM_HOST = "dsalin17.hoho.ws"
DM_PORT = 42439
DM_USERNAME = "bridge_user"     # <<< CHANGE THIS
DM_PASSWORD = "password"     # <<< CHANGE THIS

IRC_HOST = "irc.retronode.org"
IRC_PORT = 6667
IRC_CHANNEL = "#downgrade"
IRC_NICK = "brigita"
IRC_USER = "brigita"

# ===== GLOBAL SOCKETS =====
dm_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
irc_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

stop_event = threading.Event()

# ===== DM CONNECTION & BRIDGE =====
def dm_login_and_join():
    """Login and join 'general' subserver on DM Connect"""
    print("[DM] Logging in...")
    dm_sock.sendall(f"/login {DM_USERNAME} {DM_PASSWORD}\n".encode("utf-8"))

    # Wait for login success
    while True:
        data = dm_sock.recv(1024).decode("utf-8", errors="ignore").strip()
        print(f"[DM INIT] {data}")
        if "logged in" in data.lower() or "success" in data.lower():
            break
        elif "fail" in data.lower() or "incorrect" in data.lower():
            print("[DM] Login failed.")
            stop_event.set()
            return

    print("[DM] Joining 'general' subserver...")
    dm_sock.sendall(b"/join_server general\n")

def dm_keepalive():
    """Send keepalive pings to DM every 5 seconds"""
    while not stop_event.is_set():
        try:
            dm_sock.sendall(b"/")
        except:
            break
        time.sleep(5)

def dm_receiver():
    """Receive messages from DM and forward to IRC"""
    while not stop_event.is_set():
        try:
            data = dm_sock.recv(1024).decode("utf-8", errors="ignore").strip()
            if not data:
                continue
            if "*Ping!*" in data:
                continue
            if "[IRC:" in data:
                continue  # prevent echo loop
            print(f"[DM] {data}")
            irc_sock.sendall(f"PRIVMSG {IRC_CHANNEL} :[DM] {data}\r\n".encode("utf-8"))
        except Exception as e:
            print(f"[DM ERROR] {e}")
            break

# ===== IRC CONNECTION & BRIDGE =====
def irc_login_and_join():
    """Login to IRC and join #downgrade"""
    print("[IRC] Logging in...")
    irc_sock.sendall(f"NICK {IRC_NICK}\r\n".encode("utf-8"))
    irc_sock.sendall(f"USER {IRC_USER} 0 * :DM IRC Bridge\r\n".encode("utf-8"))

    while True:
        response = irc_sock.recv(1024).decode("utf-8", errors="ignore")
        print(f"[IRC INIT] {response.strip()}")
        if response.startswith("PING"):
            pong_val = response.split()[1]
            irc_sock.sendall(f"PONG {pong_val}\r\n".encode("utf-8"))
        if " 001 " in response:
            print("[IRC] Logged in, joining channel...")
            irc_sock.sendall(f"JOIN {IRC_CHANNEL}\r\n".encode("utf-8"))
            break

def irc_receiver():
    """Receive messages from IRC and forward to DM"""
    while not stop_event.is_set():
        try:
            response = irc_sock.recv(1024).decode("utf-8", errors="ignore")
            lines = response.strip().split("\r\n")
            for line in lines:
                print(f"[IRC] {line}")
                if line.startswith("PING"):
                    pong_val = line.split()[1]
                    irc_sock.sendall(f"PONG {pong_val}\r\n".encode("utf-8"))
                elif "PRIVMSG" in line:
                    match = re.match(r":([^!]+)!.* PRIVMSG #[^\s]+ :(.+)", line)
                    if match:
                        nick = match.group(1)
                        message = match.group(2)
                        formatted = f"[IRC:{nick}] {message}\n"
                        dm_sock.sendall(formatted.encode("utf-8"))
        except Exception as e:
            print(f"[IRC ERROR] {e}")
            break

# ===== THREAD STARTER =====
def start_threads():
    threading.Thread(target=dm_keepalive, daemon=True).start()
    threading.Thread(target=dm_receiver, daemon=True).start()
    threading.Thread(target=irc_receiver, daemon=True).start()

# ===== MAIN =====
def main():
    print("[*] Connecting to DM server...")
    dm_sock.connect((DM_HOST, DM_PORT))
    print("[+] DM connected.")

    print("[*] Connecting to IRC server...")
    irc_sock.connect((IRC_HOST, IRC_PORT))
    print("[+] IRC connected.")

    # Log in both services
    dm_login_and_join()
    irc_login_and_join()

    # Start listener threads
    start_threads()

    # Run until interrupted
    try:
        while not stop_event.is_set():
            time.sleep(1)
    except KeyboardInterrupt:
        print("\n[!] Shutting down bridge...")
        stop_event.set()
        dm_sock.close()
        irc_sock.close()

if __name__ == "__main__":
    main()

Мост отправляет из IRC только сообщения (PRIVMSG)?

Return to “Программное обеспечение”