PDA

View Full Version : چك كردن وضعيت اينترنت



one hacker alone
پنج شنبه 10 فروردین 1391, 23:53 عصر
سلام براي چك كردن وضعيت اينترنت كد زير مشكلش چيه كه همش افلاين ميزنه؟ژ

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <wininet.h>
#include <conio.h>
#pragma comment (lib, "wininet.lib")

BOOL IsGlobalOffline(void)
{
DWORD dwState = 0;
DWORD dwSize = sizeof(DWORD);
BOOL fRet = FALSE;
if (InternetQueryOption(NULL, INTERNET_OPTION_CONNECTED_STATE, &dwState, &dwSize))
{
if (dwState & INTERNET_STATE_DISCONNECTED_BY_USER)
fRet = TRUE;
}

return fRet;
}

void main()
{
if (IsGlobalOffline())
printf("This machine is offline\n");
else
printf("This machine is connected to the Internet\n");
getch();
}


كد زير رو هم تست كردم اما متاسفانه در اوج سادگي خطا داره و معلوم نيست مشكلش چيه؟


#include "stdafx.h"
#include <intshcut.h>
#include "Wininet.h"
#include intshcut.h
#include <iostream.h>
int main(int argc, char* argv[])
{
if(InetIsOffline(0))
cout<<"ok";
else
cout<<"no";

return 0;
}




url.lib رو هم اضافه كردم

one hacker alone
دوشنبه 14 فروردین 1391, 11:39 صبح
با اين وضعيت چكار كنيم؟

V0RTEX
دوشنبه 14 فروردین 1391, 15:21 عصر
اگه ممکنه solution رو بزارید چون این طوری معلوم نیست تو stdafx.h چی هست و تنظیمات چی هست

one hacker alone
سه شنبه 15 فروردین 1391, 02:14 صبح
ممنون برنامه رو با سوكت بازنويسي كردم و اينجوري نوشتم اما برام عجيب هست كه چرا كد هاي بالا كار نميكنه

amin1softco
سه شنبه 15 فروردین 1391, 08:45 صبح
کد اول هیچ مشکلی نداره من با vc++2010 تست کردم
کد دومی کار می کنه فقط یادت رفته url.lib را ضمیمه کنی این کد رو تست کن:

#include <windows.h>
#include <IntShCut.h>
#include <iostream>
#pragma comment (lib, "url.lib")
using namespace std;
int main(int argc, char* argv[])
{

if(!InetIsOffline(0))
cout<<"ok";
else
cout<<"no";

return 0;
}

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

one hacker alone
چهارشنبه 16 فروردین 1391, 00:43 صبح
من MSDN رو نگاه كردم ميگه اين تابع براي چك كردن اتصال سيستم به اينترنت هست
در نتيجه نبايد محدود به اكسپلورر باشه
اين تابع قرار در حالت عدم اتصال مقدار true و در حالت اتصال مقدار False رو برگردونه كه من اين كد رو تست كردم متاسفانه براي من كار نميكه و كلا ميگه وصل نيستي
فكر نكنم محدود به نوع اتصال باشه من dial وصل شدم نميدونم

amin1softco
چهارشنبه 16 فروردین 1391, 08:41 صبح
من با ADSL توابع رو چک کردم وقتی آنلاین باشی در حالت معمولی مقدار true بر می گردونه اما وقتی work offline میزنی میگه اینترنت قطعه در حالی که به اینترنت دسترسی داری!!!
حتی وقتی اینترنت قطعه باشه آنلاین می زنه اما وقتی work offline اینترنت اکسپلورر رو تیکش رو بزنی میگه وصل نیستی !!
کلاً به نظرم خودتون یک تابع بنویسید گوگل یا یاهو رو پینگ کنه به نظرم عاقلانه تر باشه دیگه خود دانید. مایکروسافت هم که بی عیب نیست اونم هزار تا باگ داره..

