PDA

View Full Version : سوال: سوال برنامه نویسی به زبان c++ در زمینه شبکه



foroughmozhdehi
جمعه 06 مرداد 1391, 01:41 صبح
سلام
میخوام برنامه ای به زبان c++ بنویسم که وقتی دانلود میشه ip و نوع os سیستمی که دانلود کرده رو بفرسته...
کسی تو حلش میتونه کمکم کنه؟!؟!؟!؟
ممنون میشم
:لبخندساده:

one hacker alone
جمعه 06 مرداد 1391, 03:18 صبح
سوال از ریشه ایراد داره چون این برنامه شما چه خطرناک ترین ویروس دنیا باشه چه یه فایل ایکون باشه تا وقتی اجرا نشه هیچ کاری ازش برنمیاد
پس صورت سوال رو تغییر میدیم
چجوری میتونیم تو سی++ نوع سیستم عامل و ای پی سیستم رو بگیریم
جواب:
روش اول(غیر منطقی):
با دستورات داس میتونی ای پی رو بگیری مثلا ipconfig بعد میریزی تو یه فایل و میخونی ورژن سیستم عامل هم همینطور

روش دوم: استفاده از توابع api

روش سوم: نوشتن توابع دستی

برای لینوکس هم همین راه ها رو داری با یکم تغییر


برای ارسال گزارش هم از یه هاست رایگان استفاده کن

