Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen vkamadan »

Merhabalar ,

Uzak noktalardan windowsun uzak masa üstü özelliğinden yararlanılarak kullanılan bir programım var, yapmak istediğim şey uzaktan oturum açan kullanıcının WAN IP adresini öğrenmek.

Windows oturum bilgisinde bu bilgileri tutuyordur die düşündüm ve Windows SDK da araştırma yaparken WtsEnumerateSessions , WTSQuerySessionInformation ve WTSClientAddress apilerinin bana istediğimi verebileceğini düşündüm aşağıdaki örneği buldum;

http://www.remkoweijnen.nl/blog/2007/10 ... p-address/ bu adresteki örneği test ettiğimde, uzak makinaya bağlanan kullanıcının kendi yerel ağındaki yerel IP adresini verdiğini gördüm tabi işimi görmedi, bana uzak makinaya oturum açan kullanıcının WAN IP adresini elde edebileceğim bir yöntem önerebilecek arkadaşlara şimdiden teşekkürler.

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen G.Arkas »

Umarım yanlış anlamamışımdır.Burada bir yazılım var bakarmısınız.

http://www.mywanip.com/

Birde

http://wandering-ips.com/
Resim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen vkamadan »

Merhabalar ,
Yapmak istediğim şeyi biraz daha basit açıklamaya çalışayım ,

81.x.x.x nolu IP adresinde bir Windows 2003 Server bilgisayar var ve muhtelif windows kullanıcıları tanımlı halde bekliyor, en önemlisi bu bilgisayar üzerinde yüklü tarafımdan yazılmış bir uygulama var.

yapmak istediğim olay şu ;
diyelim ki 85.x.x.x nolu Public IP adresine sahip uzaktaki bir kullanıcı 81.x.x.x makinasına windowsun uzak masaüstü uygulamasıyla oturumu açıp benim programımı çalıştırdığı zaman ben yine aynı programın log sistemine işte şu saatte 85.x.x.x nolu IP den falanca isimli kullanıcı oturum açıp programa giriş yaptı demek istiyorum.

yukarıda yazdığım örnekte ise 85.x.x.x nolu Public IP ile oturum açan kullanıcın kendi yerel ağındaki (örn: 10.0.0.5) IP adresini elde edebiliyorum işimi görmüyor.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen mrmarman »

Merhaba..

Ben benzeri işlemler için Normalde WebServices / WSDL erişimi kullanıyroum. Oturum açan bilgisayar programım ile direkt erişim sağlıyor. Bilgisayara herhangi bir web sunucu wb. kurulumu da gerekmiyor.

Sunucu bilgisayarda WebServisi kullanmak port yönlendirmek imkanım olamıyorsa, bu durumda -B Planı- olarak web üzerinde bir MySQL veritabanı LOG sistemi tasarladım onu kullanıyorum. Sistem basit. Bir MySQL veritabanı WEB ortamında herhangi bir hosting firmasında durmaktadır. Host bünyesine bir tane "r.php" gibi basit isimlendirilmiş raporlama görevi olan bir PHP bekler. Bu PHP, istemciler tarafından Web üzerinden POST edilen bilgileri SQL ile veritabanına yazar veya mevcut kayda update eder. Başka bir PHP parametresi ile de suncu bilgisayar tarafından periyodik olarak ( bu periyod örneğin 10 saniyede 1 olabilir ) günlük / saatlik listeyi okur ve içerik değerlendirilir.

EK : Unutmuşum PHP ile bunu yaparken IP'sini LOG tutmak için

Kod: Tümünü seç

$domain = getenv('REMOTE_ADDR');
ile IP adresini direkt PHP'den alabilirsin.
Resim
Resim ....Resim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen vkamadan »

Merhaba sayın @mrmarman ,
ilginiz ve cevabınız için çok teşekkür ederim fakat maalesef sorunuma çözüm bulamadım, çok sade bir şekilde soruyu tekrar sormak istiyorum,

