PDA

View Full Version : سوال: اتصال زیاد به یک سایت با curl و بلاک شدن !



generalhak
پنج شنبه 10 مرداد 1392, 14:43 عصر
سلام
من از این کلاس curl (http://barnamenevis.org/showthread.php?386354-%DA%A9%D9%84%D8%A7%D8%B3-%D9%82%D8%AF%D8%B1%D8%AA%D9%85%D9%86%D8%AF-CURL-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A2%D8%B3%D8%A7%D9%86)که داخل همین انجمن هست استفاده میکنم اما مثلا باید از یک سایت هر 1 دقیقه یک صفحه رو باز کنم بعد باز چند تا صفحه دیگه رو باز کنم !
یعنی هر 1 دقیقه وصل میشه به سایت بعد 10 صفحه دیگه رو باز میکنم sleep() رو هم گزاشتم رو 2 ثانیه که 2 ثانیه بین هر کدوم از این 10 صفحه صبر کنه که بلاک نشم
اما بلاک شدم !
حتی باز 1 دقیقه رو کردم 15 دقیقه و تعداد اون ها رو کردم 5 تا فاصله هم کردم 5 ثانیه بازم بلاک میکنه !
سایتی که بهش وصل میشم هم سیستم ناک داره ! معمولا نگهبان ناک هم گیر میده !
تعداد این زمان ها هرچی کمتر باشه بهتر هست و تعداد اتصال ها هم هرچی بیشتر باشه !
الان مشکل دقیقه از چی هست ؟ از اون 10 تا اتصال با فاصله یا اون که هر 15 دقیقه میره تو سایت ؟!
کلا راهی هست که اینطوری نشه ؟!
بشه این قضیه رو دور زد؟

navid3d_69
پنج شنبه 10 مرداد 1392, 14:56 عصر
خب نیوک امنیتش تشخصی میده که شما دارین حمله می کنید چون بازدید ها زیاد هست حتی ممکن هست اگر نیوک بلاک نکنه خود فایر وال هاست بلاک می کنه باید راهی برای تغییر الگوریتم داشته باشید

rezaonline.net
پنج شنبه 10 مرداد 1392, 14:59 عصر
csf دارن همه سرورها ، مسلما بلاک میشید .
راه حل اینه درخواست رو با ajax بفرستید که اون با آیی پی کاربر هست و مشکلی پیش نمیاد

generalhak
پنج شنبه 10 مرداد 1392, 15:10 عصر
csf دارن همه سرورها ، مسلما بلاک میشید .
راه حل اینه درخواست رو با ajax بفرستید که اون با آیی پی کاربر هست و مشکلی پیش نمیاد

فکر نکنم اینطوری بشه ها !
چون نمیشه که با ajax یه صفحه رو خوند ! و بعد فرستاد به سرور ! میشه ؟! و php و سرور باید وصل شه و یه کارایی رو انجام بده پس بازم آی پی سرور میشه دیگه !

generalhak
پنج شنبه 10 مرداد 1392, 15:15 عصر
خب نیوک امنیتش تشخصی میده که شما دارین حمله می کنید چون بازدید ها زیاد هست حتی ممکن هست اگر نیوک بلاک نکنه خود فایر وال هاست بلاک می کنه باید راهی برای تغییر الگوریتم داشته باشید

ببین اگر با نیوک بلدی کار کردی ببین این ارور رو میگیره

You have been blocked from entering this site.

You have attempted to improperly access the admin area of this site.

All of the following information has been gathered to assist the webmaster should this need to be reported to local or federal law enforcement.

If you think this is a mistake you can contact the site webmaster at Info(dot)****(at)Gmail(dot)com.

Be SURE to include the following information in any email!
User Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
Remote Address: ******
Client IP: none
Forwarded For: none
Date Blocked: 2013-08-01 @ 01:15:57 IRDT GMT +0430
Block expires: 2013-08-02 @ 01:15:57 IRDT GMT +0430
این الان داره میگه میخواستی به ادمین بری ! در صورتی که کد های من به ادمین کاری ندارن !
من با کوکی و ریفر از همون کلاسی که گفتم وصل میشم به سایت !

navid3d_69
پنج شنبه 10 مرداد 1392, 16:02 عصر
خب ممکن هست ارور اشتباه نمایش داده میشه هر جوری هست شما بلاک میشن حتی اگر نیوک بلاک نکه اون موقه فایروال هاست بلاک می کنه 100%

generalhak
پنج شنبه 10 مرداد 1392, 16:30 عصر
خب ممکن هست ارور اشتباه نمایش داده میشه هر جوری هست شما بلاک میشن حتی اگر نیوک بلاک نکه اون موقه فایروال هاست بلاک می کنه 100%

کلا هیچ راهی نداره ؟ مثلا سرور فکر کنه کلا وصل هستی و یا ... !؟
باید چطوری تنظیم کنم ؟

generalhak
پنج شنبه 10 مرداد 1392, 17:54 عصر
ببینید وقتی میرید داخل یک سایت حداقل 10 تا پیج که باز کنید که مشکلی ندارید دیگه...
داخل هر سایتی میشه 10 تا مطلب رو باز کرد پس فکر نکنم مشکل از این نظر باشه
مشکل باید از اون باشه که هر 1 دقیقه یا 15 دقیقه میرفت داخل سایت و بلاک میکرد....
و تا اون جا که فهمیدم استاندارد 1 ساعت هست یعنی هر 1 ساعت... درسته ؟!
اگر من هر 1 ساعت 20 تا صفحه رو با فاصله زمانی مثلا 1 یا 1.5 ثانیه باز کنم مشکلی پیش میاد ؟! اگر آره اون 20 رو روی چی بزارم ؟

sanecity
جمعه 11 مرداد 1392, 00:14 صبح
بنظرم احتمال میدم کدتون مشکل داره.
چون منم یه کدی دارم که از یه سایت خبری (فارس نیوز) اول RSS رو میگیره بعد هر ساعت بین 50 تا 600 تا پیج باز میکنه و کلی عملیات انجام میده مثلا عکسها رو میگیره ، فیلم ها رو میگیره و ....، و تا حالا بلوک نشدم ، تازه از usleep استفاده کردم و نیم ثانیه تاخیر گذاشتم.
یه احتمال دیگه شاید پیکربندی سروشون مشکل داره چون CSF رو اکثرا بالای 70 کانکشن تنظیم میکنند.

rezaonline.net
جمعه 11 مرداد 1392, 00:29 صبح
فکر نکنم اینطوری بشه ها !
چون نمیشه که با ajax یه صفحه رو خوند ! و بعد فرستاد به سرور ! میشه ؟! و php و سرور باید وصل شه و یه کارایی رو انجام بده پس بازم آی پی سرور میشه دیگه !
چرا نمیشه ؟
:)
اطلاعات رو از rezaonline.net میگیره و میفرسته به فایل save.php روی سایت خودتون ، اونجا هم ذخیره کنید توی دیتابیس یا هر چی :)

