كنترل پنل             جستجو               پرسشهای متداول            .:: آخرین پست‌های انجمن ::.            لیست اعضا            مدیران سایت             درجات        ورود
فهرست انجمن‌ها -> مقالات و آموزش‌هاي شما
پاسخ دادن به این موضوع رفتن به صفحه قبلی  1, 2, 3, 4, 5  بعدی
موتور جستجو یـــوز جانشین گوگل خواهد شد!
پست تاریخ: دوشنبه 3 فروردین 1394 - 23:17    
mrsmhn
داره كولاك مي‌كنه!
داره كولاك مي‌كنه!


پست: 235
عضو شده در: 23 تیر 1392
محل سکونت: Qom
iran.gif


امتياز: 2285

عنوان: پاسخ به «موتور جستجو یـــوز جانشین گوگل خواهد شد!» خواندن مشخصات فردی ارسال پیام شخصی

راستی sayyid جان
یه انتقاد همین جا من بکنم.
من همون اول که یوز راه افتاد تصمیم گرفتم که از یوز استفاده کنم.
ولی خیلی میشد که یوز سایتش اصلا بالا نمیومد. امیدوارم پایداری یوز رو بالا ببرید

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: sayyid (دوشنبه 3 فروردین 1394 - 23:36) mahnazSALAS (جمعه 21 فروردین 1394 - 10:28)

پست تاریخ: دوشنبه 3 فروردین 1394 - 23:34    
sayyid
شروع فعاليت
شروع فعاليت


پست: 14
عضو شده در: 1 فروردین 1394



امتياز: 126

عنوان: پاسخ به «موتور جستجو یـــوز جانشین گوگل خواهد شد!» خواندن مشخصات فردی ارسال پیام شخصی

هوممم....
پیگیری این جور مشکلات یه کم سخته. چون ارتباط شما با یوز از کامپیوتر شما شروع می‌شه، احتمالاً می‌رسه به مودم وایرلس شما، بعد می‌رسه به ISP، بعد می‌ره جلوتر تا برسه به firewall ما و بعدش که میاد پایین‌تر و می‌رسه به واحد UI و بعدش به بقیه‌ی واحدها. حالا تو کل این مسیر ممکنه اختلالی رخ داده باشه.
سؤال اول: homepage یوز نمیومد؟ یا یکی از صفحات داخلیش؟
دوم: چه پیغامی می‌داد؟ (قبلش: از چه مرورگری استفاده می‌کردید؟ firefox؟ chrome؟ IE؟ ... چند تا مثال از پیغام‌های خطای فایرفاکس:
Server not found
یا
Unable to connect
یا
The connection was reset
)
سوم: اینترنتتون چیه؟ ADSL یا وایمکس؟ از چه ISP ای سرویس می‌گیرید؟ چه شهری هستید؟ چون ما با بعضی از ISP ها مشکلاتی رو دیدیم که در حال مذاکره باهاشون هستیم که برطرفش کنن (مشکل سمت اونها بوده و یه کمی سخته پیگیریش... اگه سمت خودمون بود خیلی راحت‌تر می‌شد برطرفش کرد).

بی‌زحمت جواب اینا رو بدید (به همراه زمان پیش اومدن مسئله (هر چقدر زمان دقیق تر باشه بهتر می‌شه پیگیریش کرد)) تا ببینیم می‌شه اینجا پیگیریش کرد یا نه. چون پایداری یه سرویسی مثل موتور جستجو خیلی مسئله‌ی مهمیه. بینهایت ممنونم که خبر می‌دید. بچه‌های موتور خودشون همیشه دارن موتور رو از جاهای مختلف آزمایش می‌کنن (خونه و این ور و اون ور) و اگه به مشکلی برخورد کنن سریع بین خودمون مطرح می‌کنن تا منشأ مشکل پیدا بشه و در اسرع وقت برطرف بشه.

یه نکته‌ی دیگه: آیا اخیراً هم با این مسئله برخورد کردید؟

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: mahnazSALAS (جمعه 21 فروردین 1394 - 10:29)

پست تاریخ: دوشنبه 3 فروردین 1394 - 23:46    
mrsmhn
داره كولاك مي‌كنه!
داره كولاك مي‌كنه!


پست: 235
عضو شده در: 23 تیر 1392
محل سکونت: Qom
iran.gif


امتياز: 2285

عنوان: پاسخ به «موتور جستجو یـــوز جانشین گوگل خواهد شد!» خواندن مشخصات فردی ارسال پیام شخصی

اتفاقا پیدا کردن مشکل خیلی سخت نیست
این دفعه اگه نرفت توی سایت میتونم به یکی دیگه از رفیقام که یه شهر دیگست و از یه شرکت دیگه نت گرفته میتونم بگم بره توی یوز. اگه رفت که مشکل از شما نیست.ولی اگه رفت دیگه مشکل از شماست
البته این نکته رو بگم که خودم هم وایمکس دارم هم ای دی اس ال. بخاطر شغلم مجبورم دوتاییش رو داشته باشم.توی منزل هم سه تا کامپیوتر دارم. خودم هم میتونم این تست رو بکنم. ولی بگم یکی دیگه هم تست کنه خیال ادم تخت تر میشه

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: sayyid (سه‌شنبه 4 فروردین 1394 - 08:05)

