8 Kasım 2016 Salı

Java pattern match - Satır başındaki boşluk tespiti

Merhaba,

Elimizde bir string var. Bu string in başında bir karakter yada iki karater boşluk olduğunda işlem yapmak istiyoruz. Bir karakter boşluk için eşleşen pattern in iki boşluk için eşleşmemesi gerekiyor.
Burada problem genelde 1 whitespace için çalışan pattern match eşleşmesinin 2 whitespace için de çalışması oluyor. Çünkü 2 white space aslında kendi içinde 1 whitespace i de içeriyor.
Fakat biz tam olarak 1 boşluk olduğunda farklı, 2 boşluk olduğunda farklı pattern eşleşmesi istiyoruz.
Bunun için alttaki iki REGEX kullanılabilir.


[1]

Pattern whitespace = Pattern.compile("^\\s(?!\\s)");

Pattern whitespace = Pattern.compile("^\\s{3}(?!\\s)");

[2]

if(" WhiteSpace".matches("^\\s{1}[^\\s]+")){
    call();
} else if("  WhiteSpace".matches("^\\s{2}[^\\s]+")){
    keep();
}

24 Ekim 2016 Pazartesi

Java ile bir ip adres formatı kontrolü, IPV4

Selam,

Girilen bir ip adresinin doğru formatta ve IPV4 olduğunu tespit etmek için alttaki basit java class ı kullanılabilir.



package Fundementals;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class ipWorks {
public ipWorks(){
}
public boolean checkIP(String ip){
    boolean isIPv4;
      try {
        final InetAddress inet = InetAddress.getByName(ip);
        isIPv4 = inet.getHostAddress().equals(ip) && inet instanceof Inet4Address;
            } catch (final UnknownHostException e) {
               isIPv4 = false;
            }
    return isIPv4;
}
}


7 Ekim 2016 Cuma

Linux sisteminde konsolda yazılan komutların otomatik olarak kaydedilmesi

Merhaba,

Konsol bağlantısı yaptığınız bir linux sisteminde çalıştırdığınız scriptlerin çıktılarını ekranda izlerken biryandan da bir dosyaya kaydetmek için ne yapmamız gerektiğinden bahsetmek istiyorum.

Bazı durumlarda çalıştırdığınız bir scriptin çıktısını bir dosyaya aktarmak için ">" yada ">>" yeterli olmamaktadır. Script takılmakta ve çıktı üretememektedir.

Özellikle scriptin çalışması sırasında kullanıcı girişi istenen interaktif bir akış izlenmiş ise tüm bu akışın bir dosyaya aktarılması için ne yapmalıyız ?

Bu durumda Linux "script" komutu yardımımıza yetişiyor.

Alttaki şekilde çalıştırılan komut yaptığınız tüm işlemleri bir doayaya kaydediyor.


sh-3.00$ perl ./findscript.pl
Script is ok!
sh-3.00$ exit
exit
Script done, file is output.txt


Teşekkürler,
Cem Selmanoğulları


28 Eylül 2016 Çarşamba

Nokia (Alcatel-Lucent) 5620 SAM sistemine XML API arayüzünden istek gönderen perl script

Merhaba,

Nokia 5620 SAM ağ yönetim sistemine XML API kullanarak dışarından bağlanmak ve çeşitli işler yaptırmak mümkündür. Bu arayüz ile diğer yönetim sistemleri SAM ile konuşabilir ayrıca geliştirilen scriptler ile cihazlar kongiure edilebilir, raporlama yapılabilir ve network yönetilebilir.

Altta bahsedilen konuları bu yolla yapmak oldukça kolaydır.

- SAM üzerinde olan herhangi bir ağ cihazında istenilen konfigurasyonu yapmak.
- Cihazlarla ilgili detaylı bilgileri raporlamak.
- Envanter raporları oluşturmak.
- Çeşitli senaryolara uygun konfigurasyon işlemleri yapmak.
- Servis tanımlamaları ve konfigurasyonları yapmak.
- Servis raporlamaları oluşturmak.
-
.
.
.