Diyelimki siz uzaktaki bir bilgisayara Windows Remote Desktop uygulamasıyla bağlanarak oturum açtınız ve kendi yazdığınız bir programı yine ilgili uzak makina üzerinde kullanmaya başladınız, bu uzak makina üzerindeki oturumda, oturum açan windows kullanıcısının hangi Public IP den geldiğini bulabilirmiyiz?
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen mrmarman »

Ben de aynı sadelikte cevap vereyim.

Sana bahsettiğim kodu kendi siteme koydum...

Kod: Tümünü seç

http://www.armantr.com/php/ip.php
bu kod şimdilik şundan ibaret.

Kod: Tümünü seç

<?
$domain = getenv('REMOTE_ADDR');
echo $domain;
?>
RemoteDesktop'dan kurduğun bilgisayarda bir explorer aç ve bu yukarda yazdığım adresi gir. Sana o uzak bilgisayarın WAN IP'sini ( LAN değil ) verir. İstediğin de zaten bu. Ben de diyorum ki bu PHP kodunu aşağıdaki gibi yazdığında ki ben öyle yapıyorum :

Kod: Tümünü seç

<?
  include("include.php");
  // Post verileri alınıyor...
  $form_bilgisi = ( isset($HTTP_POST_VARS ) ) ? $HTTP_POST_VARS : $HTTP_GET_VARS;
  foreach ($form_bilgisi as $anahtar=>$deger ) {
     if ( $anahtar == "a" ) { $a = $deger; } // Firma  (*)
     if ( $anahtar == "b" ) { $b = $deger; } // İl
     if ( $anahtar == "c" ) { $c = $deger; } // ID
     if ( $anahtar == "d" ) { $d = $deger; } // YekiliTC (*)
     if ( $anahtar == "e" ) { $e = $deger; } // Prog Version
     if ( $anahtar == "f" ) { $f = $deger; } // Oturum açmış Kullanıcı (*)
     if ( $anahtar == "g" ) { $g = $deger; } // SeriNo
     if ( $anahtar == "h" ) { $h = $deger; } // Lisans Durumu
     if ( $anahtar == "j" ) { $j = $deger; } // Veritabanı (*)
     if ( $anahtar == "k" ) { $k = $deger; } // eMail
     if ( $anahtar == "l" ) { $l = $deger; } // Yazılım Dizini
     if ( $anahtar == "m" ) { $m = $deger; } // Yazılım Caption
  }
$domain = getenv('REMOTE_ADDR');
$sorgu  = mysql_query("SELECT * FROM arman_log WHERE ( a = '$a' ) AND ( d = '$d') AND ( f = '$f' ) AND ( j = '$j') ");
$sayi   = mysql_num_rows($sorgu);
$i      = 0;
if( $sayi > 0 ) 
{  $kimlik = mysql_result($sorgu, $i,"sirano"); 
   if ( @mysql_query( "UPDATE arman_log SET a = '$a', b = '$b', c = '$c', d = '$d', e = '$e', f = '$f', g = '$g', h = '$h', j = '$j', k = '$k', i = '$domain', t = now() WHERE sirano = $kimlik ") )
   { Print("ok_u\n"); }
   else
   { Print("error_u\n"); }
} else
{  if ( @mysql_query("INSERT INTO arman_log (a, b, c, d, e, f, g, i, t, h, j, k) VALUES ( '$a', '$b', '$c', '$d', '$e', '$f', '$g', '$domain', now(), '$h', '$j', '$k')"))
   { Print("ok_i\n"); }
   else
   { Print("error_i\n"); }
}
?>
Bu kod ne yapıyor. Kendi yazdığım program çalıştırıldığında bir THREAD ile kullanıcı WEB'e Online mi değil mi kontrol ediliyor. Online ise POST metodu ile istediğim bilgiler bu PHP svriptine post ediliyor ve WEB ortamında bir MySQL tabloda tutuluyor. Yanında * (yıldız) olan Firma, YetkiliTC, Oturum Açmış Kullanıcı ve Veritabanı değerleri değişirse veritabanına INSERT ediliyor. Böylece yorumlayıcı değişiklikleri takip edilebiliyor. Aksi ise ilgili kayda konumlanıyor ve sadece UPDATE ediliyor. IP ve Tarih bilgisi direkt WEB sunucusundan elde ediliyor ki kullanıcı sistem tarihini değiştirse dahi tarih ve IP bilgisi benim kontrolümdeki bir yerden alınmadan direkt işleme konuyor.

