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