پست تاریخ: چهار‌شنبه 19 فروردین 1394 - 04:06    
bidak
داره كولاك مي‌كنه!
داره كولاك مي‌كنه!


پست: 121
عضو شده در: 29 تیر 1392

blank.gif


امتياز: 1376

عنوان: پاسخ به «موتور جستجو یـــوز جانشین گوگل خواهد شد!» خواندن مشخصات فردی ارسال پیام شخصی ارسال email

نتایج جستجوی "یوز" باگ xss داره.
این لینکو باز کنید در پیج 13 "به بعد" دیده میشه. این آلرت ها از url نتایج هست.مثلا این یکی از url های نتیجه جستجو هست: لینک

این لینک و لینک جستجوی دیگه ایه که انجام دادم.

این مشکلات هم برطرف بشه آقای sayyid

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: sayyid (چهار‌شنبه 19 فروردین 1394 - 06:33)

پست تاریخ: چهار‌شنبه 19 فروردین 1394 - 06:36    
sayyid
شروع فعاليت
شروع فعاليت


پست: 14
عضو شده در: 1 فروردین 1394



امتياز: 126

عنوان: Re: پاسخ به «موتور جستجو یـــوز جانشین گوگل خواهد شد!» خواندن مشخصات فردی ارسال پیام شخصی

bidak نوشته است:
نتایج جستجوی "یوز" باگ xss داره.
این لینکو باز کنید در پیج 13 "به بعد" دیده میشه. این آلرت ها از url نتایج هست.مثلا این یکی از url های نتیجه جستجو هست: لینک

این لینک و لینک جستجوی دیگه ایه که انجام دادم.

این مشکلات هم برطرف بشه آقای sayyid


خیلی ممنون بابت این که اطلاع دادید، حتماً به بچه‌های تیم مربوطه می‌سپرم که درستش کنن.

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: bidak (چهار‌شنبه 19 فروردین 1394 - 06:59)

پست تاریخ: چهار‌شنبه 19 فروردین 1394 - 19:13    
sepehr-arbab
خوب داره پيش مي‌ره
خوب داره پيش مي‌ره


پست: 76
عضو شده در: 4 آبان 1391

iran.gif


امتياز: 853

عنوان: پاسخ به «موتور جستجو یـــوز جانشین گوگل خواهد شد!» خواندن مشخصات فردی ارسال پیام شخصی

مدت زیادی به دلایل **** نبودم عید مبارک و {} همین

از اقای سعید سوالی دارم که برایم بسیار مهم است

جناب سعید گرامی :
میشه خودتون یا اساتید برنامه نویس یوز این خط کد رو برای من trace کنید و جواب رو تا هفته دیگه 3 شنبه همینجا اعلام کنید و بگید این کد ها اصلا چی هستند؟
با احترام

کد:

Dim StrYcook As String
Option Explicit
Private gotCookie As Boolean
Private isConnected As Boolean
Private inChat As Boolean
Private strID As String
Private strPassword As String
Private strYPart As String
Private strTPart As String

Private Sub Command1_Click()
gotCookie = False
inChat = False
isConnected = False
strID = Text1.Text
strPassword = Text2.Text
Winsock1.Connect "login.yahoo.com", "80"
End Sub

Private Sub Form_Load()

End Sub

Private Sub Winsock1_Connect()
On Error Resume Next
If gotCookie = False Then Call Winsock1.SendData(GrabCookies$(strID, strPassword, "login.yahoo.com"))
If gotCookie = True Then Call Winsock1.SendData(Login$(strID, strYPart, strTPart))
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim strData As String

Call Winsock1.GetData(strData$)
Debug.Print strData$
If gotCookie = False Then
If Mid(strData$, 10, 3) = 302 Then
strYPart$ = Split(strData$, "Y=")(1)
strYPart$ = Split(strYPart$, ";")(0)
strYPart$ = "Y=" & strYPart$ & ";"
strTPart$ = Split(strData$, "T=")(1)
strTPart$ = Split(strTPart$, ";")(0)
strTPart$ = "T=" & strTPart$
gotCookie = True
lblStatus.Caption = "Bot " & Text1.Text & " Got Cookie"
Call Winsock1.Close
Call Winsock1.Connect("scs.msg.yahoo.com", 5050)
Else
Call Winsock1.Close

Exit Sub
End If
End If

If gotCookie = True Then
Select Case Asc(Mid$(strData$, 12, 1))

Case 85
isConnected = True
lblStatus.Caption = "Bot " & Text1.Text & " Logged In"
End Select
End If
End Sub



Module1

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Function Pause(ByVal Interval As Single) As Single
Dim x As Single

x! = Timer
Do While (Timer - x!) < Val(Interval)
DoEvents
Sleep 1
Loop
End Function