Göndermek istediğiniz XML il alttaki perl scripti içinde <SOAP:Body></SOAP:Body>
tagleri arasına yerleştirmeniz yeterlidir.

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent 6.0;
my $usrAgent = LWP::UserAgent->new();
$usrAgent->timeout("120");
my $msg_to_send=
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<SOAP:Envelope xmlns:SOAP=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">
<SOAP:Header>
<header xmlns=\"xmlapi_1.0\">
<security>
<user>SAM User</user>
<password hashed=\"true\">kjhds7843jwe9js9324jhkhı6wejs89ks9</password>
</security>
<requestID>\"MyRequest\"</requestID>
</header>
</SOAP:Header>
<SOAP:Body>
    #Gönderilecek XML bu bölüme yazılacak
 </SOAP:Body>
</SOAP:Envelope>";
my $xrequest = HTTP::Request->new(POST => "http://SAM-IP-Address:8080/xmlapi/invoke");
$xrequest->content($msg_to_send);
$xrequest->content_type("text/xml; charset=utf-8");
my $xresponse = $usrAgent->request($xrequest);
my $Xml = $xresponse->decoded_content;
print "$Xml";




Teşekkürler,
Cem Selmanoğulları

Nokia (Alcatel-Lucent) 7750 SR cihazına SSH ile bağlanıp komut gönderen perl scripti

Merhaba,

Nokia 7750 Service Router (SR) cihazına bağnarak komut gönderen bir script paylaşmak istiyorum.
Cisco cihazlardan biraz farklı olarak direkt kanal üzerinden komut göndermek yerine kanal üzerinden bir terminal edinilerek shell üzerinden yazmak sureti ile komutumuzu gönderiyor ve çıktısını alıyoruz.


#!/usr/bin/perl
use Net::SSH2;
use warnings;
use strict;
no warnings 'uninitialized';
my $host = "A.B.C.D";
my $user = "ssh-username";
my $password = "password";
my $komut = "show router interface\r";
#SSH baglantisi saglanir
my $ssh = Net::SSH2->new();
        if(!$ssh->connect($host)){
                print("SSH Baglantisinda Problem - $@ \n");
                exit(1);
        } else {print("\nSSH Baglantisi Yapiliyor...\n");}
sleep(1);
        if(!$ssh->auth_password($user,$password)){
                print("Kullanici-Sifre Problemi - $@");
                exit(1);
        } else {print("\nBaglandi...\n\n");}
sleep(1);
print("Gonderilen Komut : ".$komut."\n\n");
#Kanal acilarak komut gonderilir
my $channel = $ssh->channel();
$channel->blocking(0);
$channel->pty(1);      #set tty
$channel->shell();    
sleep (1);
$channel->write("environment no more\r".$komut);
sleep (1);  
my $output;
$channel->read($output,99999999);
print "Komut Ciktisi :\n $output\n";



Teşekkürler,
Cem Selmanoğulları

22 Ağustos 2016 Pazartesi

Java ile konsoldan Ping ve Telnet

Merhaba,

Java ile konsoldan bir ip adresine ping ve telnet yapan basit bir kod.
Henüz ip format validasyonlarını eklememiş olsamda çalışan güzel bir uygulama.

Çalıştırdığınızda konsolda  "Ping 10.1.1.10" yada "Telnet 10.1.1.10 22" şeklinde girmeniz yeterli.

package Tests;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
public class test1 {
public static void main(String[] args) {
System.out.println("Telecom Tools Menu\n");
System.out.println("--------------------\n");
System.out.println("Commands :  [Ping <IP Address>]  |  [Telnet <IP Add>]\n");
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(System.in));
            while (true) {
                System.out.print("Enter Command : ");
                String input = br.readLine();
                if ("q".equals(input)) {
                    System.out.println("Exit!");
                    System.exit(0);
                }          
/* Ping Block Start */                   
                  if(input.toLowerCase().contains("ping"))
                  {    
                   String[] CommandParts = input.split(" ");
                   int ArrSize = CommandParts.length;
                       if(ArrSize != 2)
                       {
                         System.out.println("Wrong Command. Ex : Ping 10.1.1.10");
                       } else if (ArrSize == 2) {     
                          String ip = CommandParts[1];  
                          InetAddress inet = InetAddress.getByName(ip);
                          System.out.println("Sending Ping Request to " + ip);
                          System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable");
                       }                       
/* Ping Block End */  /* Telnet Block Start */   
                    } else if (input.toLowerCase().contains("telnet")) 
                    {
                         String[] CommandParts = input.split(" ");
                         int ArrSize = CommandParts.length;
                         if(ArrSize!=3)
                         { 
                         System.out.println("Wrong Command Format. Ex : Telnet 10.1.1.10 22"); 
                          } else {    
                             String ip = CommandParts[1];
                             Integer port = Integer.parseInt(CommandParts[2]) ; 
                             Socket pingSocket = null;
                             PrintWriter out = null;
                             BufferedReader in = null;                      
                              try {  
                                 pingSocket = new Socket(ip, port);
                                 out = new PrintWriter(pingSocket.getOutputStream(), true);
                                 in = new BufferedReader(new InputStreamReader(pingSocket.getInputStream()));
                              } catch (IOException e) {
                                return;
                              }
                           System.out.println(in.readLine()); 
                           out.close();
                           in.close();
                           pingSocket.close();
                          }
} else {
   System.out.println("Command Not Found or Wrong Command Format");
}                     
/* Telnet Block End */                  
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
 }
}
Teşekkürler