<script>
$(document).ready(
function()
{

// get data
$.post('http://rezaonline.net',{'id':'example'},
function(data)
{
//save data
$.post('http://mysite.com/save.php',{'data':data},
function(data)
{
if(data != 'ok')
alet('error');

});

});
}
);
</script>

اینم ذخیره

<?php
// save.php

$data = $_POST['data'];
if( ! empty($data))
{
echo 'ok';

//save to db
// insert into tbl data='$data'
}

generalhak
جمعه 11 مرداد 1392, 14:57 عصر
بنظرم احتمال میدم کدتون مشکل داره.
چون منم یه کدی دارم که از یه سایت خبری (فارس نیوز) اول RSS رو میگیره بعد هر ساعت بین 50 تا 600 تا پیج باز میکنه و کلی عملیات انجام میده مثلا عکسها رو میگیره ، فیلم ها رو میگیره و ....، و تا حالا بلوک نشدم ، تازه از usleep استفاده کردم و نیم ثانیه تاخیر گذاشتم.
یه احتمال دیگه شاید پیکربندی سروشون مشکل داره چون CSF رو اکثرا بالای 70 کانکشن تنظیم میکنند.
آره اولا گیر نمیداد ...
ولی فکر کنم واسه این باشه که شما مثلا گذاشتید روی 1 ساعت و معمولش هم همینه و من گزاشتم روی 1 دقیقه !
فقط یک سوال دیگه میمونه این که 600 تا میشه 300 ثانیه براتون ..... اونوقت TimeOut نمیشه ؟