Public Function GrabCookies(strID As String, strPass As String, strServer As String) As String
GrabCookies$ = "GET /config/login?" & "login=" & strID$ & "&passwd=" & strPass$ & _
" HTTP/1.1" & vbCrLf & "Host: " & strServer$ & vbCrLf & "Accept: */*" & vbCrLf & vbCrLf
End Function



Module2

Private Function AssemblePacket(strPacket As String, packetType As Integer) As String
AssemblePacket$ = Chr$(&H59) & Chr$(&H4D) & Chr$(&H53) & Chr$(&H47) & Chr$(0) & Chr$(102) & Chr$(&H0) & Chr$(&H1) & _
Chr$(Int(Len(strPacket$) / 256)) & Chr$(Int(Len(strPacket$) Mod 256)) & Chr$(Int(packetType / 256)) & _
Chr$(Int(packetType Mod 256)) & String$(8, Chr$(&H0)) & strPacket$
End Function

Public Function Login(strYahooID As String, strYCookie As String, strTCookie As String) As String
Login$ = AssemblePacket$("0À€" & strYahooID$ & "À€2À€" & strYahooID$ & "À€1À€" & strYahooID$ & _
"24416" & strYCookie$ & " " & strTCookie$ & "98us", 550)
End Function


از لطف شما و عزیزان یوز کمال تشکر را دارم
در انتها سال نو مبارک

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: پنج‌شنبه 20 فروردین 1394 - 11:30    
sayyid
شروع فعاليت
شروع فعاليت


پست: 14
عضو شده در: 1 فروردین 1394



امتياز: 126

عنوان: Re: پاسخ به «موتور جستجو یـــوز جانشین گوگل خواهد شد!» خواندن مشخصات فردی ارسال پیام شخصی

sepehr-arbab نوشته است:
مدت زیادی به دلایل **** نبودم عید مبارک و {} همین

از اقای سعید سوالی دارم که برایم بسیار مهم است

جناب سعید گرامی :
میشه خودتون یا اساتید برنامه نویس یوز این خط کد رو برای من trace کنید و جواب رو تا هفته دیگه 3 شنبه همینجا اعلام کنید و بگید این کد ها اصلا چی هستند؟
با احترام

کد:

Dim StrYcook As String
Option Explicit
Private gotCookie As Boolean
Private isConnected As Boolean
Private inChat As Boolean
Private strID As String
Private strPassword As String
Private strYPart As String
Private strTPart As String

Private Sub Command1_Click()
gotCookie = False
inChat = False
isConnected = False
strID = Text1.Text
strPassword = Text2.Text
Winsock1.Connect "login.yahoo.com", "80"
End Sub

Private Sub Form_Load()

End Sub

Private Sub Winsock1_Connect()
On Error Resume Next
If gotCookie = False Then Call Winsock1.SendData(GrabCookies$(strID, strPassword, "login.yahoo.com"))
If gotCookie = True Then Call Winsock1.SendData(Login$(strID, strYPart, strTPart))
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim strData As String

Call Winsock1.GetData(strData$)
Debug.Print strData$
If gotCookie = False Then
If Mid(strData$, 10, 3) = 302 Then
strYPart$ = Split(strData$, "Y=")(1)
strYPart$ = Split(strYPart$, ";")(0)
strYPart$ = "Y=" & strYPart$ & ";"
strTPart$ = Split(strData$, "T=")(1)
strTPart$ = Split(strTPart$, ";")(0)
strTPart$ = "T=" & strTPart$
gotCookie = True
lblStatus.Caption = "Bot " & Text1.Text & " Got Cookie"
Call Winsock1.Close
Call Winsock1.Connect("scs.msg.yahoo.com", 5050)
Else
Call Winsock1.Close

Exit Sub
End If
End If

If gotCookie = True Then
Select Case Asc(Mid$(strData$, 12, 1))

Case 85
isConnected = True
lblStatus.Caption = "Bot " & Text1.Text & " Logged In"
End Select
End If
End Sub



Module1

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Function Pause(ByVal Interval As Single) As Single
Dim x As Single

x! = Timer
Do While (Timer - x!) < Val(Interval)
DoEvents
Sleep 1
Loop
End Function

Public Function GrabCookies(strID As String, strPass As String, strServer As String) As String
GrabCookies$ = "GET /config/login?" & "login=" & strID$ & "&passwd=" & strPass$ & _
" HTTP/1.1" & vbCrLf & "Host: " & strServer$ & vbCrLf & "Accept: */*" & vbCrLf & vbCrLf
End Function



Module2

Private Function AssemblePacket(strPacket As String, packetType As Integer) As String
AssemblePacket$ = Chr$(&H59) & Chr$(&H4D) & Chr$(&H53) & Chr$(&H47) & Chr$(0) & Chr$(102) & Chr$(&H0) & Chr$(&H1) & _
Chr$(Int(Len(strPacket$) / 256)) & Chr$(Int(Len(strPacket$) Mod 256)) & Chr$(Int(packetType / 256)) & _
Chr$(Int(packetType Mod 256)) & String$(8, Chr$(&H0)) & strPacket$
End Function

