ويكيبيديا:بوت/منع البروكسيات المفتوحة

بوت منع البروكسيات المفتوحة هو بوت مختص بالإداريين و يمكنهم إستخدامه ليستخرجوا قائمة البروكسيات المفتوحة ومن ثم يقوموا بمنعها. هذا الأجراء يتم بمرحلتين والمرحلة الأولي هي استخراج القائمة و المرحلة الثانية منع البروكسيات الموجودة في القائمة. للقيام بالمرحلة الأولي لابد علي الإداري ان يملك حساب علي التولسيرفر لكن المرحلة الثانية يمكن القيام بها من الجهاز الشخصي.

  • في حال عدم إمتلاك الإداري لحساب علي التولسيرفر يمكنه أن يطلب هذا من أحد الزملاء الذين يملكون الحساب
  • لإجراء هذا البوت عليك نسخ userlib2.py المعدَّل في المجلد الذي فيه هذا البوت(pywikipedia)
  • لاحاجة لإجراء هذا البوت في فترات قريبة. فكل ستة أشهر سيقوم أحد الإداريين بإجرائه

استخراج البروكسيات عدل

يمكننا أن نستخرج قائمة البروكسيات المفتوحة من الويكبديا الإنجليزية باستخدام الكود الأسفل.

SELECT
  ipb_address
FROM ipblocks
WHERE ipb_expiry > DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 YEAR),'%Y%m%d%H%i%s')
AND ipb_expiry != "infinity"
AND ipb_user = 0;

انسخوا هذا الكود و الصقوه في ملف بأسم enBolckedPoxies.sql وثم انقلوه الي ملفكم في التولسيرفر. لإستخراج قائمة البروكسيات اكتبوا الأمر (command) التالي

PuTTY

بدلا من الـyouracount اكتب اسم حسابك علي التولسيرفر

نتيجه هذا العمل هو إنشاء ملف بأسم enBolckedPoxies.txt في مجلد pywikipedia

الكود عدل

#!/usr/bin/python
# -*- coding: utf-8  -*-
#
# Reza(User:reza1615), 2011
#
# Distributed under the terms of the CC-BY-SA 3.0 .
# it is only runs as sysop
import userlib2
import login
import config,time
import wikipedia,codecs
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
def blockuser(user):
   site=wikipedia.getSite('ar')  
   reasons=u'منع البروكسيات المفتوحة'
   IP=userlib2.User(site,user)    
   #-----------log in as sysop---------------   
   IP.block(expiry=u'6 months',reason=reasons,noCreate=True,onAutoblock=True,anon=True)
   wikipedia.output(u'\03{lightgreen}'+user+u' now is blocked\03{default}')    
 
def main():
    site=wikipedia.getSite('ar')
    try:
        text = codecs.open(u'/home/youracount/pywikipedia/enBolckedPoxies.txt','r' ,'utf8')#youacount is your acount name in toolserver
    except:
        text = codecs.open(u'enBolckedPoxies.txt','r' ,'utf8')    
    text = text.read()
    text=text.replace(u'\r',u'')
    IPs=text.split(u'\n')
    try:
       password_fa = open(wikipedia.config.datafilepath(config.password_file), 'r')
       password_fa=password_fa.read().replace('"','').strip()
       passwords=password_fa.split('(')[1].split(',')[1].split(')')[0].strip()
       usernames=password_fa.split('(')[1].split(',')[0].split(')')[0].strip()
    except:
       passwords=u'your password'# كلمة السر
       usernames=u'your Sysop name'#حساب المستخدم الإداري
    #-------------------------------------------
    botlog=login.LoginManager(password=passwords,username=usernames,site=site,sysop=True)
    botlog.login()
    for IP in IPs:
       IP=IP.replace('[[','').replace(']]','').replace('user:','').replace('User:','').strip()
       try:
           if u"." in IP:
                blockuser(IP)
                time.sleep(1)    
       except:
            wikipedia.output(u'\03{lightred}'+IP + u' is not valied IP\03{default}')    
if __name__ == '__main__':
        main()

تنبيه
لاتنسوا وضع sysopnames['wikipedia']['ar'] = u'your Sysop account' في ملف user-config.py