PDA

View Full Version : افزایش سرعت برای پورت اسکنینگ



houtanal
چهارشنبه 03 فروردین 1384, 00:46 صبح
کد زیر را در نظر بگیرید



<?php

function checkPort($host, $port, $timeout)
{
$socket = @fsockopen($host, $port, $errorNumber, $errorString, $timeout);

if ($socket) {
echo "The".$port."is open<p>";
}

@fclose($socket);
}

for ($i=70;$i<=90;$i++){
checkPort("localhost",$i,1);
}

?>

اگر timeout را یک قرار دهم برای چک کردن هر پورت یک ثانیه زمان میخواهد
بنابراین استفاده از این روش برای پورت اسکنینگ مناسب نیست
الگوریتم سریع تری برای این منظور سراغ دارید؟
حداقل زمانی که می توانم در timeout ست کنم تا نتایج قابل قبول بگیرم چیست؟

oxygenws
چهارشنبه 03 فروردین 1384, 01:31 صبح
برای چک کردن هر پورت یک ثانیه زمان میخواهد
بهتره بگیم که برای چک کردن هر پورت ماکزیمم یک ثانیه زمان می بره. (البته معمولا اکثر پورت ها بسته اند) و تا اونجایی که من می دونم چاره ای نیست، یعنی زمانی کمتر از این نمی شه داد.
البته نوع این timeout اینجوری که دیدم float می باشد، پس بد نیست خودت یک عدد اعشاری کوچک رو تست کنی، اما ممکنه نتایج درستی برنگردونه (یعنی پورتی باز رو بگه بسته است)
در همین مورد بد نیست سری به لینک زیر هم بزنی:
http://www.php.net/manual/en/function.stream-set-timeout.php


الگوریتم سریع تری برای این منظور سراغ دارید؟
باید این کار رو موازی انجام بدی و از توابع زیر استفاده کنی:
http://www.php.net/manual/en/ref.pcntl.php

یا اینکه مستقیما از سوکت ها استفاده کنی که در این حالت حدس می زنم سرعت برنامه (منظورم اون یک ثانیه نیست ها) کمی زیاد تر بشه.

اگر هم دسترسی شل روی لینوکس دارید، می تونید از command لینوکس استفاده کنید.

توضیح اضافی: ان شا الله به زودی thread ها هم به سادگی جاوا و ... در PHP پشتیبانی خواهند شد و دیگه این مشکلات رو نخواهیم داشت.

موفق باشید، امید

houtanal
چهارشنبه 03 فروردین 1384, 03:04 صبح
بهتره بگیم که برای چک کردن هر پورت ماکزیمم یک ثانیه زمان می بره.


چاره ای نیست، یعنی زمانی کمتر از این نمی شه داد.

منظورم همینه.حساب کن برای چک کردن مثلا 100 پورت چقدر زمان می بره!!!با توجه به اینکه شاید 10 تا بیشتر باز نباشه


اینکه مستقیما از سوکت ها استفاده کنی
الان همین کار رو دارم می کنم دیگه (درسته؟)


گر هم دسترسی شل روی لینوکس دارید، می تونید از command لینوکس استفاده کنید.
سرور اختصاصی نیست که بتونم روش نرم افزار نصب کنم (سرور خودته :mrgreen: )
آیا فرمان خاصی برای این کار هست؟


باید این کار رو موازی انجام بدی
امتحان می کنم

oxygenws
چهارشنبه 03 فروردین 1384, 10:51 صبح
الان همین کار رو دارم می کنم دیگه (درسته؟)
درسته از سوکت استفاده می کنی، اما مستقیم نیست!!
منظورم از سری توابع سوکت که معمولا توشون کلمه socket رو هم دارند.


سرور اختصاصی نیست که بتونم روش نرم افزار نصب کنم (سرور خودته آقای سبز )
آیا فرمان خاصی برای این کار هست؟
خوب اگه دسترسی نداری پس بی خیال.
دستور خاصی هم نیست، ولی برنامه ای هست که تو اکثر لینوکس ها نصبه، به نام nmap


امتحان می کنم
رو سرور من pcntl نصب نیست، پس بی خیال!!! :)

چاکریم.

sirbijan
جمعه 05 فروردین 1384, 13:18 عصر
سلام

میتونم بپرسم اصلا برای چی میخوای یک سری پورت را چک کنی ببینی که باز هستند یا نه؟ می دونم سوالم کمی پچه گونست، ولی خب چیکار کنم، نمیدونم! آخه معمولا من فقط وقتی با سوکتها کار میکنم که مثلا یک سایتی گفته به این وسیله میتونی ازم اطلاعات بکشی، یا مثلا حتی بخوام صفحات سایت را با پورت ۸۰ بخونم. چه کارهای دیگه ای میشه باهاش کرد؟