generalhak
جمعه 11 مرداد 1392, 14:58 عصر
چرا نمیشه ؟
:)
اطلاعات رو از rezaonline.net میگیره و میفرسته به فایل save.php روی سایت خودتون ، اونجا هم ذخیره کنید توی دیتابیس یا هر چی :)

<script>
$(document).ready(
function()
{

// get data
$.post('http://rezaonline.net',{'id':'example'},
function(data)
{
//save data
$.post('http://mysite.com/save.php',{'data':data},
function(data)
{
if(data != 'ok')
alet('error');

});

});
}
);
</script>

اینم ذخیره

<?php
// save.php

$data = $_POST['data'];
if( ! empty($data))
{
echo 'ok';

//save to db
// insert into tbl data='$data'
}

فوقولعاده عالی بود جوابتون
بهترین کار و بهترین روش هست الان تستش میکنم ...
ممنون

sanecity
جمعه 11 مرداد 1392, 15:12 عصر
آره اولا گیر نمیداد ...
ولی فکر کنم واسه این باشه که شما مثلا گذاشتید روی 1 ساعت و معمولش هم همینه و من گزاشتم روی 1 دقیقه !
فقط یک سوال دیگه میمونه این که 600 تا میشه 300 ثانیه براتون ..... اونوقت TimeOut نمیشه ؟

اینو گذاشتم توی htaccess همون دارکتوری که اسکریپت اجرا میشه

<IfModule mod_php5.c>
php_value max_execution_time 259200
</IfModule>

shahriyar3
جمعه 11 مرداد 1392, 15:41 عصر
هدر ها رو براحتی میشه جعل کرد اون وقت دیگه نیوک متوجه نمیشه که همه درخواست ها از یکجا ارسال میشه .
هربار درخواست نوع مرورگر و آیپی و نوع سیستم عامل و رزولوشن صفحه رو عوض کنید توی هدر بعد درخواست و ارسال کنید.
نیوک و وردپرس و با همین روش به راحتی میشه دور زد

generalhak
جمعه 11 مرداد 1392, 18:29 عصر
هدر ها رو براحتی میشه جعل کرد اون وقت دیگه نیوک متوجه نمیشه که همه درخواست ها از یکجا ارسال میشه .
هربار درخواست نوع مرورگر و آیپی و نوع سیستم عامل و رزولوشن صفحه رو عوض کنید توی هدر بعد درخواست و ارسال کنید.
نیوک و وردپرس و با همین روش به راحتی میشه دور زد

سلام
ممنون از پاسختون ...
آی پی رو چطوری جعل کنم با header ؟!

shahriyar3
جمعه 11 مرداد 1392, 18:58 عصر
سلام
ممنون از پاسختون ...
آی پی رو چطوری جعل کنم با header ؟!
بله , لیست کامل المنت های هدر و از ویکی پدیا بخون
همه المنت هاش قابلیت جعل شدن و دارن

saeedvir
جمعه 11 مرداد 1392, 19:47 عصر
اینجا رو ببین (http://barnamenevis.org/showthread.php?405558-%D8%B1%D9%88%D8%B4%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-%D8%A2%DB%8C-%D9%BE%DB%8C-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%DA%A9%D9%87-%D9%86%D8%B4%D9%87-%D8%AF%D9%88%D8%B1%D8%B4-%D8%B2%D8%AF-%D9%87%D8%B3%D8%AA-%D8%9F)

rezaonline.net
جمعه 11 مرداد 1392, 20:06 عصر
در ها رو براحتی میشه جعل کرد اون وقت دیگه نیوک متوجه نمیشه که همه درخواست ها از یکجا ارسال میشه .
هربار درخواست نوع مرورگر و آیپی و نوع سیستم عامل و رزولوشن صفحه رو عوض کنید توی هدر بعد درخواست و ارسال کنید.
نیوک و وردپرس و با همین روش به راحتی میشه دور زد
هدر های HTTP_CLIENT_IP یا HTTP_X_FORWARDED_FOR و ... رو میتونید جعل کنید اما REMOTE_ADDR رو خیر .
با عرض تاسف باید بگم 99درصد سایتها برای چک کردن آی پی ،
$_SERVER['REMOTE_ADDR']; رو چک میکنن پس قضیه جعل کردن آی پی منتفیه .

generalhak
جمعه 11 مرداد 1392, 21:09 عصر
چرا نمیشه ؟
:)
اطلاعات رو از rezaonline.net میگیره و میفرسته به فایل save.php روی سایت خودتون ، اونجا هم ذخیره کنید توی دیتابیس یا هر چی :)