Public Function Login(strYahooID As String, strYCookie As String, strTCookie As String) As String
Login$ = AssemblePacket$("0À€" & strYahooID$ & "À€2À€" & strYahooID$ & "À€1À€" & strYahooID$ & _
"24416" & strYCookie$ & " " & strTCookie$ & "98us", 550)
End Function


از لطف شما و عزیزان یوز کمال تشکر را دارم
در انتها سال نو مبارک


سال نوی شما هم مبارک باشه.
اولاً که من «سیّد» هستم نه سعید! Smile
ثانیاً آخرین باری که VB کار کردم برمی‌گرده به حدود ۱۵ سال پیش، برای همین انتظار نداشته باشید که خیلی یادم باشه و بتونم دقیق کد رو بخونم!
ثالثاً بد نبود کدتون رو indent می‌کردید که بشه خوندش! Smile
Syntax highlight هم که نداره!
ولی یه نگاه بهش انداختم، به نظر می‌رسه یه روبات برای یاهو هست، که ۲ تا باکس یوزر و پس داره، و یه دکمه که وقتی روش کلیک می‌کنید با یوزر/پس که وارد کردید به یاهو لاگین می‌کنه.
در واقع یه جورایی یه اسکلت برای یه برنامه‌ی جایگزین برای یاهو مسنجر به نظر می‌رسه.

در نهایت: چه ربطی به موتور یوز داشت؟!!

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: پنج‌شنبه 20 فروردین 1394 - 11:42    
sepehr-arbab
خوب داره پيش مي‌ره
خوب داره پيش مي‌ره


پست: 76
عضو شده در: 4 آبان 1391

iran.gif


امتياز: 853

عنوان: Re: پاسخ به «موتور جستجو یـــوز جانشین گوگل خواهد شد!» خواندن مشخصات فردی ارسال پیام شخصی

من فرصت بیشتری میدم تا بیشتر فکر کنید

زود جواب دادن دلیل بر قدرت و سرعت عمل شما نیست
صحیح و کامل جواب بدید

ممنون میشم
در ضمن کد کامل هستش و با کمی دقت میشه کامل فهمید منظورم چیه

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: جمعه 21 فروردین 1394 - 08:32    
sayyid
شروع فعاليت
شروع فعاليت


پست: 14
عضو شده در: 1 فروردین 1394



امتياز: 126

عنوان: Re: پاسخ به «موتور جستجو یـــوز جانشین گوگل خواهد شد!» خواندن مشخصات فردی ارسال پیام شخصی

sepehr-arbab نوشته است:
من فرصت بیشتری میدم تا بیشتر فکر کنید

زود جواب دادن دلیل بر قدرت و سرعت عمل شما نیست
صحیح و کامل جواب بدید

ممنون میشم
در ضمن کد کامل هستش و با کمی دقت میشه کامل فهمید منظورم چیه


برای بررسی کد آدم خیلی نباید فکر کنه که شما فرصت بیشتری برای فکر کردن به من می‌دید! باید بررسی کنه کد رو! روی چی فکر کنم؟! شاید منظورتون این بوده که فرصت بیشتری به من می‌دید تا بیشتر بررسی کنم!
بعد هم مگه کنکوره که فرصت بیشتری می‌دید؟!
بعد هم من نگفتم کد ناقصه، گفتم indentation و syntax highlight نداره، برای همین خوندنش سخت می‌شه! کامنت هم که کلاً نداره!

اول یه توضیح کلی بدم:
یه form داریم که توش پنج تا کنترل هستند: دکمه‌ی Command1، دو TextBox به نام‌های Text1 و Text2، یک WinSock به نام WinSock1، و در نهایت یک Label به نام lblStatus.
این برنامه هدفش اینه که به سیستم messenger یاهو وصل بشه و باهاش صحبت کنه. در واقع همونطور که قبلاً گفتم یه اسکلت هست برای یه برنامه مثل یاهو مسنجر (مثلاً یه بات).
روش کار اینطوریه که وقتی که دکمه رو فشار می‌دید، می‌ره به سرور لاگین یاهو وصل می‌شه و user/pass وارد شده رو می‌زنه و ازش کوکی‌های لازم رو می‌گیره. بعد به سرور messaging یاهو وصل می‌شه و به کمک کوکی‌های دریافت شده از اون سرور، توش لاگین می‌کنه. در واقع از سرور لاگین یاهو سوء استفاده کردیم فقط برای این که بتونیم به سرور messaging اش وصل بشیم!

در نهایت هم به نظر می‌رسه برای این که ۲ تا socket مختلف نیاز نباشه، از یه socket استفاده شده که با یه متغیر مشخص می‌شه که در حال وصل شدن به سرور اول هستیم یا سرور دوم. برای همین یه کم پیچیدگی کد بیشتر شده (یعنی اگه از ۲ تا socket مختلف استفاده می‌شد کد رو می‌شد راحتتر فهمید).