Karar sana kalmış. Umarım açıklayıcı olmuştur.
Resim
Resim ....Resim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen vkamadan »

Öncelikle ilginiz ve değerli zamanınızı ayırarak yapmış olduğunuz detaylı anlatımınız için çok teşekkür ederim anlattığınızı bir önceki mesajınızda da net bir şekilde anlamıştım,
fakat şöyle bir durum var, bir çok kullanıcı düşünün internet olan her hangi bir yerden (internet cafe ,ev , ofis vb..) remote desktop ile ana makinaya erişim sağlıyorlar, yani herhangi bir aracı yazılım ile erişim sağlamıyorlar, bağladıkları mekandaki local makine ile remote desktop uygulamasını çalıştırmak haricinde hiç biş işleri olmuyor, oturum açtığım ana makina ilgili PHP koduyla yada benzer yöntemle kendi internete çıkış IP sini veriyor, ben ilgili ana makinaya uzaktan gelen, örneğin internet cafeden bğalanan kullanıcının public IP sini yani internet cafenin internete çıkış IP sini almak istiyorum, istemci tarafında hiç bir ara uygulama yazmadan, sadece bağlandığım ana makina üzerinden bunu yapabilmem için tahminimce windows un oturum bilgilerini kullanmam gerekiyor bunları biyryerlerde tutuyordur die düşünüyorum topiğin en üstünde bahsettiğim yöntem uzak makinaya oturum açtığımda oturum bilgilerini bir çok detayı veriyor ama internet cafedeki bilgisayarın local IPsini veriyor, acaba bir yerlerinde felan WAN IP de tutuluyormudur?
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen mrmarman »

hımm. Sorunu ters anlamışım kusura bakma ya.. :shock: Başlığı da meşgul etmiş oldum. Ben de bilmiyorum ama biraz google'da bakınır bulursam bişey yazarım. Hem ben de öğrenmiş olurum. :idea: Bakacağım şey 3389 olan Remote Desktop portunu monitör eden bir çözüm.
Resim
Resim ....Resim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen vkamadan »

Estağfirullah ,

İlgili uzak makinanın olay geçmişinde oturum açan uzak kullanıcının Public IP adresinin tutulduğunu gördüm ekte gönderiyorum, demekki bu bilgi windows oturum bilgisine ekleniyor ama bir türlü bulamadım.

Resim
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen mrmarman »

Şuna bir bakar mısın ?

Kod: Tümünü seç

http://www.kochini.com/dcomp/tcpmon/index.html
Buradaki delphi kodu TCP portlarını dinleyip uzak IP'yi de gösteriyor.. İncelemeye değer.
Resim
Resim ....Resim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen vkamadan »

mrmarman yazdı:Şuna bir bakar mısın ?

Kod: Tümünü seç

http://www.kochini.com/dcomp/tcpmon/index.html
Buradaki delphi kodu TCP portlarını dinleyip uzak IP'yi de gösteriyor.. İncelemeye değer.

Evet kesinlikle ve kesinlikle istediğime ulaştım ilgili örnek çok güzel anlatıyor,
Tekrar ilginiz ve desteğiniz için teşekkür ediyorum.
İyi çalışmalar dilerim.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen mrmarman »

Flood gibi oldu ama bu seferlik beni mazur görün fazla vaktim yok bulduğum çözüm olabilecek detayı da ekleyim...

Kod: Tümünü seç