<script>
$(document).ready(
function()
{

// get data
$.post('http://rezaonline.net',{'id':'example'},
function(data)
{
//save data
$.post('http://mysite.com/save.php',{'data':data},
function(data)
{
if(data != 'ok')
alet('error');

});

});
}
);
</script>

اینم ذخیره

<?php
// save.php

$data = $_POST['data'];
if( ! empty($data))
{
echo 'ok';

//save to db
// insert into tbl data='$data'
}

من زیاد jquery یاد ندارم عزیز ! این تابع رو هم میزنم عمل نمیکنه !
یه تابع بدید که وقتی تابع فراخونی بشه اون صفحه مقصد رو بخونه بعد بفرسته برای اون صفحه php لطفا اگر میشه !

webtracker
جمعه 11 مرداد 1392, 22:08 عصر
من نمی دونم چطور میشه بااین کد jquery از یک دومین دیگه اطلاعات گرفت چون براساس گفته ویکی (http://en.wikipedia.org/wiki/Same_origin_policy)به علت اینکه کد جی کوئری در مرورگر اجرا میشه محدودیت در ارتباط کراس دومین داره. اما اگه جستجو کنید روش هایی برای انجام وجود داره من خودم از این روش استفاده می کنم:لینک (http://icant.co.uk/articles/crossdomain-ajax-with-jquery/error-handling.html)اما برای چند تا درخواست همزمان استفاده نکردم

rezaonline.net
جمعه 11 مرداد 1392, 22:14 عصر
من زیاد jquery یاد ندارم عزیز ! این تابع رو هم میزنم عمل نمیکنه !
یه تابع بدید که وقتی تابع فراخونی بشه اون صفحه مقصد رو بخونه بعد بفرسته برای اون صفحه php لطفا اگر میشه !
کد که واضحه تست هم کردم کار میکنه .
فقط شما به من بگید قبل از این کد ، کتابخانه جی کوئری رو لود کردید ؟
:)

generalhak
جمعه 11 مرداد 1392, 22:41 عصر
کد که واضحه تست هم کردم کار میکنه .
فقط شما به من بگید قبل از این کد ، کتابخانه جی کوئری رو لود کردید ؟
:)
بله .....
مثل این که مشکل از cache بود ....
عزیز 1 دنیا ممنون ...

generalhak
شنبه 12 مرداد 1392, 20:54 عصر
کد که واضحه تست هم کردم کار میکنه .
فقط شما به من بگید قبل از این کد ، کتابخانه جی کوئری رو لود کردید ؟
:)

الان که باز تست کردم غیر از هاست خودم نمیشه .. یعنی سایت دیگه ای رو نمیگیره !
بعد یه مشکل هم هست این که خوب من باید با curl یک صفحه رو میگرفتم تا کوکی و... رو اوکی کنم... بعد صفحه باز میشد...
اما فکر نکنم این کد رو بشه باهاش همچین کاری کرد یا jquery همچین چیزی رو داشته باشه .. !!

generalhak
شنبه 12 مرداد 1392, 21:59 عصر
فهمیدم !
میشه کوکی که میخوام رو به بروزر کاربر بدم ! بعد این کد رو اجرا کنم !!
آپدیت : نمیشه , چون باید کوکی از آدرس همون سایت باشه !
اما بازم یه مشکلی هست که کلا کد یکمی ایراد داره ! بعضی وقتها میشه بعضی وقتها نمیشه و فقط روی دامین خودم اونم بعضی وقتها میشه !
چرا ؟!؟

rezaonline.net
شنبه 12 مرداد 1392, 22:31 عصر
به جای post از متد ajax استفاده کنید تایم اوت هم بدید .

generalhak
شنبه 12 مرداد 1392, 22:53 عصر
به جای post از متد ajax استفاده کنید تایم اوت هم بدید .

عزیز یه پیغام خصوصی دادم بهت ...
میگم کلا اول قضیه کوکی رو چیکار کنم ؟! راهی هست با jquery مثل curl کوکی ارسال کنیم ؟! که صفحه رو بگیریم ؟!