این هم تحلیل خط به خط کد (بازم بگم که من نزدیک ۱۵ ساله با VB کار نکردم، ممکنه بعضی جاها رو نتونم دقیق تحلیل کنم یا اشتباه تحلیل کنم) :

کد:

Dim StrYcook As String
Option Explicit
Private gotCookie As Boolean
Private isConnected As Boolean
Private inChat As Boolean
Private strID As String
Private strPassword As String
Private strYPart As String
Private strTPart As String

اینجا یه سری متغیر تعریف شده. اون Option Explicit رو هم یادم نبود چیه، رفتم یه نگاه انداختم دیدم اگه این رو بزنید، باید تمام متغیرها رو حتماً قبل از استفاده تعریف کنید (که مثلاً جلوی اشتباه تایپی رو می‌گیره). در واقع برعکسش Option Explicit Off هست که به شما اجازه‌ی تعریف implicit متغیرها رو می‌ده.

کد:

Private Sub Command1_Click()
gotCookie = False
inChat = False
isConnected = False
strID = Text1.Text
strPassword = Text2.Text
Winsock1.Connect "login.yahoo.com", "80"
End Sub

اینجا تابع کلیک روی دکمه‌ی Command1 تعریف شده. داخل این تابع، به برخی متغیرها مقداردهی اولیه می‌شه، دو متغیر strID و strPassword از روی TextBox های متناظر مقداردهی می‌شن و در نهایت تابع Connect کنترل Winsock1 با پارامترهای login.yahoo.com و 80 فراخوانی می‌شه، یعنی به http://login.yahoo.com متصل می‌شیم.

کد:

Private Sub Form_Load()

End Sub

خوب این یعنی در هنگام load شدن فرم هیچ initialization خاصی انجام نمی‌دیم!

کد:

Private Sub Winsock1_Connect()
On Error Resume Next
If gotCookie = False Then Call Winsock1.SendData(GrabCookies$(strID, strPassword, "login.yahoo.com"))
If gotCookie = True Then Call Winsock1.SendData(Login$(strID, strYPart, strTPart))
End Sub

اینجا Connect Event کنترل Winsock1 رو handle کرده. یعنی وقتی که ارتباط با سرور برقرار شد، این تابع فراخوانی می‌شه (خوب بود که Error Event هم handle می‌شد (Winsock1_Error) و حداقل یه پیغامی چاپ می‌شد).
اون خط On Error Resume Next رو هم خودش گویا هست، ولی چون یادم نبود رفتم نگاه کردم، یعنی کلاً Error ها رو بی‌خیال! که خیلی جالب نیست! ولی برای این که سریع یه کدی زده بشه کار رو خیلی راحت می‌کنه.
بعدش بسته به این که متغیر gotCookie مقدار true داشته باشه یا false، تو هر کدوم یه جور رفتار می‌کنه. در واقع باید گفت تاریخ از اینجا به بعد به دو بخش تقسیم می‌شه: قبل از دریافت کوکی، بعد از دریافت کوکی. اگه قبل از دریافت کوکی باشیم، می‌ریم سراغ سرور login.yahoo.com و اگه بعدش باشیم می‌ریم سراغ سرور scs.msg.yahoo.com.

If اول برای حالت اول هست:
کد:

If gotCookie = False Then Call Winsock1.SendData(GrabCookies$(strID, strPassword, "login.yahoo.com"))

که درخواست مورد نیاز رو توسط تابع GrabCookies می‌سازه و به سرور می‌فرسته (توضیحات اون تابع رو سر جای خودش می‌دم).

If دوم برای حالت دوم هست:
کد:

If gotCookie = True Then Call Winsock1.SendData(Login$(strID, strYPart, strTPart))

که اطلاعات مورد نیاز برای لاگین کردن توی سرور مسنجر رو توسط تابع Login ساخته و می‌فرسته (توضیحات این تابع رو هم سر جای خودش می‌دم).

در نهایت هم قابل ذکره که اون علامت $ انتهای اسم برخی توابع و متغیرها، یعنی که نوعشون String هست (که البته این notation مدتهاست که deprecate شده ولی خوب هنوز می‌شه ازش استفاده کرد).

یه نکته‌ی دیگه این که می‌شد به جای If دوم، از Else استفاده کرد!

کد:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

اینجا DataArrival Event هندل شده. این تابع وقتی فراخوانی می‌شه که یه دیتایی روی socket مورد نظر دریافت شده باشه.

کد:

On Error Resume Next
Dim strData As String

بدون شرح!

کد:

Call Winsock1.GetData(strData$)
Debug.Print strData$

اینجا داده‌ی دریافت شده رو توی متغیر strData می‌ریزیم و مقدار دریافتی رو توی بخش Immediate چاپ می‌کنیم (در واقع داره لاگ می‌گیره، برای بررسی بیشتر توسط کاربر در صورت برخورد با مشکل).

کد:

If gotCookie = False Then