http://ts.veranoest.net/ts_faq_administration.htm#clientIP
linkinde Remote Desktop services ile ilgili "How can I retrieve the client IP number?" sorusun cevabı olarak şöyle denmiş.
Q: How can I retrieve the client IP number?
Last modified: August 2, 2009

A: You can retrieve the client IP number and computername with the WTSQuerySessionInformation function, or the client computername with the environment variable %CLIENTNAME%.

BUT: read this:
951422 - The WTSQuerySessionInformation function on a Windows Server 2008-based terminal server returns ambiguous IPv6 address data
970910 - A memory leak issue occurs if you call the WTSQuerySessionInformation function to query the published applications information or the initial program information for session ID 0

Or download GETTSCIP, a freeware command-line tool to obtain the current session's client IP address, from Ctrl-Alt-Del IT Consultancy.
Buradan da yola çıkarak WTSQuerySessionInformation ile yapılacak araştırma sonuca götürür ümidiyle... Uygun zamanda ben de kontrol edicem. Çünkü Vista'da RemoteDesktop için bir PATCH yapmak gerekiyor. İki bilgisayar yan yana gelinde onu yapar GPRS üzerinden remote yapıp IP'yi almaya çalışırım.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen mrmarman »

Kod: Tümünü seç

http://www.remkoweijnen.nl/blog/2007/10/31/how-to-get-client-ip-address/
linkinde delphi kodu ve executable hali zipli olarak buldum. der ki..
deneyip sonucu bildirirsin. oldukça sade bir kod
kaynak kodu : http://www.remkoweijnen.nl/blog/download/ClientIP.zip

Kod: Tümünü seç

uses JwaWinType, JwaWtsApi32, JwaWinsock2, ExtCtrls;
type
  PWtsSessionInfoAArray = ^TWtsSessionInfoAArray;
  TWtsSessionInfoAArray = array[0..ANYSIZE_ARRAY-1] of WTS_SESSION_INFOA;

var hServer: THandle;
  SessionInfoPtr: PWtsSessionInfoAArray;
  pCount: Cardinal;
  ClientAddressPtr: PWtsClientAddress;
  dwBytesReturned: Cardinal;
  IPStr: String;
  i: integer;
begin
  if WtsEnumerateSessions(WTS_CURRENT_SERVER, 0, 1, PWTS_SESSION_INFO(SessionInfoPtr),
    pCount) then
  begin

    for i := 0 to pCount - 1 do
    begin
      WTSQuerySessionInformation(WTS_CURRENT_SERVER, SessionInfoPtr^[i].SessionId,
        WTSClientAddress, Pointer(ClientAddressPtr), dwBytesReturned);
      case ClientAddressPtr^.AddressFamily of
        AF_INET:
          IPStr:= Format(‘%d.%d.%d.%d’, [ClientAddressPtr^.Address[2],
            ClientAddressPtr^.Address[3], ClientAddressPtr^.Address[4],
            ClientAddressPtr^.Address[5]]);
          AF_INET6:
            IPStr:= ‘IPv6 address not yet supported’;
          AF_IPX:
            IPStr:= ‘IPX is not supported’;
          AF_NETBIOS:
            IPStr:= ‘NETBIOS is not supported’;
          AF_UNSPEC:
            IPStr:= ‘Unspecified (console and listener session have no address)’;
      end;

      WTSfreeMemory(ClientAddressPtr);
    end;
  end;

  // Don’t close the handle if it’s WTS_CURRENT_SERVER
  WtsFreeMemory(SessionInfoPtr);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen vkamadan »

hemmennn deneyip sonucu bildiriyorum..
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Uzaktan Oturum Açan Kullanıcının WAN IP Adresini Almak

Mesaj gönderen vkamadan »

Örnek tanıdık geliyordu zaten :) , maalesef buda oturum açan kullanıcının local IP adresini veriyor, olsun sizin ilk gönderdiğinizi örnek işimi gördü, hem bir çok amaç içinde kullanılabilecek bir örnek bütün portlara bağlanan uzak yakın bütün IP leri veriyor.
Çok teşekkürler.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla