Captive Portal Girişi yaptıktan sonra



  • Arkadaşlar Captive portal üzerinden ve freeradius desteği ile bir kullanıcı giriş yaptığında ilgili kullanıcının mac adresini ve ip adresini bir text dosyasına yazmak istiyorum ancak /usr/local/captiveportal/index.php dosyasını incelemiş olsamda işin içinden çıkamadım. Acaba  bu işlem hangi dosyadan yapabilirim.

    şimdiden ilginiz için teşekkürler.



  • Selam,

    " /var/log/portalauth.log " dosyasında tutulmaktadır. Ufak bir shell script hazırlayak rahatlıkla txt veya herhangi bir formata dönüştürebilirsiniz.



  • " /var/log/portalauth.log " dosyasında giriş yapılmış olanların geliyor ama benim amacım giriş yaptığı gibi ihityacım olan değerleri almak.
    aslında ilk önce " /var/log/portalauth.log " dosyası üzerinde çalıştım. ama işimi görmedi. yaptığım adımları anlatırsam belki farklı olarak bir bakış açısı katabilirsiniz. tam olarak " /var/log/portalauth.log " dosyasında şu adımları yaptım .
    portalauth.log dosyasının bir kopyasını portalauth.log_orj ismiyle aldım.
    sonra portalauth.log dosyasını sildim.
    ardından portalauth.log dosyasını touch ile oluşturdum.
    ama tekrar oluşturmadan sonra portalauth.log dosyasına veri eklenmeme durumu ile karşılaştım.
    hangi servisi yeniden başlatmışsam da veri eklenmedi.
    veri ekleme işlemini başlatabilmek için manuel olarak portal_auth_log.php sayfasında "clear log " tuşuna tıklayarak durumu normale çevirdim.
    "Clear log" tuşunun hangi servisi nasıl başlatığını incelemelerim sırasında çözemedim.

    özet olarak "Clear log" tuşu ile gerçekleşen olayı bir script ile tekrarlatmam lazım yada "/usr/local/captiveportal/index.php" dosyasından kullanıcı giriş yaptığında ip ve mac adresini almam lazım.

    şimdiden ilginiz için teşekkürler.



  • Merhaba reber,

    Farklı bir bakış açısıyla istediğin yapılabilir.
    Ancak bahsettiğin "kullanıcı giriş yapar yapmaz" kısmında biraz sıkıntı olabilir.
    Neyse olaya bir giriş yapalım, o kısmı sonra düşünürüz.

    Öncelikle portalauth.log üzerinden gitmeyi düşünmüşsün ancak bir süre sonra bu seni yarı yolda bırakacaktı.
    Çünkü bu log dosyanın default 500 satıra kadar (istersen 2000 e kadar arttırabilirsin) login bilgilerini tutmaktadır.
    Dolayısıyla, 500 satır dolduktan sonra tekrar dosya üstüne yazmaya başlar ve hangi satırın en son giriş yapan kayıt olduğu karışmaktadır.

    Bunun yerine şöyle bir yöntemle en son giriş yapanın bilgilerini alabilirsin;
    php de bir script yazıp portalauth.log dosyasındaki bilgileri parçalayıp mysql'e veya text dosyasına kaydetmek.
    portalauth.log dosyasında her satırda  tarih, saat, aksiyon (login-logout-concurrent user-error-unknown), kullanıcı, ip adresi ve mac adresi bulunur.
    php de bu bilgileri gerekli komutlarla bölerek mysqlde oluşturduğun bir tabloya atabilirsin.
    Sonrasında en son giriş yapan bilgisini almak istediğinde sql de gerekli komutu yazarak alabilirsin.
    Örnek : "SELECT kullanici, ip, mac FROM log ORDER BY tarih DESC LIMIT 1"
    Bu şekilde kullanıcı girişlerini de db ye güzelce tutmuş olursun.

    Eğer mysql ile uğraşmadan en son kim girmişse onu alayım ve text dosyaya kaydedeyim dersen;
    Yine bu portalauth.log dosyasında php kullanarak satırları teker teker okursun.
    Okuduğun satırlarda hangisinin tarihi en son tarih ise, en son giriş yapan odur mantığıyla gerekli bilgileri alıp text dosyaya kaydedebilirsin.

    Aslında tam olarak yapmak istediğin şeyi biraz daha açarsan "kullanıcı giriş yapar yapmaz" kısmına da bir fikir üretebiliriz.



  • sayın kemalgok;
    bende sizin dediğiniz gibi bir mantık kurdum. portalauth.log dosyasını bir script ile alayım mysql'de bir tabloya atayım dedim. ama tablonun mükerrer kayıtlara sahip olmaması amacıyla portalauth.log dosyasını boşaltmam lazımdı . işte o noktada tıkandım.
    Çünkü portalauth.log dosyasına log düşmemeye başladı.

    Bu sefer farklı yol takip ederek giriş sırasında bilgileri alma yoluna gitmek istiyorum.
    Eğer bu yöntemdede bir ilerleme kaydedemezsem . Mecburen ilk denediğim yönteme geri dönecem ama arada biraz işlemleri takla attırarak yapacağım.
    Takla attırmak derken şunu planlıyorum.

    • portalauth.log dosyasının içeriğini Geçici bir sql tablosuna al.

    • portalauth.log dosyasının Enson kontrol edildiği tarih-zaman değişkeninden sonraki eklenmiş verileri Asıl tabloya aktar.

    • Geçici tablonun içeriği boşalt.

    • portalauth.log dosyasının enson kontrol edildiği tarih-zaman değişkenini güncelle.

    Ama bu seferde network kullanımı çok olan bir sistemde benim yapmayı planladığım işlemler; gereksiz işlemci ve ram kullanımına neden olacak.

    "kullanıcı giriş yapar yapmaz" derken captiveportal login ekranından giriş sonrası daha kullanıcı başka bir sayfaya yönlendirilmeden ilgili veriyi almak ve işlemeyi kastediyorum.



  • Selam reber,

    En kestirme yol, login ekranında "kullanıcı giriş yapar yapmaz" gerekli bilgilerin alınması.
    Bu konuyla ilgili Samet Üstad bir yorumda bulunabilir.
    Kendisinin Ghost Hotspotta buna benzer Jquery Ajax ile arka planda bazı kontroller/posting işlemi yaptırıyordu belki buna benzer birşey yapılabilir.

    Eğer biraz takla atalım,geçici ve asıl tablolarla uğraşmayalım, gereksiz işlemci ve ram kullanımını önleyelim dersen;
    Öncelikle dediğin gibi çift kayıt sorununu aşmak gerekecek.
    Bu sorunu aşmak için portalauth.log dosyasını silmek yerine Mysql'de "songuncelleme" adında bir tablo oluşturup scriptin her çalıştığında en son çalıştırma zamanı kaydedilir (pfsense ile script her ikiside aynı makinada çalışacağı için zaman farklılığı/gecikmesi bu nedenle olmayacaktır).

    1 - Php script çalıştığında, ilk önce scriptin bir önceki çalışma (songuncelleme tablosundaki) zamanı alınır.
    2 - Sonra portalauth.log dosyasındaki satırlar teker teker okunur. Eğer okunan satırdaki zaman, son güncellemeden büyükse bu mysqldeki "log" tablosuna kaydedilir.
    3 - Tüm satır satır okuma ve kayıt işlemleri bittiğinde mysqldeki "songuncelleme" tablosundaki zaman "o anki zaman - now()" olarak güncellenir.

    Eğer buna benzer birşey yapmak istiyorsan benim yazdığım ve halen kullandığım scripti buradan paylaşabilirim.
    Scripti 30 dk da bir CRON ile çalıştırıyorum.
    Portal girişlerini tarih, kullanıcı adı, şifre, ip adres, mac ve aksiyon (login-logout) şeklinde logluyorum.
    Sistemi herhangi bir şekilde yormuyor.



  • Selam kemalgok;

    yazdığın script tamda benim yapmak istediğim gibi. :)
    eğer sakıncası yoksa alabilir miyim?

    ayrıca şimdi "Ghost Hotspot" kurma işlemlerine başladım bakalım buradan nasıl şeyler öğreneceğiz.

    ilginiz için teşekkürler.



  • Selam reber,

    Script kodları aşağıdaki gibidir;

    Bu kodları "mysql_log_isle.php" adlı bir dosyaya kaydedip cron ile 30 dk da bir çalıştırabilirsin.

    
    // PFSENSE 2.1.X CAPTIVE PORTAL GIRISLERINI MYSQL'E LOGLAMA                 //
    //  																		//
    //   	PROGRAMLAMA : Kemal GOK	- Subat 2014								//		
    //		Kodlar gelistirmeye, optimizasyona ve genel kullanima aciktir.		//
    //													 						//
    //////////////////////////////////////////////////////////////////////////////
    
    // GENEL TANIMLAR
    include('inc/tanimlar.php');	// genel tanimlarin alinmasi ( mysql baglanti bilgileri... )
    
    // son guncelleme zamanini alalim...
    $result=mysql_query("SELECT tarih FROM songuncelleme WHERE id=1");
    while($row = mysql_fetch_array($result))
    {
    	$songuncelleme=$row[tarih];
    } 
    
    $say=0;
    
    $logdosya = fopen("/var/log/portalauth.log", "r");							// Captive portal giris loglarının tutuldugu dosya
    while (($satirsatiroku = fgets($logdosya)) !== false)
    {
    	$say+=1;
    	$orj=$satirsatiroku;
    
    	// Tarihi almaca
    	$ay=trim(substr($satirsatiroku, 0,3));
    	$satirsatiroku=substr($satirsatiroku, 3);
    
    	$gun=trim(substr($satirsatiroku, 0,3));
    	$satirsatiroku=substr($satirsatiroku, 3);
    
    	// Saati almaca
    	$saat=trim(substr($satirsatiroku, 0,9));
    	$satirsatiroku=trim(substr($satirsatiroku, 9));
    
    	$formatlitarih=date('Y-m-d H:i:s', strtotime($gun."-".$ay."-".date("Y")." ".$saat));
    
    	// pfsense kısmını silmece...
    	$pfsil=substr($satirsatiroku,0,strpos($satirsatiroku,":")+1);
    	$satirsatiroku=substr($satirsatiroku, strpos($satirsatiroku,":")+1);
    
    	// Aksiyonu almaca..
    	$aksiyon=trim(substr($satirsatiroku,0,strpos($satirsatiroku,":")));
    	$satirsatiroku=substr($satirsatiroku, strpos($satirsatiroku,":"));
    
    	// aksiyondan sonra iki nokta üst üsteyi silme...
    	$satirsatiroku=substr($satirsatiroku,1);
    
    	// User Mac IP almaca..
    	$satirsatiroku=str_replace(" ","",$satirsatiroku);
    	$useripmacdetay=explode(",",$satirsatiroku);
    
    	// Tarih yeni ise mysqle islemece
    	if (strtotime($formatlitarih) > strtotime($songuncelleme))
    	{ 
    		mysql_query("INSERT INTO loglar (tarih, aksiyon, user, mac, ip, detay) VALUES('$formatlitarih','$aksiyon','$useripmacdetay[0]','$useripmacdetay[1]','$useripmacdetay[2]','$useripmacdetay[3]')"); 
    	}	
    }
    
    // Son guncelle zamanini set edelim...
    $simdikitarih=date("Y-m-d H:i:s");
    mysql_query("UPDATE songuncelleme set tarih='$simdikitarih' WHERE id=1"); 		
    fclose($logdosya);
    
    echo "Yeni loglar islendi, tarihler guncellendi...Islem bitti...";
    // Islem bitti...
    ?>
    
    

Log in to reply