Evdeki internetimi bir türlü sabit ip’ye çevirtemedim. Zaman bulupta telekoma gidip dilekçe veremiyorum(telefonla da olmuyormuş). Ara sıra evdeki bilgisayara remote desktopla girmem gerektiğinde “ip neydi yaw?” sorunsalıyla karşılaşmamak için geçen gün çok basit bir çözüm geliştirdim.
Mantık oldukça basit. Bilgisayarımda çalışan bir c# windows servis, 10 dakika aralıklar ile web’de bir PHP scriptine request yollayacak, PHP scripti hangi ip’den request geldiğini loglayacak ve web ortamında bana göstericek.
Öncelikle Windows servisin kodunu göstereyim :
private void WorkerFunction()
{
while (true)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
"http://www.mertoztekin.com/myip/?update=1&t" + DateTime.Now.Ticks);
request.Method = "GET";
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential("username", "password");
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0;"
+" Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
request.GetResponse().Close();
}
catch (WebException)
{
//internet gitti
}
Thread.Sleep(new TimeSpan(0,15,0));
}
}
kod oldukça basit. Thread kendini bir döngüye sokuyor.
Sistem http://www.mertoztekin.com/myip/index.php adresini çağırıyor(PHP scriptini aşağıda açıklayacağım). Adrese dışarıdan insanların müdahale edilememesi için myip klasörünü şifreledim. Bu şifreyi geçebilmek için “username”,”password” kısmında gerçek username ve password var. Siz kendi bilgisayarınızda derlerken, hem php adresini (benim siteme ping atmayın lütfen
) hemde eğer klasörü şiflreyecekseniz şifreleri değiştirin. Eğer şifresiz klasör kullanıcaksanız satırı direk silebilirsiniz. Kaynak kodunu indirmek için : IpNotifier
PHP kısmı :
$dosyaAdi="ipdosyasi.txt";
if($_GET["update"]==1)
{
$ip = $_SERVER["REMOTE_ADDR"]." Last Update :".date("d.m.Y H:i");
$handle = fopen($dosyaAdi, "w");
fwrite($handle,$ip);
fclose($handle);
echo "1";
return;
}
include($dosyaAdi);
PHP kodu da oldukça basit. Eğer GET parametresi update=1 olarak gelirse, iplerin tutulduğu dosyaya hangi adresten hangi tarihten request geldiğini yazıyor.
Eğer siz başka bir lokasyondan evdeki bilgisayarın ipsini görmek isterseniz bu dosyaya get parametresi olmadan geldiğinizde son kayıtlı ipyi size veriyor.
Oldukça basit ama işe yarayan bir yöntem. Ekte Windows Service kodunu koyuyorum. Windows servisini işletim sistemine kaydetmek ve otomatik başlamasını sağlamak için installutil.exe yi kullanabilirsiniz (http://msdn.microsoft.com/en-us/library/50614e95(v=vs.80).aspx)


Leave a Reply