one hacker alone
چهارشنبه 16 فروردین 1391, 14:54 عصر
بله كاملا حق با شماست دوست عزيز اين تابع با بررسي وضعيت IE خروجي ميده و ربطي به اتصال به اينترنت نداره ممنون
من خودم براي اين كار يه تابع نوشتم اما برام عملكرد اين تابع سوال بود كه مشخص شد با IE كار ميكنه
ممنون از راهنماييتون
من يه سوال ديگه دارم اونم اينه كه در vc++ .net مثل 2005 2008 2010 اگه ما برنامه هامون رو با win32 بنويسيم ايا راهي هست كه به نحوي بنويسيم كه نياز به .net براي اجرا نباشه؟
چون فكر كنم افرادي كه ويروس طراحي ميكنن يا بد افزار هاي ديگه براي اين كار از vc 6 استفاده ميكنن حالا ميخوام بدونم با توجه به امكانات نسخه جديد ايا ما ميتونيم برنامه ها مون رو مانند 6 بنويسيم كه مستقيم اجرا ميشن؟

amin1softco
چهارشنبه 16 فروردین 1391, 16:42 عصر
متوجه نمی شم یعنی برنامه هایه win32 و MFC که کامپایل می شه احتیاج به دات نت دارند؟! من تست نکردم ولی نباید اینجوری باشه
والا اگر پروژه ایی که دارید از نوع CLR باشه یا managed احتیاج به دات نت داره . در غیر اینصورت که فرقی ندارند چه 2010 چه 6 , چون برنامه کامپایل می شه به کد ماشین.
البته تا جایی که من می دونم.

one hacker alone
شنبه 19 فروردین 1391, 20:53 عصر
صحبت سر اينه كه چه پلتفرم هايي هنوز ساپورت ميشن
ببينيد ما الان توي c# برنامه اي كه مينويسيم براي اجرا در سيستم ديگه نياز به وجود .net داره حالا ميخوام بدونم نسخه هاي جديد c++ ايا پلتفرم هاي قديمي رو هنوز به همراه داره يا ما فقط .net ميتونيم بنويسيم

amin1softco
یک شنبه 20 فروردین 1391, 23:36 عصر
شما اگر هنگام کامپایل از توابع دات نت استفاده کنید حالت managed می شه و احتیاج به دات نت داره که با /clr برای کامپایلر مشخص می شه در غیر اینصورت از تمام توابع قدیمی فک کنم حمایت بشه.
ولی خوب حرفه ایی ها از کامپایلر مخصوص خودشون استفاده می کنند مثل همین کرم کامپیوتری duqu که شرکت کاسپراسکای گفته بود با کامپایلر های شناخته شده سی نوشته نشده!!!

one hacker alone
دوشنبه 21 فروردین 1391, 11:15 صبح
بله درسته اما اين كار براي ما ميسر نيست و نيازي هم به اين كار نيست البته جديدا تروجاني شناسايي شده بود كه مشخص نبود با چه زباني نوشته شده !
يعني اينكه شايد ارزش اين رو داشته باشه كه با زبان تخصصي بدافزاري نويسي كرد يا اينكه توابع سيستمي رو كنار گذاشت و خود اقدام به نوشتن فراخوان هاي سيستمي و توابع سطح پايين كرد اما خوب كامپايلر تفاوتي از ديد عملكرد برنامه نداره

حالا با توجه به اينكه بهترين كامپايلر براي ويندوز همين vc هست من گفتم اگه امكان داشته باشه از ور‍ژن هاي جديدش استفاده كنم كه شك كردم به اينكه ما نياز به .net براي اجرا داشته باشيم يا نه
اما تاجايي كه ميدونم شايد اين جمله صحيح نباشه كه مادامي كه از توابع .net در برنامه استفاده نميكنيم برنامه ما يك برنامه غير .net ي هست چرا كن با توجه به معماري net ما اين رو بايد بدونيم كه net محدود به يكسري توابع نيست بلكه يك پلتفرم كاري هست و وقتي كد هاي ما كه هرچيزي ميخواد باشه تبديل به زبان مياني قابل فهم براي net ميشه و به هنگام اجرا تبديل به ماشين ميشه يعني در واقع CLR هست پس ما بايد كد هامون رو به روش CLR ننويسيم و بسته به نياز به روش هايي از جمله پلتفرم COM ويا ATL و MFC و Win32 و... بنويسيم اما من امتحان نكردم كه ايا در ورژن هاي جديدvs اين محيط هاي كاري در نوع پروژه وجود داره يا نه