מי שרוצה לדעת את הבסיס של פרוקסי על קצה המזלג יכול לעיין במדריך של יונתן http://www.mircs.co.il/viewtopic.php?f=9&t=871 שנותן הסבר על פרוקסי.
שימו לב: השימוש ויישום המדריך באחריותכם, מדריך זה נכתב רק לצורכי ידע ותו לא.
נתחיל ?
כדי שתהיה הבנה מקסימלית, צריך סדר, כשיש סדר יש הבנה, לכן אני קודם כל אסביר פקודה פקודה לפי השלבים (אני אדלג על דברים שלא קשורים לסוקט עצמו, כמו: תנאים וכו'...) ואחרי זה אני אביא את הסקריפט המלא.
עוד דבר, כשרוצים להתחבר דרך פרוקסי אז הדרך היא טיפה שונה, אבל ממש טיפה, אז שימו לב שלא להתבלבל .
עם פרוקסי: קודם פותחים סוקט עם הכתובת של הפרוקסי ואז מתחברים לשרת IRC
בלי פרוקסי: פותחים סוקט עם הכתובת של השרת IRC
שלב א' - פתיחת סוקט
קוד: בחר הכל
sockopen sockname ip port
sockname - שם של הסוקט
ip port - במידה ומתחברים דרך פרוקסי, אז רושמים את הכתובת של הפרוקסי, אחרת את הכתובת של השרת IRC (מירק)
שלב ב' - אחרי שנפתח הסוקט אנחנו צריכים לשלוח את הפרטים שלנו הדרושים לחיבור לשרת ה IRC
רק במידה ואנו מתחברים דרך פרוקסי נרשום את הפקודה הזאת, אחרת אין צורך:
קוד: בחר הכל
sockwrite -tn $sockname CONNECT $+($server,:,$port) HTTP/1.0 $+ $crlf $+ $crlf
בעזרת הפקודה הזאת אנחנו אומרים לפרוקסי להתחבר לשרת IRC.
אחרי שהתחברנו לשרת IRC אנחנו נשלח את הפרטים שלנו כמו: אימייל, שם, כינוי ועוד'...
לדוגמה אם הפרטים שלי הם:
קוד: בחר הכל
Full name: roman
Email Address: r@gmail.com
Nickname: Zen-
Server: irc.quakenet.org
כך נמלא את הפרטים
קוד: בחר הכל
sockwrite -tn $sockname USER r "gmail.com" "irc.quakenet.org" :roman
sockwrite -tn $sockname nick Zen-
שלב ג' - PING
שרתי ה IRC בודקים כל הזמן אם אנחנו עדיין "חיים", אם אנחנו מחוברים עדיין ומגיבים, בעזרת PING ו- PONG.
הם שולחים לנו PING ואנחנו מגיבים להם PONG. במידה ולא נוודא שהסוקט שלנו מבצע זאת השרת ינתק אותו אוטומטית, לכן:
קוד: בחר הכל
on *:sockread:sockname:{
if ($sockerr > 0) { sockclose $sockname | return }
sockread %a
tokenize 32 %a
if (PING == $1) { sockwrite -tn $sockname PONG $2 | halt }
}
כשיש שגיאה בסוקט ה sockerr$ יהיה גדול מ- 0, לכן במידה וזה יקרה הסוקט ייסגר.
כשהשרת שולח לנו PING הוא שולח בצורה הזאת: PING :port80c.se.quakenet.org
בודקים שהמילה הראשונה זה PING, אז אנחנו שולחים PONG למילה השנייה, שהיא בעצם השרת אליו אנחנו מחוברים.
במידה והגעתם עד לכאן, אתם אמורים להיות מחוברים לשרת דרך הסוקט.
כדי לבצע פעולות שונות, כמו כניסה לערוץ, שליחת הודעה וכו'... הדרך טיפה שונה מהדרך הרגילה מבחינת המבנה (לא בהכל)
להלן דוגמאות:
קוד: בחר הכל
ביצוע פקודות - sockwrite -tn sockname command
כניסה/יציאה לערוץ - sockwrite -tn sockname join/part #channel
שליחת הודעה לערוץ או למישהו מסויים - sockwrite -tn sockname privmsg #channel/nick :bla bla
notice - sockwrite -tn sockname notice #channel/nick :bla bla
שלב ד' - הקוד המלא
שימוש-
קוד: בחר הכל
/sockbot [-p] [proxyip:port] <ip:port> <nick>
במידה ורוצים להכנס דרך פרוקסי יש לציין את הסוויצ' p- ואת הכתובת של הפרוקסי
ביצוע פקודות לסוקט-
קוד: בחר הכל
/sockcmd command
הקוד:
קוד: בחר הכל
alias sockbot {
tokenize 32 $1-
if ($1 == -p) && ($0 == 4) {
set %sockbot.irc $3
sockopen $+(sockbot,$4) $replace($2,:,$chr(32))
}
elseif ($0 == 2) {
sockopen $+(sockbot,$2) $replace($1,:,$chr(32))
}
}
on *:sockopen:sockbot*:{
if ($sockerr > 0) { echo -a error }
else {
if (%sockbot.irc) {
sockwrite -tn $sockname CONNECT %sockbot.irc HTTP/1.0 $+ $crlf $+ $crlf
sockwrite -tn $sockname USER bot "gmail.com" "irc.quakenet.org" :sockbot $+ $crlf
sockwrite -tn $sockname NICK $right($sockname,-7) $+ $crlf $+ $crlf
unset %sockbot.irc
}
else {
sockwrite -tn $sockname USER bot "gmail.com" "irc.quakenet.org" :sockbot
sockwrite -tn $sockname NICK $right($sockname,-7)
}
}
}
on *:sockread:sockbot*:{
if ($sockerr > 0) { sockclose $sockname | return }
sockread %sockbot
tokenize 32 %sockbot
if (PING == $1) { sockwrite -tn $sockname PONG $2 | halt }
elseif ($2 == 376) { echo -a connected }
}
alias sockcmd { sockwrite -tn sockbot* $1- }
מקווה שהייתי ברור, אם יש הערות, באגים, או כל דבר אחר נא להגיד.