27 Temmuz 2016 Çarşamba

Bir IP adresinin verilen Subnet içinde olup olmadığını Perl script yazarak anlamak.

Merhaba,

Verilen bir ip adresinin verilen bir subnet içinde olup olmadığını anlamak için basit bir perl scripti.

$ip = 192.168.10.11
$subnet = 192.168.10.0/24

sub checkip {
        my ($ip, $subnet) = @_;
        my $result = 0;

        my @iparr = split(/\./, $ip);
        my $ipval = $iparr[0] * 2**24 + $iparr[1] * 2**16 + $iparr[2] * 2**8 + $iparr[3];

        my @temparr = split(/\//, $subnet);
        my $ipsub = $temparr[0];
        my $netmask = $temparr[1];

        my @ipsubarr = split(/\./, $ipsub);
        $ip2val = $ipsubarr[0] * 2**24 + $ipsubarr[1] * 2**16 + $ipsubarr[2] * 2**8 + $ipsubarr[3];

        if( $ipval >> (32-$netmask) == $ip2val >> (32-$netmask) ) {
            $result = 1;
        }
        return $result;
}

Sonuç değeri olarak $result=1 geldiğinde ip adresinin ilgili subnete ait olduğunu anlamış oluruz.

27 Nisan 2016 Çarşamba

Port dinleyen script

Merhaba,

Bir sistem üzerinde port dinlemek ve bağlantı kabul etmek için basit bir perl script paylaşıyorum.
Bu scripti çalıştıracağımız sistem üzerinde herhangi bir portu dinlemeye geçirmek ve başka bir makineden telnet ile test etmek mümkün.

Böylece herhangi iki network arasında yada herhangi bir cihaz üzerinde ilgili port üzerinden iletişim olup olmadığını test edebileceksiniz.

Script, bağlantı kabul edecek makine (10.10.1.11) üzerinde, port no verilerek alttaki şekilde çalıştırılır,

c:\test>perl conntest.pl 8071

Bağlanacak makinede ise alttaki şekilde telnet client çalıştırılır,

c:\telnet 10.10.1.11 8071

Telnet çalıştırdığınız makinede alttaki çıktıyı göreceksiniz.

-----------------------------------------------------------------------------
Port 8071 Ayakta. Baglandiginiz Sistem : TRISTN0H408852

                                                       **Baglanti Kesiliyor**

Connection to host lost.
-----------------------------------------------------------------------------


#!/usr/bin/perl -w
use strict;
use Socket;
my $port = shift or die "\nPort Belirtilmedi.\nKullanim : \"perl conntest.pl 8088\"";
my $protocol = getprotobyname('tcp');
my $hostname = `hostname`;
# Soket Oluştur
socket(SERVER, PF_INET, SOCK_STREAM, $protocol) or die "socket: $!";
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!";
# Lokal Port
my $ipaddress = sockaddr_in($port, INADDR_ANY);
# Portu Dinlemeye Başla
bind(SERVER, $ipaddress) or die "bind: $!";
listen(SERVER, SOMAXCONN) or die "listen: $!";
# Bağlantıyı Kabul Et
my $client_addr;
while ($client_addr = accept(CLIENT, SERVER)) {
    # Mesaj Bas, Bağlantı Kapa
    print CLIENT "\nPort $port Ayakta. Sistem : $hostname\n*Baglanti Kesiliyor*";
    close CLIENT;
}




Teşekkürler,
Cem Selmanoğulları