1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
|
; ProxyScan v2.0 Alpha 1 by Teppuli (#AndRew & #teppuli @QuakeNet)
on 1:join:#:{
if ($readini(dnsblscan.ini,$chan,status) == on) {
if ($me !isop $chan) { halt }
if (*.users.quakenet.org iswm $site) { halt }
if ($network != QuakeNet) { echo -ag ProxyScan: Warning! I'm not connected to QuakeNet. This script is designed to work only with QuakeNet. | halt }
if (!%dnsbls) { echo -ag ProxyScan: No DNSBL list specified, set it with ".proxy help" | halt }
set -u20 %dnsresolving_ [ $+ [ $nick ] ] $chan
dns $nick
}
}
ctcp *:VERSION:*:{
/.ctcpreply $nick VERSION + ProxyScan v2.0 by Teppuli (#teppuli&#AndRew @ QuakeNet)
halt
}
on 9:text:.proxy *:#:{
if ($2 == version) {
; Version
.notice $nick ProxyScan v2.0 by teppuli & AndRew (Linecount: $lines($script) $+ )
halt
}
if ($2 == status) {
; Status
if (!$readini(dnsblscan.ini,$chan,status)) { .notice $nick ProxyScan status is currently: OFF | halt }
.notice $nick ProxyScan status is currently: $upper($readini(dnsblscan.ini,$chan,status))
halt
}
if ($2 == enable) { writeini dnsblscan.ini $chan status on | .notice $nick Done. ProxyScan is enabled for this channel. | halt }
if ($2 == disable) { writeini dnsblscan.ini $chan status off | .notice $nick Done. ProxyScan is disabled for this channel. | halt }
if ($2 == sources) {
; Get DNSBLs
if (!%dnsbls) { .notice $nick No sources list specified, set it with " $+ $1 setsources <sources separated with space> " | halt }
.notice $nick Sources: %dnsbls
halt
}
if ($2 == setsources) {
; Set DNSBLs
if (!$3) { .notice $nick Usage $1-2 <sources separated with space> | halt }
set %dnsbls $3-
.notice $nick Done. New sources set.
halt
}
if ($2 == kickskin) {
; Set kickskin
if (!$3) { .notice $nick Usage $1-2 <skin> | .notice $nick Variables: :id: :dnsbl: :ip: | halt }
set %dnsbl_kskin $3-
.notice $nick Done. New kickskin set.
halt
}
if ($2 == clearcache) {
; Clear host cache
remini dnsblscan.ini cache
.notice $nick Done. Cache cleared succesfully.
halt
}
if ($2 == getkickskin) {
; Get kickskin
if (!%dnsbl_kskin) { .notice $nick No kickskin set, using default. | halt }
.notice $nick Current kickskin: %dnsbl_kskin
halt
}
if ($2 == listexceptions) {
; List exceptions
.notice $nick Proxy exception list:
var %i = 1
while (%i <= $ini(dnsblexceptions.ini,$chan)) {
var %host = $ini(dnsblexceptions.ini,$chan,%i)
if (%host == $null) { .notice $nick End of Proxy exception list. | halt }
.notice $nick Host: %host
inc %i
}
.notice $nick End of Proxy exception list.
halt
}
if ($2 == addexception) {
; Add exception
if (!$3) { .notice $nick Usage: $1-2 <host> | halt }
if (*!*@* !iswm $3) { .notice $nick Please specify valid host. | halt }
writeini dnsblexceptions.ini $chan $3 valid
.notice $nick Done. Added $+(",$3,") to proxy exception list.
halt
}
if ($2 == delexception) {
; Remove exception
if (!$3) { .notice $nick Usage: $1-2 <host> | halt }
if (*!*@* !iswm $3) { .notice $nick Please specify valid host. | halt }
remini dnsblexceptions.ini $chan $3
.notice $nick Done. Removed $+(",$3,") from proxy exception list.
halt
}
if ($2 == info) {
; Info about status
.notice $nick Status:
.notice $nick Total cached IPs: $ini(dnsblscan.ini,cache,0)
.notice $nick Number of hosts in exception list: $ini(dnsblexceptions.ini,$chan,0)
.notice $nick Proxy kick-ID: $iif(!%proxyid,0,%proxyid)
.notice $nick Status on this channel: $upper($readini(dnsblscan.ini,$chan,status))
halt
}
if ($2 == kickid) {
; Kick ID
.notice $nick Proxy kick-ID: $iif(!%proxyid,0,%proxyid)
halt
}
if ($2 == init) {
; Init script
if ($readini(dnsblscan.ini,::proxy_CINIT,$chan) == g) { .notice $nick ProxyScan is already initialized. | halt }
set %dnsbls cbl.abuseat.org opm.blitzed.org dnsbl.ahbl.org list.dsbl.org sbl.csma.biz dnsbl.njabl.org
writeini dnsblexceptions.ini $chan LM D
writeini dnsblscan.ini cache LM D
remini dnsblscan.ini cache LM
writeini dnsblscan.ini $chan status off
remini dnsblexceptions.ini $chan LM
writeini dnsblscan.ini ::proxy_CINIT $chan g
.notice $nick ProxyScan initialized.
halt
}
if ($2 == scan) {
; Scan user using this feature
if (!$3) { .notice $nick Usage: $1-2 <nickname> | halt }
if ($me !isop $chan) { .notice $nick Im not op here! | halt }
if ($3 !ison $chan) { .notice $nick Error! User $3 isnt on this chan! | halt }
if (*!*@*.users.quakenet.org iswm $address($3,5)) { .notice $nick Error! User $3 has mode +x enabled. | halt }
if (!%dnsbls) { .notice $nick No DNSBL list specified, set it with " $+ $1 help" | halt }
set -u20 %dnsresolving_ [ $+ [ $3 ] ] $chan
dns $3
.notice $nick Scanning in process... You
halt
}
if ($2 == help) { .notice $nick Usage: $1 help/kickid/init/info/scan/setsources/sources/clearcache/enable/disable/status/kickskin/getkickskin/version/addexception/listexceptions/delexception | halt }
.notice $nick Usage: $1 help/kickid/init/info/scan/setsources/sources/clearcache/enable/disable/status/kickskin/getkickskin/version/addexception/listexceptions/delexception | halt
}
on 1:DNS:{
if ($dns(0) == 0) { halt }
if (%dnsresolving_ [ $+ [ $dns(1).nick ] ]) {
dnsblcheck $dns(1).ip $dns(1).nick %dnsresolving_ [ $+ [ $dns(1).nick ] ]
}
if (!$readini(dnsblcheck.ini,$gettok($dns(1),1-4,46),channel)) { halt }
var %host = $address($readini(dnsblcheck.ini,$gettok($dns(1),1-4,46),nick),2)
inc %proxyid
var %kskin = Banned: Open proxy resolved from DNSBL :dnsbl:. ID: :id:
if (%dnsbl_kskin) { var %kskin = %dnsbl_kskin }
kick $readini(dnsblcheck.ini,$gettok($dns(1),1-4,46),channel) $readini(dnsblcheck.ini,$gettok($dns(1),1-4,46),nick) $replace(%kskin,:ip:,$reversebytes($gettok($dns(1),1-4,46)),:id:,%proxyid,:dnsbl:,$deltok($dns(1),1-4,46))
mode $readini(dnsblcheck.ini,$gettok($dns(1),1-4,46),channel) +b %host
echo -ag ProxyScan: dnsblcheck: Open proxy detected. DNSBL: $deltok($dns(1),1-4,46) CHAN: $readini(dnsblcheck.ini,$gettok($dns(1),1-4,46),channel) NICK: $readini(dnsblcheck.ini,$gettok($dns(1),1-4,46),nick) IP (reversed): $gettok($dns(1),1-4,46)
writeini dnsblscan.ini cache $gettok($dns(1),1-4,46) $deltok($dns(1),1-4,46)
timer 1 300 mode $readini(dnsblcheck.ini,$gettok($dns(1),1-4,46),channel) -b %host
}
on 9:text:.proxy:#:{ .notice $nick Usage: $1 help/info/scan/setsources/sources/clearcache/enable/disable/status/kickskin/getkickskin/version/addexception/listexceptions/delexception | halt }
on 1:load:{ echo -ag ProxyScan v2.0 A1 loaded first time. REMEMBER TO TYPE .proxy init TO INITIALIZE THIS SCRIPT! }
alias reversebytes {
tokenize 46 $1
return $+($4,.,$3,.,$2,.,$1)
}
alias dnsblcheck {
if (!%dnsbls) { echo -ag ProxyScan: dnsblcheck: No DNSBL list specified, halting | halt }
var %i = 1
while (%i <= $ini(dnsblexceptions.ini,$3)) {
var %host = $ini(dnsblexceptions.ini,$3,%i)
if (%host iswm $address($2,2)) { echo -ag ProxyScan: dnsblcheck: Nickname is in exception list, halting. | notice $2 Because you're in our proxy exception list, you don't get scanned for open proxies. | halt }
inc %i
}
var %address = $reversebytes($1)
var %i = 1
while (%i <= $ini(dnsblscan.ini,cache)) {
var %dnsblused = $readini(dnsblscan.ini,cache,$ini(dnsblscan.ini,cache,%i))
var %ipaddr = $ini(dnsblscan.ini,cache,%i)
if (%ipaddr == %address) {
echo -ag dnsblcheck: Cached address %address detected on $3 $+ , banning nick $2
var %host = $address(2,2)
inc %proxyid
var %kskin = Banned: Cached open proxy resolved from DNSBL :dnsbl:. ID: :id:
if (%dnsbl_kskin) { var %kskin = %dnsbl_kskin }
kick $3 $2 $replace(%kskin,:id:,%proxyid,:dnsbl:,%dnsblused)
echo -ag ProxyScan: dnsblcheck: Open proxy detected (used cache). DNSBL: %dnsblused CHAN: $3 NICK: $2 IP (normal-reversed): $1 $+ %address
; READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ
; ----------------------------------------------------------------------------------------------------------------------------
; Following message is sent to user, if he/she is in cache.
notice $2 You're in our proxy cache database. Maybe you are'nt proxy? Then send message to channel admin, please :)
; ----------------------------------------------------------------------------------------------------------------------------
; READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ
mode $3 +b %host
timer 1 300 mode $3 -b %host
}
inc %i
}
var %i = 1
while (%i <= $numtok(%dnsbls,32)) {
writeini dnsblcheck.ini %address channel $3
writeini dnsblcheck.ini %address nick $2
timer 1 60 remini dnsblcheck.ini %address
dns $+(%address,.,$gettok(%dnsbls,%i,32))
inc %i
}
}
|