generalhak
شنبه 26 مرداد 1392, 12:59 عصر
واسه این قضیه یه چیزی پیدا کردم در خود سایت php.net این دوستمون یه چیزایی گفته راجع به blocking دوستان ببینید در زیر منظورش همینه یا نه ؟ یعنی داره میگه از این روشی که معرفی کرده با چند اتصال بلاک نمیشیم !؟ من درست منظورشو نفهمیدم !
داخل اون لینکی هم که داده ببینید...


http://curl.haxx.se/libcurl/c/libcurl-multi.html

"When you've added the handles you have for the moment (you can still add new ones at any time), you start the transfers by call curl_multi_perform(3).

curl_multi_perform(3) is asynchronous. It will only execute as little as possible and then return back control to your program. It is designed to never block. If it returns CURLM_CALL_MULTI_PERFORM you better call it again soon, as that is a signal that it still has local data to send or remote data to receive."

So it seems the loop in sample script should look this way:

<?php
$running=null;
//execute the handles
do {
while (CURLM_CALL_MULTI_PERFORM === curl_multi_exec($mh, $running));
if (!$running) break;
while (($res = curl_multi_select($mh)) === 0) {};
if ($res === false) {
echo "<h1>select error</h1>";
break;
}
} while (true);
?>

This worked fine (PHP 5.2.5 @ FBSD 6.2) without running non-blocked loop and wasting CPU time.

However this seems to be the only use of curl_multi_select, coz there's no simple way to bind it with other PHP wrappers for select syscall.

ali2k5
شنبه 26 مرداد 1392, 20:56 عصر
چرا نمیشه ؟
:)
اطلاعات رو از rezaonline.net میگیره و میفرسته به فایل save.php روی سایت خودتون ، اونجا هم ذخیره کنید توی دیتابیس یا هر چی :)

<script>
$(document).ready(
function()
{

// get data
$.post('http://rezaonline.net',{'id':'example'},
function(data)
{
//save data
$.post('http://mysite.com/save.php',{'data':data},
function(data)
{
if(data != 'ok')
alet('error');

});

});
}
);
</script>

اینم ذخیره

<?php
// save.php

$data = $_POST['data'];
if( ! empty($data))
{
echo 'ok';

//save to db
// insert into tbl data='$data'
}


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

ali2k5
شنبه 26 مرداد 1392, 20:58 عصر
دوست عزیز مشکل شما فایروال و تعداد درخواستت نیست اگر از فایروال مسدود بشی کلا کانکشن دیگه برقرار نمیشه و شما نمی تونی پیغام بلاک شدن رو ببینی ، اگر از تعداد درخواستت باشه و فرضا وب سرور بلاک کنه شما پیغام 403 را خواهید دید پس زمانیکه شما پیغام بلاک نیوک رو می بینید یعنی همون محافظ نیوک داره میگیره شما رو که باید بگی چه صفحه هایی روی سایت رو باز میکنی تا بهت بگم چجوری از محافظ نیوک رد بشی ...

generalhak
شنبه 26 مرداد 1392, 21:10 عصر
دوست عزیز مشکل شما فایروال و تعداد درخواستت نیست اگر از فایروال مسدود بشی کلا کانکشن دیگه برقرار نمیشه و شما نمی تونی پیغام بلاک شدن رو ببینی ، اگر از تعداد درخواستت باشه و فرضا وب سرور بلاک کنه شما پیغام 403 را خواهید دید پس زمانیکه شما پیغام بلاک نیوک رو می بینید یعنی همون محافظ نیوک داره میگیره شما رو که باید بگی چه صفحه هایی روی سایت رو باز میکنی تا بهت بگم چجوری از محافظ نیوک رد بشی ...

گفتم در بالا ...
پست های معمولی سایت رو با curl میگیرم اما برای این پست ها باید عضو بشی و وقتی عضو میشی یک cookie مخصوص user بهت میده که میفهمه قبلا عضو شدی پس درخواست رو همراه همون کوکی با curl میفرستم اما اون کوکی های دیگه رو نمیفرستم ! اما بازم کوکی به مرورگر میده ! حالا باید چطوری اون پست هایی که فقط برای اعضا باز میشه رو بگیرم ؟! بدون این که نگهبان عزیز نیوک گیر بده ؟
الان گزاشتم روی هر 2 ساعت حدود 3-4 تا اتصال و دیگه بلاک نمیکنه اما باید این تعداد اتصالات و یا زمان بینشون کمتر بشه...
اگه توضیح دیگه ای هم خواستید بگید تا بگم...