#target
جمعه 06 مرداد 1391, 04:13 صبح
وقتی برنامه دانلود میشه یا طرف ی فایلی رو دانلود میکنه
میتونید برنامه نویسی سی سمت سرور انجام بدید که هر وقت فایلتونو طرف دانلود کرد شما User agent رو ذخیره کنه براتون
البته با زبان های تحت وب مثل PHP خیلی راحت تره
ولی C هم میشه . برا راحتی کار میتونید از برنامه ای مثل C Server Page (http://www.micronovae.com/ref/Main.html) استفاده کنین . تابعی مثل GetServerVariable (http://www.micronovae.com/ref/CSPRequest_GetServerVariable.html)

حامد مصافی
جمعه 06 مرداد 1391, 09:55 صبح
اول: هر رایانه‌ در هر شبکه‌ای یک ip جداگانه داره. یعنی با دستوراتی مانند ipconfig نمی‌تونین به ip اون کامپیوتر در اینترنت برسید مگر اینکه از یک سرور در اینترنت کمک بگیرید.
دوم: اگر قرار باشه این برنامه نوع os را نیز شاسایی کند یعنی باید بتواند روی os های مختلف مانند لینوکس و ویندوز و ... کار کند که ممکن نیست!
سوم: فرمودید کاربر باید آن را دانلود کند. در همان صفحه دانلود با استفاده از زبان‌های سمت سرور مانند php , asp.net به سادگی می‌توانید os و ip را به دست بیاورید.

amin1softco
جمعه 06 مرداد 1391, 10:15 صبح
اول اینکه سیستم عامل ها متفاوت هستند برنامه اگر قرار باشه برنامه پس از اجرا اینکار رو بکنه چون برای یک os خاص کامپایل شده در os های دیگه نمی تونه اجرا بشه!! دیگه چه برسه به ارسال اطلاعات ...
ولی اگر قرار باشه بوسیله CGI برنامه بنوسید که برنامه طرف سرور اجرا بشه شما می تونید از همچین کدی استفاده کنید:

#include <iostream>
using namespace std;

const string ENV[ 24 ] = {
"COMSPEC", "DOCUMENT_ROOT", "GATEWAY_INTERFACE",
"HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING",
"HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION",
"HTTP_HOST", "HTTP_USER_AGENT", "PATH",
"QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",
"REQUEST_METHOD", "REQUEST_URI", "SCRIPT_FILENAME",
"SCRIPT_NAME", "SERVER_ADDR", "SERVER_ADMIN",
"SERVER_NAME","SERVER_PORT","SERVER_PROTOCOL",
"SERVER_SIGNATURE","SERVER_SOFTWARE" };

int main ()
{

cout << "Content-type:text/html\r\n\r\n";
cout << "<html>\n";
cout << "<head>\n";
cout << "<title>CGI Envrionment Variables</title>\n";
cout << "</head>\n";
cout << "<body>\n";
cout << "<table border = \"0\" cellspacing = \"2\">";

for ( int i = 0; i < 24; i++ )
{
cout << "<tr><td>" << ENV[ i ] << "</td><td>";
// attempt to retrieve value of environment variable
char *value = getenv( ENV[ i ].c_str() );
if ( value != 0 ){
cout << value;
}else{
cout << "Environment variable does not exist.";
}
cout << "</td></tr>\n";
}
cout << "</table><\n";
cout << "</body>\n";
cout << "</html>\n";

return 0;
}


برای تنظیمات آپاچی هم اینجا (http://barnamenevis.org/www.tutorialspoint.com/cplusplus/cpp_web_programming.htm) رو ببنید.

ولی با روش #target (http://barnamenevis.org/member.php?90771-target) بیشتر موافقم
برای php به یک خط کد احتیاج دارید :


<?php echo $_SERVER['HTTP_USER_AGENT']; ?>

برای آی پی هم بهتر از این تابع استفاده کنید:


function getIP() {
$ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else
$ip = "UNKNOWN";
return $ip;

}

به هر حال انتخابش به خودتون بر می گرده

one hacker alone
جمعه 06 مرداد 1391, 15:04 عصر
اول: هر رایانه‌ در هر شبکه‌ای یک ip جداگانه داره. یعنی با دستوراتی مانند ipconfig نمی‌تونین به ip اون کامپیوتر در اینترنت برسید مگر اینکه از یک سرور در اینترنت کمک بگیرید.
دوم: اگر قرار باشه این برنامه نوع os را نیز شاسایی کند یعنی باید بتواند روی os های مختلف مانند لینوکس و ویندوز و ... کار کند که ممکن نیست!
سوم: فرمودید کاربر باید آن را دانلود کند. در همان صفحه دانلود با استفاده از زبان‌های سمت سرور مانند php , asp.net به سادگی می‌توانید os و ip را به دست بیاورید.

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

من فرض رو بر این گرفتم که ایشون برنامه ای با سی بنویسه بعد بزاره ملت دانلود کنن بعد که رو سیستمشون اجراش کنن اطلاعات اون سیستم رو بده
اگه ایشون منظورشون بحث وب هست که اصلا نیازی به این دردسرها نیست و با یه اسکریپت ساده میشه php این کار امکان پذیر هست البته کاربران یک isp یه ایپی براشون می افته


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

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

حامد مصافی
جمعه 06 مرداد 1391, 21:33 عصر
این موضوع ربطی به تاپیک یا حتی این بخش نداره و فقط برای روشن شدن موضوع جواب میدم. شما دستور ipconfig رو صادر کنید و ip خودتون رو با چیزی که در سایت http://my-ip-address.com/ میبینید مقایسه کنید. همونطوری که می‌بینید ipconfig شماره ip شما در شبکه محلی رو میده اما در اینترنت شماره ip شما یا یک ip ولید و یا شماره ip یک nat server (متعلق به isp) خواهد بود.

mohsenre
جمعه 06 مرداد 1391, 22:31 عصر
ببخشید یه سوال داشتم .و این که
چرا برا چاپ ENV[24] خطا میگیره

در خط 8
cout << "<tr><td>" << ENV[ i ] << "</td><td>";
نمیشه چاپش کرد ونمیشه عملگر >>را براش تعریف کرد
ممنون

#target
جمعه 06 مرداد 1391, 22:38 عصر
cout << "<tr><td>" << ENV[i].c_str() << "</td><td>";

mohsenre
شنبه 07 مرداد 1391, 12:11 عصر
ممنون از راهنماییتون.ببخشید کسی میدونه کاربرد cgi چیه؟
منظوزم اینه که از نظر من :همون دستورات html هستش که با ++c نوشته میشه. ولی چطوری میشه از اون فایل html استفاده کرد و کجا ذخیره میشه اون فایل html
ممنون از اینکه وقت میزارید

amin1softco
شنبه 07 مرداد 1391, 20:04 عصر
اگر به همان آدرسی که دادم مراجعه کنید توضیحاتش وجود داره البته با چیز پی ان ایران گویا تحریم است.
شما ابتدا وب سرور آپاچی رو نصب می کنید این برنامه رو هم کامپایل می کنید و پسوندش را به .cgi تغییر می دهید و به شاخه /var/www/cgi-bin منتقلش می کنید و در مرورگر همین آدرس رو وارد می کنید /cgi-bin/cpp_env.cgi و دقیقاً یک صفحه وب برای شما باز خواهد شد .

foroughmozhdehi
یک شنبه 08 مرداد 1391, 02:38 صبح
از همه بی نهایت ممنونم ... جواباتون خیلی کمکم کرد:لبخندساده:

پیاده سازیش میکنم

اگه مشکلی بود با عرض پوزش بازم مزاحمتون میشم

بازم ممنون:لبخندساده:

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

ahmad-hagh
یک شنبه 08 مرداد 1391, 22:25 عصر
با c++ کار نمی کنم
اگه نرم افزارت بخواد آی پی رو بفرسته فایر وال بهش گیر میده که البته برا رهایی ازش کارای خودش رو داره که تو فرم ها پیدا میشه
به قول دوستان بهترین راه همون صفحه php یا ASP.NET هستش که که آی پی و os طرف رو میتونه برات بفرسته
البته با جاوا اسکریپت هم میتونی آی پی و سیستم عامل طرف رو بگیری

ahmad-hagh
یک شنبه 08 مرداد 1391, 22:26 عصر
http://www.tracemyip.org/tools/show-user-ip-info-box
چیزه جالبیه