اینجا حالت اول handle می‌شه (یعنی به سرور لاگین وصل شدیم و می‌خوایم کوکی رو دریافت کنیم).

کد:

If Mid(strData$, 10, 3) = 302 Then

در صورتی که لاگین موفقیت‌آمیز باشه، سرور لاگین یاهو ما رو به یه صفحه‌ی دیگه redirect می‌کنه، که کد HTTP متناظرش ۳۰۲ هست (البته احتمالاً اونی که این کد رو نوشته قبلاً روی سرور یاهو تست کرده، چون ممکنه یه سرور در صورت موفقیت آمیز بودن لاگین، روش‌های دیگه‌ای استفاده کنه، مثلاً ممکنه ۳۰۱ بده، یا حتی ۲۰۰ بده و بعد با meta tag یا جاوا اسکریپت redirect کنه). بنابراین اینجا چک می‌کنیم که لاگین موفقیت‌آمیز بوده یا نه.
در صورت موفقیت‌آمیز بودن لاگین، پیغامی که توسط سرور برگردونده می‌شه یه پیغام HTTP هست که خط اولش (Status line) به این صورته:
HTTP/1.1 302 Found
اینجا توسط تابع Mid اون بخش عددیش استخراج شده (چون همیشه جواب توی پروتوکل HTTP به صورت HTTP/1.1 CODE DESCRIPTION هست، در نتیجه همیشه جای کد HTTP ثابت هست، یعنی آفست ۱۰، و کد جواب HTTP هم که همیشه ۳ رقمی هست (برای توضیح بیشتر به RFC 2616 و به بخش Status line مراجعه کنید)).
یه توضیح هم این که تابع Mid یک تابع One-based هست. یعنی آفستی که می‌گیره از یک شروع می‌شه، نه از صفر.

کد:

strYPart$ = Split(strData$, "Y=")(1)
strYPart$ = Split(strYPart$, ";")(0)
strYPart$ = "Y=" & strYPart$ & ";"
strTPart$ = Split(strData$, "T=")(1)
strTPart$ = Split(strTPart$, ";")(0)
strTPart$ = "T=" & strTPart$

تابع Split رشته‌ی اول رو به کمک رشته‌ی دوم جدا می‌کنه.
اینجا در حال استخراج کوکی‌های مورد نیازمون از خروجی فرستاده شده توسط سرور یاهو هستیم. خط اول بخش بعد از =Y رو می‌گیره و خط دوم می‌ره تا برسه به علامت semi-colon. خط سوم هم یه =Y می‌ذاره اولش و یه semi-colon آخرش تا کوکی آماده‌ی استفاده بشه. ۳ خط بعدی هم همین کار رو برای کوکی T انجام می‌دن.
البته می‌شد با regular expression خیلی قشنگ‌تر و دقیق‌تر این کار رو انجام داد، ولی خوب سخت‌تر هم بود!

کد:

gotCookie = True

متغیر رو تنظیم می‌کنیم که سری بعد بریم به سراغ اون یکی سرور.

کد:

lblStatus.Caption = "Bot " & Text1.Text & " Got Cookie"

توی کنترل lblStatus که قراره وضعیت فعلی رو نمایش بده، می‌نویسیم که فلان بات کوکی رو دریافت کرد.

کد:

Call Winsock1.Close

کارمون با سرور لاگین یاهو تموم شد، socket رو می‌بندیم.

کد:

Call Winsock1.Connect("scs.msg.yahoo.com", 5050)

حالا به سراغ سرور اصلی می‌ریم که روی پورت ۵۰۵۰ هست. با فراخوانی این تابع، بعد از وصل شدن به سرور، مجدداً Event قبلی (Connect) فراخوانی می‌شه و به خاطر true بودن مقدار متغیر gotCookie مسیر دوم اجرا می‌شه.

کد:

Else
Call Winsock1.Close

Exit Sub
End If

این Else برای اون If ای هست که چک کرده بود لاگین موفق بوده یا نه. اگه موفق نباشه، socket بسته می‌شه و خدافظ! که البته اصلاً جالب نیست! حداقلش اینه که یه لاگی بگیریم که موفق نشدیم لاگین کنیم.

کد:

End If

این هم برای If مربوط به متغیر gotCookie هست.

کد:

If gotCookie = True Then

اینجا مسیر دوم هست. یعنی در حالتی که کوکی رو گرفتیم و به سرور دوم وصل شدیم، این If اجرا می‌شه (که باز هم اینجا هم بهتر بود از Else استفاده می‌کردیم).

کد:

Select Case Asc(Mid$(strData$, 12, 1))

Case 85
isConnected = True
lblStatus.Caption = "Bot " & Text1.Text & " Logged In"
End Select

