En iyi Webmaster forumlari.
iyilerin buluşma noktasi.

Son İletiler

#1
Eggdrop tcl scripting / Ynt: Proxy koruma tcl
Son İleti Gönderen Administrator - Ağu 02, 2025, 03:38 ÖS
  # proxyconnect.tcl - Client connecting IP'lerine göre proxy kontrolü
# Eggdrop'ın oper olması gerekir (server notice alabilmeli)

set proxylist_file "proxy.txt"
set opernick "BotNick" ;# GLINE için oper nick (gerekirse)

# IP listesi yükleme
proc load_proxy_list {} {
    global proxy_list proxylist_file
    set proxy_list {}
    if {[file exists $proxylist_file]} {
        set fp [open $proxylist_file r]
        while {[gets $fp line] >= 0} {
            set line [string trim $line]
            if {$line ne ""} {
                lappend proxy_list $line
            }
        }
        close $fp
        putlog "ProxyConnect: [llength $proxy_list] IP yüklendi."
    } else {
        putlog "ProxyConnect: proxy.txt bulunamadı!"
    }
}
load_proxy_list

# Sunucu NOTICE'lerini yakala
bind raw - "NOTICE" raw_notice_handler

# NOTICE handler
proc raw_notice_handler {from keyword text} {
    global proxy_list

    # Örnek: *** Client connecting on port 6667: TestNick!user@1.2.3.4
    if {[regexp {Client connecting on port \d+: .*?@([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)} $text -> ip]} {
        putlog "ProxyConnect: Bağlantı IP tespit edildi: $ip"

        foreach proxyip $proxy_list {
            if {[string match "$proxyip*" $ip]} {
                putlog "ProxyConnect: Proxy IP tespit edildi: $ip -> GLINE gönderiliyor."
                send_gline $ip
                return
            }
        }
    }
}

# GLINE gönderimi
proc send_gline {ip} {
    set reason "Proxy bağlantısı tespit edildi."
    putserv "GLINE *@$ip 1d :$reason"
    putlog "ProxyConnect: GLINE atıldı -> *@$ip ($reason)"
}
 
#2
Eggdrop tcl scripting / Proxy koruma tcl
Son İleti Gönderen Administrator - Ağu 01, 2025, 09:20 ÖÖ
  # proxycheck.tcl - proxy.txt üzerinden GLINE atan koruma sistemi

set proxylist_file "proxy.txt"
set oper_nick "BotNick"  ;# Oper yetkili nick'in burada tanımlı olmalı

bind evnt - init-server load_proxy_list
bind evnt - user-login check_user_proxy

# Proxy listesi belleğe yüklenir
proc load_proxy_list {} {
    global proxylist_file proxy_list

    if {![file exists $proxylist_file]} {
        putlog "ProxyCheck: proxy.txt bulunamadı!"
        return
    }

    set fp [open $proxylist_file r]
    set proxy_list {}
    while {[gets $fp line] >= 0} {
        set line [string trim $line]
        if {[regexp {^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $line]} {
            lappend proxy_list $line
        }
    }
    close $fp
    putlog "ProxyCheck: [llength $proxy_list] proxy IP yüklendi."
}

# Kullanıcı giriş yaptığında IP kontrolü yapılır
proc check_user_proxy {nick user host hand} {
    global proxy_list

    set fullip [getip $nick]
    if {$fullip eq ""} {
        putlog "ProxyCheck: $nick için IP alınamadı."
        return
    }

    foreach proxyip $proxy_list {
        if {[string match "$proxyip*" $fullip]} {
            putlog "ProxyCheck: $nick ($fullip) PROXY tespit edildi. GLINE atılıyor."
            send_gline $nick $fullip
            return
        }
    }
}

# GLINE gönderimi
proc send_gline {nick ip} {
    set reason "Proxy bağlantısı tespit edildi."
    putserv "OPER $::oper_nick password" ;# Gerekirse OPER ol
    putserv "GLINE *@$ip 1d :$reason"
    putlog "ProxyCheck: GLINE atıldı -> *@$ip ($reason)"
}

# IP adresini al
proc getip {nick} {
    if {[info exists ::laston($nick)]} {
        return $::laston($nick)
    }
    return ""
}
 
#3
UNREALIRCD / Unrealircd kurulum
Son İleti Gönderen Administrator - Tem 30, 2025, 12:54 ÖÖ
UnrealIRCd İndir (tar.gz)
✅ Resmi indirme sayfası:
https://www.unrealircd.org/downloads

📥 Doğrudan indir (en son sürüm - örnek):

  wget https://www.unrealircd.org/downloads/unrealircd-6.1.4.tar.gz
 

UnrealIRCd Kurulum Adımları (Linux)

  # 1. Gerekli bağımlılıkları yükle
sudo apt update && sudo apt install build-essential libssl-dev pkg-config libpcre2-dev zlib1g-dev curl

# 2. İndirilen arşivi aç
tar xvf unrealircd-6.1.4.tar.gz
cd unrealircd-6.1.4

# 3. Yapılandırma sihirbazını başlat
./Config

# 4. Derleme ve kurulum
make
make install

# 5. Başlatma
cd ~/unrealircd
./unrealircd start
 

Kurulumdan Sonra Dikkat Etmen Gerekenler

unrealircd.conf dosyasını düzenlemelisin (sunucu ayarları, portlar, yetkiler, services bağlantısı vs.)

unrealircd.conf Örnek Konfigürasyon:

   # UnrealIRCd 6 için örnek konfigürasyon

# Sunucu bilgileri
me {
    name "irc.sohbetim.net";
    info "Sohbet IRC Sunucusu";
    sid "001";
};

admin {
    "Erkan KUTLU";
    "IRC Admin";
    "admin@sohbetim.net";
};

class clients {
    pingfreq 90;
    maxclients 500;
    sendq 100000;
    recvq 8000;
};

class servers {
    pingfreq 60;
    maxclients 10;
    sendq 1000000;
    connfreq 30;
};

listen {
    ip *;
    port 6667;
};

allow {
    ip             *@*;
    hostname       *@*;
    class          clients;
    maxperip       5;
};

allow {
    ip             127.0.0.1;
    hostname       localhost;
    class          servers;
    password       "sunucu_sifresi";
};

link services.sohbetim.net {
    incoming {
        mask *;
        password "sunucu_sifresi";
    }
    outgoing {
        hostname 127.0.0.1;
        port 7070;
        password "sunucu_sifresi";
    }
    class servers;
};

ulines {
    services.sohbetim.net;
};

drpass {
    restart "restart123";
    die     "die123";
};

oper erkan {
    class clients;
    from {
        userhost *@*;
    }
    password "gizlisifre";
    flags {
        netadmin;
        can_zline;
        can_gzline;
        can_gkline;
        global;
    }
};

set {
    network-name         "SohbetimNet";
    default-server       "irc.sohbetim.net";
    services-server      "services.sohbetim.net";
    stats-server         "stats.sohbetim.net";
    help-channel         "#yardim";
    hiddenhost-prefix    "user";
    cloak-keys {
        "a1b2c3d4";
        "e5f6g7h8";
        "i9j0k1l2";
    }
    hosts {
        local            "locop.sohbetim.net";
        global           "ircop.sohbetim.net";
        coadmin          "coadmin.sohbetim.net";
        admin            "admin.sohbetim.net";
        servicesadmin    "csops.sohbetim.net";
        netadmin         "netadmin.sohbetim.net";
        host-on-oper-up "yes";
    }
};

log "ircd.log" {
    maxsize 1000000;
    flags {
        oper;
        connects;
        server-connects;
        kills;
        errors;
        sadmin-commands;
        chg-commands;
        tkl;
    }
};

include "modules.default.conf";
include "aliases/anope.conf";  # Anope services kullanıyorsan
 

Ekstra Notlar:
services.sohbetim.net yerine kendi Anope sunucu adresini yaz.

irc.sohbetim.net, netadmin, restart123 gibi değerleri kendine göre değiştir.

include "aliases/anope.conf" Anope Services için gereklidir.
#4
Eggdrop tcl scripting / Ynt: Cycle2.tcl
Son İleti Gönderen Administrator - Tem 29, 2025, 12:08 ÖS
   # cycle.tcl - Eggdrop Sahte Services Bot Cycle Sistemi
# Kodlayan: OpenAI - 2025

# Ayarlar
set cycle_channel "#kanaladi"
set cycle_delay_min 30
set cycle_delay_max 60
set cycle_hour_start 22
set cycle_hour_end 2
set cycle_nickfile "nick.txt"

# Değişkenler
set cycle_users {}
set cycle_active 1

# Nick listesini yükle
proc load_cycle_nicks {} {
    if {![file exists $::cycle_nickfile]} { return }
    set f [open $::cycle_nickfile r]
    set data [read -nonewline $f]
    close $f
    set ::cycle_users [split $data "\n"]
}

# Rastgele delay belirle
proc rand_cycle_delay {} {
    return [expr {$::cycle_delay_min + int(rand() * ($::cycle_delay_max - $::cycle_delay_min + 1))}]
}

# Geçerli saat
proc get_hour {} {
    return [clock format [clock seconds] -format "%H"]
}

# Saat kontrolü
proc cycle_check_time {} {
    set hour [get_hour]
    if {$::cycle_hour_end < $::cycle_hour_start} {
        return [expr {$hour >= $::cycle_hour_start || $hour < $::cycle_hour_end}]
    } else {
        return [expr {$hour >= $::cycle_hour_start && $hour < $::cycle_hour_end}]
    }
}

# Cycle işlemi
proc cycle_user {} {
    if {!$::cycle_active} return
    if {![cycle_check_time]} {
        utimer 60 cycle_user
        return
    }
    if {[llength $::cycle_users] == 0} {
        load_cycle_nicks
    }
    set nick [lindex $::cycle_users [expr {int(rand() * [llength $::cycle_users])}]]
    set delay [rand_cycle_delay]

    # JOIN
    putquick "PRIVMSG OperServ :RAW :NICK $nick"
    utimer 1 [list putquick "PRIVMSG OperServ :RAW :USER $nick * * :Cycle Bot"]
    utimer 2 [list putquick "PRIVMSG OperServ :RAW :JOIN $::cycle_channel"]

    # PART (kanaldan çıkış)
    utimer [expr {$delay - 2}] [list putquick "PRIVMSG OperServ :RAW :PART $::cycle_channel :Cycle Part"]

    # QUIT (sunucudan çıkış)
    utimer [expr {$delay}] [list putquick "PRIVMSG OperServ :RAW :QUIT :Cycle Out"]

    # Tekrarla
    utimer [expr {$delay + 5}] cycle_user
}

# Başlat / Durdur
proc cycle_start {} {
    set ::cycle_active 1
    load_cycle_nicks
    cycle_user
}

proc cycle_stop {} {
    set ::cycle_active 0
}

# Komutlar
bind pub o !cyclestart pub_cycle_start
bind pub o !cyclestop pub_cycle_stop
bind pub o !cyclereload pub_cycle_reload

proc pub_cycle_start {nick uhost hand chan arg} {
    cycle_start
    putserv "PRIVMSG $chan :Cycle bot başlatıldı."
}

proc pub_cycle_stop {nick uhost hand chan arg} {
    cycle_stop
    putserv "PRIVMSG $chan :Cycle bot durduruldu."
}

proc pub_cycle_reload {nick uhost hand chan arg} {
    load_cycle_nicks
    putserv "PRIVMSG $chan :nick.txt yeniden yüklendi."
}

# Otomatik başlat
load_cycle_nicks
cycle_user
 
#5
Eggdrop tcl scripting / Ynt: Snotice proxy
Son İleti Gönderen Administrator - Tem 29, 2025, 05:16 ÖÖ
  # Eggdrop IRC Proxy / Tor / DNSBL Koruma Sistemi
# Gelişmiş kontrol modülü: proxy.txt + tor.txt + DNSBL + admin komutları

set proxylist_file "proxy.txt"
set torlist_file "tor.txt"
set log_file "proxy_detect.log"

# DNSBL sunucuları
set dnsbl_servers {
    "dnsbl.dronebl.org"
    "rbl.efnetrbl.org"
    "dnsbl.tornevall.org"
}

# Proxy port listesi
set proxy_ports {1080 3128 8080 8000 6588 553 81 9999 23}

# Admin tanımla
set admin_users {"Erkan" "Admin"}

# Başlangıçta listeleri yükle
set proxy_list {}
set tor_list {}
load_lists

# ==============================
# Dosya Okuma
# ==============================

proc load_lists {} {
    global proxylist_file torlist_file proxy_list tor_list

    if {[file exists $proxylist_file]} {
        set fp [open $proxylist_file r]
        set proxy_list [split [read $fp] "\n"]
        close $fp
    }

    if {[file exists $torlist_file]} {
        set fp [open $torlist_file r]
        set tor_list [split [read $fp] "\n"]
        close $fp
    }
}

# ==============================
# Kontrol Fonksiyonları
# ==============================

proc is_proxy_ip {ip} {
    global proxy_list
    foreach p $proxy_list {
        if {[string match "*$p*" $ip]} { return 1 }
    }
    return 0
}

proc is_tor_ip {ip} {
    global tor_list
    foreach t $tor_list {
        if {[string match "*$t*" $ip]} { return 1 }
    }
    return 0
}

proc is_proxy_port {port} {
    global proxy_ports
    return [expr {$port in $proxy_ports}]
}

# ==============================
# Loglama
# ==============================

proc log_detect {type ip port} {
    global log_file
    set time [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S"]
    set f [open $log_file a]
    puts $f "$time - $type: $ip:$port"
    close $f
}

# ==============================
# IRC'den Giriş Tespiti
# ==============================

bind raw - "* NOTICE *" detect_connection

proc detect_connection {from keyword arg} {
    if {[regexp {Client connecting on port ([0-9]+): ([0-9\.]+)} $arg -> port ip]} {
        set matched 0

        if {[is_proxy_ip $ip]} {
            log_detect "PROXY-LIST" $ip $port
            set matched 1
        }

        if {[is_tor_ip $ip]} {
            log_detect "TOR-EXIT" $ip $port
            set matched 1
        }

        if {[is_proxy_port $port]} {
            log_detect "PROXY-PORT" $ip $port
            set matched 1
        }

        if {$matched} {
            putserv "GLINE $ip 1d :Proxy veya Tor bağlantısı tespit edildi"
        }
    }
}

# ==============================
# Admin Komutları
# ==============================

bind pub - "!proxykontrol" cmd_proxykontrol
bind pub - "!proxyekle" cmd_proxyekle
bind pub - "!proxykaldir" cmd_proxykaldir
bind pub - "!proxylist" cmd_proxylist
bind pub - "!torliste" cmd_torliste
bind pub - "!dnsblkontrol" cmd_dnsbl

proc is_admin {nick} {
    global admin_users
    return [expr {$nick in $admin_users}]
}

proc cmd_proxykontrol {nick host hand chan arg} {
    if {![is_admin $nick]} return
    if {$arg eq ""} {
        putserv "PRIVMSG $chan :Kullanım: !proxykontrol <ip>"
        return
    }

    set msg "IP: $arg - "
    if {[is_proxy_ip $arg]} { append msg "proxy.txt ✅ " }
    if {[is_tor_ip $arg]} { append msg "tor.txt ✅ " }
    putserv "PRIVMSG $chan :$msg"
}

proc cmd_proxyekle {nick host hand chan arg} {
    if {![is_admin $nick]} return
    if {$arg eq ""} return
    set fp [open $::proxylist_file a]
    puts $fp $arg
    close $fp
    load_lists
    putserv "PRIVMSG $chan :$arg proxy listesine eklendi."
}

proc cmd_proxykaldir {nick host hand chan arg} {
    if {![is_admin $nick]} return
    if {$arg eq ""} return
    set newlist {}
    foreach line $::proxy_list {
        if {$line ne $arg} {
            lappend newlist $line
        }
    }
    set fp [open $::proxylist_file w]
    foreach item $newlist { puts $fp $item }
    close $fp
    load_lists
    putserv "PRIVMSG $chan :$arg proxy listesinden çıkarıldı."
}

proc cmd_proxylist {nick host hand chan arg} {
    if {![is_admin $nick]} return
    putserv "PRIVMSG $chan :Proxy.txt → [join $::proxy_list ", "]"
}

proc cmd_torliste {nick host hand chan arg} {
    if {![is_admin $nick]} return
    putserv "PRIVMSG $chan :Tor.txt → [join $::tor_list ", "]"
}

proc cmd_dnsbl {nick host hand chan ip} {
    if {![is_admin $nick]} return
    if {![regexp {^([0-9]+\.){3}[0-9]+$} $ip]} {
        putserv "PRIVMSG $chan :Geçersiz IP"
        return
    }

    set revip [join [lreverse [split $ip "."]] "."]
    foreach dnsbl $::dnsbl_servers {
        set query "$revip.$dnsbl"
        dnslookup $query [list dnsbl_result $chan $dnsbl $ip]
    }
}

proc dnsbl_result {chan dnsbl ip addr status} {
    if {$status eq "OK"} {
        putserv "PRIVMSG $chan :$ip → $dnsbl LİSTELENMİŞ ❌"
    } else {
        putserv "PRIVMSG $chan :$ip → $dnsbl temiz ✅"
    }
}
 
#6
Eggdrop tcl scripting / Ynt: Snotice proxy
Son İleti Gönderen Administrator - Tem 29, 2025, 01:55 ÖÖ
# Proxy Port + IP Tespiti - "Client connecting on port" satırlarını tarar
# IRC sunucusundan gelen NOTICE/SNOTICE loglarında çalışır

set proxylist_file "proxy.txt"
set proxy_ports {1080 3128 8080 8000 6588 553 81 9999 6666 23}
set log_file "proxy_detected.log"
set kick_reason "Proxy bağlantısı tespit edildi. Erişiminiz engellendi."

# Proxy IP listesi yükle
proc load_proxy_list {} {
    global proxylist_file proxy_list
    set proxy_list {}
    if {[file exists $proxylist_file]} {
        set fp [open $proxylist_file r]
        set proxy_list [split [read $fp] "\n"]
        close $fp
    }
}

# IP proxy.txt içinde mi?
proc is_proxy_ip {ip} {
    global proxy_list
    foreach entry $proxy_list {
        if {$entry eq ""} { continue }
        if {[string match "*$entry*" $ip]} {
            return 1
        }
    }
    return 0
}

# Port şüpheli mi?
proc is_proxy_port {port} {
    global proxy_ports
    return [expr {$port in $proxy_ports}]
}

# Log yaz
proc log_proxy_detected {ip port reason} {
    global log_file
    set now [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S"]
    set fp [open $log_file a]
    puts $fp "$now - $ip:$port - $reason"
    close $fp
}

# IRC'den gelen satırları izle
bind raw - "* NOTICE *" client_connect_check

proc client_connect_check {from keyword arg} {
    # Örnek satır: "Client connecting on port 1080: 123.45.67.89"
    if {[string match -nocase "*Client connecting on port*" $arg]} {
        if {[regexp {Client connecting on port ([0-9]+): ([0-9\.]+)} $arg -> port ip]} {

            set matched 0

            if {[is_proxy_ip $ip]} {
                log_proxy_detected $ip $port "proxy.txt içinde"
                set matched 1
            }

            if {[is_proxy_port $port]} {
                log_proxy_detected $ip $port "şüpheli port"
                set matched 1
            }

            if {$matched} {
                # Dilersen notice, kill, gline, vs.
                putserv "KILL $ip :$::kick_reason"
                # Alternatif: putserv "GLINE $ip 1d :$::kick_reason"
            }
        }
    }
}

# Başlangıçta proxy listesi yüklenir
load_proxy_list
 
#7
Eggdrop tcl scripting / Snotice proxy
Son İleti Gönderen Administrator - Tem 28, 2025, 02:07 ÖS
  # IRC'den gelen satırda "Client connecting on port" varsa, proxy.txt'e göre kontrol eder

set proxylist_file "proxy.txt"
set proxy_notice_msg "Proxy tespit edildi: IP adresiniz listede."
set proxy_trigger_phrase "Client connecting on port"
set proxy_log_file "proxy_snotice.log"

# proxy.txt içeriğini oku
proc load_proxy_list {} {
    global proxylist_file proxy_list
    set proxy_list {}
    if {[file exists $proxylist_file]} {
        set fp [open $proxylist_file r]
        set proxy_list [split [read $fp] "\n"]
        close $fp
    }
}

# IP proxy listesinde mi?
proc is_proxy_ip {ip} {
    global proxy_list
    foreach proxy_entry $proxy_list {
        if {$proxy_entry eq ""} { continue }
        if {[string match "*$proxy_entry*" $ip]} {
            return 1
        }
    }
    return 0
}

# Loglama
proc log_proxy_event {ip port} {
    global proxy_log_file
    set time [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S"]
    set fp [open $proxy_log_file a]
    puts $fp "$time - Proxy IP tespit edildi: $ip (Port $port)"
    close $fp
}

# RAW satırları dinle
bind raw - "* NOTICE *" monitor_proxy_notice

proc monitor_proxy_notice {from keyword arg} {
    global proxy_trigger_phrase

    if {[string match -nocase "*$proxy_trigger_phrase*" $arg]} {
        # Örnek satırdan IP ve port ayıkla
        # Örnek: "Client connecting on port 1080: 123.45.67.89"
        if {[regexp {Client connecting on port ([0-9]+): ([0-9\.]+)} $arg -> port ip]} {
            if {[is_proxy_ip $ip]} {
                log_proxy_event $ip $port
                # Burada işlem yapılabilir, örneğin botun owner'ına notice at
                putserv "PRIVMSG $::owner_nick :Proxy IP tespit edildi: $ip (port $port)"
            }
        }
    }
}
 
#8
Eggdrop tcl scripting / Proxy.tcl
Son İleti Gönderen Administrator - Tem 28, 2025, 12:19 ÖÖ
# Proxy / TOR koruma sistemi (Eggdrop TCL)
# Gereksinimler: proxy.txt (engelli IP listesi), DNSBL destekli

setudef flag proxyblock

# DNSBL listesi (örnek)
set dnsbllist {
    "dnsbl.dronebl.org"
    "tor.dnsbl.sectoor.de"
    "rbl.efnetrbl.org"
}

# Client bağlandığında IP kontrol
bind evnt - init-server check_proxy_init

proc check_proxy_init {type} {
    bind raw - "001" check_proxy_load
}

# Kullanıcı listesi yüklendiğinde başla
proc check_proxy_load {from keyword text} {
    unbind raw - "001" check_proxy_load
    utimer 3 start_proxy_scan
}

# Bağlı kullanıcıları kontrol et
proc start_proxy_scan {} {
    foreach user [handlist] {
        set ip [getuser $user XTRA:ip]
        if {[string length $ip] > 6} {
            check_dnsbl $user $ip
        }
    }
}

# DNSBL sorgusu başlat
proc check_dnsbl {nick ip} {
    foreach bl $::dnsbllist {
        set reversed_ip [join [lreverse [split $ip "."]] "."]
        set query "$reversed_ip.$bl"
        dnslookup -t a $query [list dnsbl_result $nick $ip $bl]
    }
}

# DNSBL sonucu
proc dnsbl_result {nick ip bl status result} {
    if {$status == 0 && $result ne ""} {
        putlog "Proxy/TOR Tespit: $nick ($ip) $bl tarafından listelenmiş."
        putserv "PRIVMSG $nick :Sunucu koruması: IP adresiniz $bl DNSBL listesinde bulunuyor (Proxy/TOR). Bağlantınız engellenebilir."
        putserv "KILL $nick :[random_reason]"
        # AKILL sistemi varsa ekle:
        # putserv "OPERSPY AKILL ADD $ip 1d TOR/Proxy IP engellendi."
    }
}

# Rasgele sebep üretici
proc random_reason {} {
    set reasons {
        "Proxy kullanımı yasaktır."
        "Güvenlik nedeniyle bağlantınız reddedildi."
        "TOR ağı tespit edildi."
        "Sunucu kurallarını ihlal ettiniz."
    }
    return [lindex $reasons [rand [llength $reasons]]]
}
   
#9
Eggdrop tcl scripting / Proxy koruma
Son İleti Gönderen Administrator - Tem 28, 2025, 12:14 ÖÖ
  # proxy_onconnect.tcl - Kullanıcı sunucuya bağlandığında IP'sini kontrol eder (on-connect)
# Eğer proxy.txt veya DNSBL eşleşmesi varsa, kullanıcı IRC'den atılır.

set proxylist "proxy.txt"
set dnsbl_servers {
    "dnsbl.dronebl.org"
    "dnsbl.tornevall.org"
    "rbl.efnetrbl.org"
    "dnsbl.proxybl.org"
}

bind raw - "NICK" proxy:onconnect_check

proc proxy:onconnect_check {from keyword text} {
    # Gelen kullanıcıyı ayrıştır (nick, ident, host)
    if {[regexp {^:?([^!]+)!([^@]+)@(.+)} $text -> nick ident host]} {
        set ip [proxy:getip $host]
        if {$ip eq ""} return

        # Local proxy.txt kontrol
        if {[proxy:checklist $ip]} {
            putlog "proxy_onconnect: $nick -> IP $ip = proxy.txt eşleşmesi"
            proxy:kickuser $nick "Proxy bağlantı tespit edildi (local)"
            return
        }

        # DNSBL kontrol
        foreach dnsbl $::dnsbl_servers {
            if {[proxy:dnsbl_check $ip $dnsbl]} {
                putlog "proxy_onconnect: $nick -> IP $ip = $dnsbl eşleşmesi"
                proxy:kickuser $nick "Blacklist ($dnsbl)"
                return
            }
        }
    }
}

proc proxy:getip {host} {
    if {[regexp {(\d+\.\d+\.\d+\.\d+)} $host -> ip]} {
        return $ip
    }
    return ""
}

proc proxy:checklist {ip} {
    if {![file exists $::proxylist]} { return 0 }
    set f [open $::proxylist r]
    set data [split [read $f] "\n"]
    close $f
    return [expr {$ip in $data}]
}

proc proxy:dnsbl_check {ip dnsbl} {
    set parts [split $ip "."]
    if {[llength $parts] != 4} { return 0 }
    set revip "[lindex $parts 3].[lindex $parts 2].[lindex $parts 1].[lindex $parts 0].$dnsbl"
    set result [dnslookup $revip]
    return [expr {$result ne ""}]
}

proc proxy:kickuser {nick reason} {
    # Kullanıcıyı IRC'den atmak için NOTICE + QUIT veya ircd'ye göre KILL/AKILL kullanılabilir
    putserv "NOTICE $nick :Güvenlik uyarısı: $reason"
    putserv "KILL $nick :Proxy / Tor bağlantılar yasaktır"
}
 
#10
Eggdrop tcl scripting / Cycle2.tcl
Son İleti Gönderen Administrator - Tem 27, 2025, 09:21 ÖÖ
  # cycle.tcl - Sahte services kullanıcıları nick.txt üzerinden join/part/quit yapar
# Özellikler:
# ✅ Rastgele delay süresi
# ✅ Saat aralığı kontrolü (örn: 22:00 - 02:00)

set cycle(chan) "#genel"             ;# Hedef kanal
set cycle(delaymin) 40               ;# Minimum bekleme süresi
set cycle(delaymax) 90               ;# Maksimum bekleme süresi
set cycle(nickfile) "nick.txt"       ;# Kullanıcı nicklerinin bulunduğu dosya

set cycle(start_hour) 22             ;# Başlangıç saati (örnek: 22:00)
set cycle(end_hour)   2              ;# Bitiş saati (örnek: 02:00)

bind evnt - init-server cycle:init

proc cycle:init {} {
    global cycle
    set cycle(users) [cycle:loadnicks $cycle(nickfile)]
    cycle:next 0
}

proc cycle:loadnicks {filename} {
    if {[file exists $filename]} {
        set fp [open $filename r]
        set data [split [read $fp] "\n"]
        close $fp
        return [lsearch -inline -all $data *]
    } else {
        putlog "cycle.tcl: nick.txt bulunamadı!"
        return {}
    }
}

proc cycle:inTimeRange {} {
    global cycle

    set now_hour [clock format [clock seconds] -format %H]
    set hour [expr {int($now_hour)}]

    set start $cycle(start_hour)
    set end $cycle(end_hour)

    if {$start < $end} {
        return [expr {($hour >= $start) && ($hour < $end)}]
    } else {
        # Gece geçişi (örn: 22:00 - 02:00 gibi)
        return [expr {($hour >= $start) || ($hour < $end)}]
    }
}

proc cycle:randdelay {} {
    global cycle
    return [expr {int(rand() * ($cycle(delaymax) - $cycle(delaymin) + 1)) + $cycle(delaymin)}]
}

proc cycle:next {index} {
    global cycle

    if {![cycle:inTimeRange]} {
        putlog "cycle.tcl: Saat aralığı dışında. Kontrol 60s sonra tekrar edilecek."
        utimer 60 [list cycle:next $index]
        return
    }

    if {[llength $cycle(users)] == 0} {
        putlog "cycle.tcl: Kullanıcı listesi boş!"
        return
    }

    if {$index >= [llength $cycle(users)]} {
        set index 0
    }

    set nick [lindex $cycle(users) $index]
    set nextindex [expr {$index + 1}]
    set chan $cycle(chan)

    putquick "NICK $nick"
    putquick "JOIN $chan"

    set delay [cycle:randdelay]
    putlog "cycle.tcl: $nick -> $chan (delay: $delay saniye)"
    utimer $delay [list cycle:part $nick $chan $nextindex]
}

proc cycle:part {nick chan nextindex} {
    putquick "PART $chan"
    utimer 2 [list putquick "QUIT :Cycled out"]
    utimer 4 [list cycle:next $nextindex]
}