# 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 ""
}
# 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)"
}