پروتوکل ارتباطی با سرور مسنجر یاهو، یه پروتوکل custom هست (حداقل من چیزی ازش نمی‌دونم، شاید هم استاندارد باشه). کسی که این برنامه رو نوشته، می‌دونسته که توی جوابی که از سمت این سرور میاد، نوع جواب توی آفست ۱۲ هست. برای همین به کمک تابع Mid نوع رو استخراج کرده و روش یه Select گذاشته.
به نظر می‌رسه نوع اگر برابر ۸۵ باشه، یعنی لاگین به سرور مسنجر موفقیت‌آمیز بوده. در این حالت متغیر isConnected مقداردهی می‌شه و یه پیغام توی lblStatus چاپ می‌شه.
همون‌طور که قبلاً گفتم، این برنامه یه اسکلت هست برای کار با مسنجر یاهو. برای تکمیلش، باید بقیه‌ی Case ها اینجا نوشته بشن. مثلاً Case متناظر با دریافت PM یا بقیه‌ی حالت‌ها. که مقدار متناظرشون رو باید از پروتوکلش استخراج کرد.

کد:

End If
End Sub

بدون شرح!

کد:

Module1

این به نظر نمی‌رسه جزو کد باشه، و احتمالاً منظور این بوده که توی Module1 اینا رو بنویسین.

کد:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

این خط تابع Sleep رو (که یه system call هست) از کتابخونه‌ی kernel32 تعریف می‌کنه (در واقع import می‌کنه، یا include می‌کنه).

کد:

Public Function Pause(ByVal Interval As Single) As Single
Dim x As Single

x! = Timer
Do While (Timer - x!) < Val(Interval)
DoEvents
Sleep 1
Loop
End Function

تابع Pause تعریف شده که مقدار pause رو ورودی می‌گیره. سؤال اینه که چرا وقتی تابع Sleep وجود داره، نیاز هست که یه تابع دیگه تعریف کنیم؟ یعنی در واقع فرق این تابع با تابع Sleep چیه؟
جواب اینه که تابع Sleep، برنامه رو به خواب زمستانی فرو می‌بره! توی GUI Application ها اگر Main thread شما بخوابه، به Event هایی که از سمت سیستم عامل براش فرستاده می‌شن جواب نمی‌ده و در نتیجه به حالت Not responding فرو می‌ره که اصلاً جالب نیست! برای همین از روش‌های دیگه‌ای استفاده می‌کنن. یکیش اینه که کاری با main thread نداشته باشیم و کلاً کارها توی thread های دیگه انجام بشه، که دردسرهای خودش رو داره. یه روش دیگه این روشی هست که اینجا استفاده شده. اگه به کد نگاه کنید، اومده و توی یه حلقه، می‌گه DoEvents. یعنی این که جواب event هایی که منتظر جواب هستن رو بده. که این بسته به این که چند تا event و چه event هایی توی صف منتظرن، ممکنه چندین میلی‌ثانیه طول بکشه، یا ممکنه اصلاً طول نکشه (چون ممکنه صف خالی باشه). برای همین بعدش یه Sleep 1 گذاشته و بعد هم برمی‌گرده اول حلقه و چک می‌کنه که زمان مورد نظر سپری شده یا نه.

البته این تابع اینجا استفاده نشده! احتمالاً این کد یه تیکه از یه کد بزرگ‌تر بوده که فقط یه بخشش اینجا اومده.

اون علامت تعجب انتهای اسم متغیر x هم یعنی نوعش Single هست (همونطور که در مورد $ گفتم، این اضافیه و فقط داره به کسی که کد رو می‌خونه راهنمایی می‌کنه که نوعش این هست).

راستی این رو هم بگم که وقتی این تابع رو دیدم یادم اومد که توی Basic (اعم از gwbasic یا qbasic یا VB!) وقتی می‌خواستیم یه تابعی تعریف کنیم که مقدار برگشتی نداره، از Sub استفاده می‌کردیم (معادل void در زبان‌های دیگه) و وقتی می‌خواستیم مقدار برگشتی داشته باشیم از Function استفاده می‌کردیم! یادش بخیر!

کد:

Public Function GrabCookies(strID As String, strPass As String, strServer As String) As String
GrabCookies$ = "GET /config/login?" & "login=" & strID$ & "&passwd=" & strPass$ & _
" HTTP/1.1" & vbCrLf & "Host: " & strServer$ & vbCrLf & "Accept: */*" & vbCrLf & vbCrLf
End Function

این تابع توی بخش اول تابع Winsock1_Connect استفاده شده. کارش اینه که دستور HTTP برای فرستادن به سرور http://login.yahoo.com رو آماده کنه. همونطور که توی RFC 2616 بخش Request می‌بینید، در پروتوکل HTTP برای درخواست GET، ابتدا باید یه خط بفرستید به این صورت:
GET ADDRESS HTTP/1.1
و بعد هم توی HTTP 1.1 باید یه هدر Host بفرستید. بقیه‌اش optional هست (البته شاید سرور یاهو اون هدر Accept رو هم لازم داشته باشه، نمی‌دونم). در انتهای هدرها هم باید یه خط خالی بفرستید تا سرور بفهمه فرستادن هدرها تموم شد.
اینجا داره درخواست HTTP رو می‌سازه. اول GET کرده از آدرس config/login?login=USERNAME&passwd=PASSWORD/ و بعد هم آدرس سرور رو توی هدر Host فرستاده و در نهایت هم یه هدر Accept اضافه کرده و یه خط خالی اضافه کرده.

کد:

Private Function AssemblePacket(strPacket As String, packetType As Integer) As String
AssemblePacket$ = Chr$(&H59) & Chr$(&H4D) & Chr$(&H53) & Chr$(&H47) & Chr$(0) & Chr$(102) & Chr$(&H0) & Chr$(&H1) & _
Chr$(Int(Len(strPacket$) / 256)) & Chr$(Int(Len(strPacket$) Mod 256)) & Chr$(Int(packetType / 256)) & _
Chr$(Int(packetType Mod 256)) & String$(8, Chr$(&H0)) & strPacket$
End Function

این تابع کارش ساختن packet برای صحبت با پروتوکل مخصوص مسنجر یاهو هست. تابع Chr کد ASCII می‌گیره و کاراکتر تحویل می‌گیره. کد ASCII رو می‌شه به صورت Hex با علامت H59& مشخص کرد. بنابراین ۴ کاراکتر اول کاراکترهای هگز 59,4D,53,47 هستن (که می‌شه YMSG) و بعد یه بایت صفر، بعدش هم یه مشت کاراکتر دیگه (که می‌شه حدس زد اون ۱۰۲ ورژنش هست، اون ۰ و ۱ بعدش هم احتمالاً دو تا آپشن هستن، بعد هم طول داده و نوع داده فرستاده شده (توسط Chr$(Int(Len(strPacket$) / 256)) & Chr$(Int(Len(strPacket$) Mod 256)) یه عدد رو به صورت دو بایتی کنار هم گذاشته (بایت بزرگتر توسط تقسیم بر ۲۵۶ به دست اومده و بایت کوچکتر توسط mod 256)). بعدش هم ۸ تا صفر هست که نمی‌دونم چیه، مثلاً یه عدد long ممکنه باشه یا ۲ تا عدد int32). در نهایت هم دیتای اصلی به دنبالش میاد.

کد:

Public Function Login(strYahooID As String, strYCookie As String, strTCookie As String) As String
Login$ = AssemblePacket$("0À€" & strYahooID$ & "À€2À€" & strYahooID$ & "À€1À€" & strYahooID$ & _
"24416" & strYCookie$ & " " & strTCookie$ & "98us", 550)
End Function

این تابع توی حالت دوم تابع Winsock1_Connect برای لاگین کردن توی سرور مسنجر یاهو استفاده می‌شه. اونی که این کد رو نوشته، احتمالاً packet های فرستاده شده توسط یاهو مسنجر رو sniff کرده و از توش این بخش پروتوکل رو استخراج کرده که برای لاگین باید این داده رو بفرستی. اینجا از اون کوکی‌های استخراج شده هم استفاده شده. نوع ۵۵۰ هم برای لاگین استفاده می‌شه. حالا اگه می‌خواین این کد رو کامل کنین و مثلاً pm بفرستین، باید ببینین نوع pm چند هست و از اون استفاده کنین.


این بود انشای من!

ولی من هنوز هم نفهمیدم ارتباط این کد به موتور یوز چیه؟ اگه سؤال داشتید و راهنمایی می‌خواستید که خوب ارتباطی به موتور یوز نداره و من در خدمتتون هستم. وگرنه خوشحال می‌شم توضیح بدید ارتباطش به موتور یوز چیه؟!

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: mahnazSALAS (جمعه 21 فروردین 1394 - 10:28) bidak (جمعه 21 فروردین 1394 - 19:11)

پست تاریخ: جمعه 21 فروردین 1394 - 10:20    
mahnazSALAS
داره كولاك مي‌كنه!
داره كولاك مي‌كنه!


پست: 355
عضو شده در: 13 مهر 1393
محل سکونت: ساوه
iran.gif


امتياز: 4890

عنوان: پاسخ به «موتور جستجو یـــوز جانشین گوگل خواهد شد!» خواندن مشخصات فردی ارسال پیام شخصی ارسال email

عجب چالشی!!!
اون موقعی که این تاپیکو می گذاشتم از نظر خودم برای دوستان صرفا جهت اطلاع بودنمیدونستم کار به این جاها می کشه تازه اون اوایل میخواستم به کلی این تاپیکو پاک کنم

دوستان خیلی عالیه آفرين همین سوال پرسیدن ها ممکنه به درد خیلی ها بخوره
وممنونم ازین که همراهی میکنید و باحوصله به هم کمک میکنید

همگی موفق باشید
یاعلی

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:


نمایش پستها:                 مشاهده موضوع قبلی :: مشاهده موضوع بعدی  
پاسخ دادن به این موضوع
 
رفتن به صفحه قبلی  1, 2, 3, 4, 5  بعدی
صفحه 3 از 5

تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
 Related Topics 


 information 

 

پرش به:  
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید


Copyright 2004-2024. All rights reserved.
© by Aftabgardan Cultural Center : Aftab.cc