skip to Main Content

nokia sros üzerinde ip filter ile paket inceleme

nokia sros güvenlik yönetimi, müşteri yönetimi gibi amaçlar için filttelerin uygulnamasına izin vermektedir. aynalama yönteminin mümkün olmadığı, debug yapamadığınız zamanlarda filtreme yöntemini kullanmak paket yakalama / analizini temel düzeyde yapmaya olanak sağlayabilir. bunun nasıl yapılacağına en basit haliyle inceleyelim.

öncelikle yazacağımız filtre ile gözlemleyeceğimiz paketlerin nerede tutulması gerektiğe ait ayarları yapmakta fayda var. bu örnekte ramde tutulması bizim için yeterli olacak. log için bir id belirleyerek öncelikle filter log oluşturalım.

*A:#/configure filter log 38 create
*A:>config>filter>log# info 
----------------------------------------------
----------------------------------------------
*A:>config>filter>log#

log ortamımının tutulacağı alanı oluşturmuş olduk. default değeri 1000 olduğu için bu dğeri ihtiyacımız karşılayacak düzeyde arttıralım.

*A:>config>filter>log# destination memory 20000

verilecek değerde dikkatli olunmalı. hafızayı şişirmemek gerekli. şimdi paket yakalamak için filtremizi oluşturabiliriz. yakalamak istediğimiz paketlerin hedef ve kaynak iplerini bildigimizi düşünerek ip bazlı bir filtre yapalım.

filtreleri oluştururken paketler üzerinde bir engelleme v.b. yapmacağımız için default-action ve entry lerin action forward yapmayı unutmuyoruz.

bu örneğimizde epipe bir servisin üzerindeki paket analizini yapacağımız için hem ingress hemde egress e filtre uygulamamız gerkiyor. burada dikkat edilmesi gereken önemli bir nokta var. ingress ve egress lere filtrre uygularken hedef ve kaynak ipleri yer değiştirmiş olacak.. bu nedenden dolayı oluşturduğumuz ip-filter altına iki tane entry ekliyoruz ve ip adreslerini buna göre giriyoruz…

her entry altında yakalanan paketlerin kaydedilmesi için oluşturdugumuz log idsini de ekledikten sonra filtremiz tamamlanmış oluyoruz.

*A:#/configure filter ip-filter 38 create
*A:>config>filter>ip-filter# info 
            default-action forward
            entry 10 create
                match
                    dst-ip x.x.x.x/32
                    src-ip y.y.y.y/32
                exit
                log 38
                action
                    forward
                exit
            exit
            entry 11 create
                match
                    dst-ip y.y.y.y/32
                    src-ip x.x.x.x/32
                exit
                log 38
                action
                    forward
                exit
            exit

daha optimum bir filtre oluşturulabilir ancak bu haliye işimizi görecektir. filtremiz hazır olduğuna göre sıra uygulamaya geldi.

*A:#/configure service epipe 1 
*A:>config>service>epipe# info 
----------------------------------------------
           sap lag-1:1 create
                ingress
                    filter ip 38
                exit
                egress
                    filter ip 38
                exit
                no shutdown
            exit
            spoke-sdp 100:1 create
                no shutdown
            exit
            no shutdown

şimdi paketleri inceleyebiliriz. bakmamız gereken komut ve örnek çıktı aşagıdaki gibidir.

*A:#/show filter log 38

===============================================================================
Filter Log
===============================================================================
Admin state : Enabled
Description : (Not Specified)
Destination : Memory
Wrap        : Enabled
-------------------------------------------------------------------------------
Maximum entries configured : 20000
Number of entries logged   : 116
-------------------------------------------------------------------------------
2022/03/10 20:54:45  Ip Filter: 121:10  Desc: 
SAP: lag-103:115  Direction: Egress  Action: Forward
Src MAC: d4-a1-c8-df-b3-b0  Dst MAC: 02-45-11-12-78-d3  EtherType: 0800
Src IP: x.x.x.x:500  Dst IP: y.y.y.y:500  Flags: 0  TOS: c0  TTL: 254 Len: 196
Protocol: UDP

“Maximum entries configured : 20000” alanında ne kadar log olacağı bilgisi mecut .. biz 20000 yapmıştık… “Number of entries logged : 116” komutu çalıştırdığımızda yazdığımız filtreye giren 116 kayıt olduğunu görüyoruz. alltraki kısımlarda ip nin gözlendiği pakete ait bilgiler yer almaktadır..

log dosyasını temizlemek istediğinizde ise

*A:#/clear filter log 38

komutu kullanılabilir.

securecrt hiyerarşik yapıda log tutmak

vbs,python gibi scriptleri desteklemesi nedeniyle en sık kullanılan ssh client uygulamalarında bir tanesi durumda securecrt.

securecrt nin güzel özelliklerden bir taneside yapılan tüm işlemlerini hiyerarşik şekilde log tutabilmenizdir. bunun için yapılması gereken “edit default session options” altında log file dosyasına ait konfigürasyonu yapmalısınız.

açılan pencede “start log upon connect” seçerek securecrt çalışmaya başladı anda aktif olmasını sağlıyoruz. log dosya ismini oluşturuken program tarafından desteklenen dosya isim formatlarını kullanabiliyorsunuz. benim kullanmakta olduğun versiyon için kullanılabilecek parametler aşagıdaki şekilde tanımlanmış.

%H - hostname
%H - hostname (not valid with protocols that do not specify a host, such as Serial)
%S - session name
%Y - four-digit year
%y - two-digit year
%M - two-digit month
%D - two-digit day of the month
%P - port (not valid with protocols that do not specify a port, such as RLogin)
%h - two-digit hour
%m - two-digit minute
%s - two-digit seconds
%t - three-digit milliseconds
%F - directory path starting below the "Sessions" folder
%% - percent (%)
%envvar% - environment variable

bu parametreleri kullanarak istediğiniz formatta log dosyaları oluşturabilirsiniz. ben yıl/ay/gün/hostname-saat klasör yapısını kullandım.

D:\securecrt\log\%Y\%M\%D\%H_%h-%m-%s.log

windowsda statik yönlendirme

tercih veya benim gibi zorunluluktan windows kullanıyor olabilirsiniz. ihtiyaç halinde windows da statik yönlendirme nasıl yapılacağı sorulmuştu…

statik yönlendirme komut formatı aşagıdaki şekilde.

route ADD destination_network MASK subnet_mask  gateway_ip metric_cost IF interface_id

bu işlem için statik yönlendirme yapma yetkisine sahip bir kullanıcı olmalısınız. kişisel bir bilgisayar kullanıyırsanız powershell veya cmd yi yöneticisi yetkisi ile çalıştır demeniz yeterli olacaktır.

örnek bir komut yazacak olursak

route add 10.38.0.0 mask 255.255.255.0 192.168.0.1

ile 10.38.0.0/24 adresini 192.168.0.1 ipsine yönlendirmiş oluyoruz. windows üzerinde vpn bağlantısı, sanal makine v.b. kullanıyor ve yönlendirmeyi bunlara yapmak istiyorsanız interface id yi ögrenmemiz gerekmektedir. bunun için

route print interface

komutu ile interface listesini alabiliriz.

===========================================================================
Interface List
 18...02 05 85 7f eb 80 ......Juniper Networks Virtual Adapter
  8...38 64 58 b1 a9 60 ......Intel(R) Ethernet Connection (13) I219-LM
  6...0c 9a 3a f7 33 c2 ......Microsoft Wi-Fi Direct Virtual Adapter
 20...0e 9a 3a f7 33 c1 ......Microsoft Wi-Fi Direct Virtual Adapter #2
  7...0c 9a 3a f7 33 c1 ......Intel(R) Wi-Fi 6 AX201 160MHz
  1...........................Software Loopback Interface 1
===========================================================================

şimdi listede yer alan juniper arayüzüne dogru statik bir yönlendirme örneği yazalım.

route add 10.38.0.0 mask 255.255.255.0 172.16.0.1 IF 18

windowsda pulse secure kullanımı sırasında hız yavaşlığı

pulse secure kullanımı sırasında hız yavaşlığı sorunu yaşıyorsanız bunun birden çok nedeni olabilir. route tablosu normal ve hız sorunu pulse secure sizi dahil ettiği network dışındaysa ncpa.cpl ile “Denetim Masası\Ağ ve Internet\Ağ Bağlantıları” nı açıp buradan aktif bağlantınıza ait özellikler altında “juniper network service” seçilmiş ise kaldırmayı deneyebilirsiniz.

huawei network ekipmanlarında arşivlenmiş log dosyası

huawei network ekipmanlarında loglar yapılan konfigürasyon ayarlarına göre belirli bir tarihten veya log sayısından fazlası router üzerindeki hafıza ortamlarında tutulabilmektedir. nms üzerinde geçmişe ait log kaydı tutmuyorsanız ve/veya router üzerinde log analizi yapmak isterseniz işinize yarayacaktır.kısaca gerekli incelemelerin nasıl yapılacağına bakalım.

“display logfile-path” komutu ile log dosyalarının nerede tutulduğunu öğrenebiliriz.

<fcicek_huawei_test_router>display logfile-path 
Info: Current log file path is "cfcard2:/log".

dosya konumu ögrenildikten sonra ilgili alan / dizine geçiş için cd komutunu kullanıyoruz.

<fcicek_huawei_test_router>cd cfcard2:/log

dizin içinde dosları inceleyelim.

<fcicek_huawei_test_router>dir
Directory of cfcard2:/log/

  Idx  Attr     Size(Byte)  Date        Time       FileName 
    0  -rw-      1,114,505  Apr 21 2016 08:58:50   log.log
    1  -rw-        645,924  Apr 21 2016 08:58:50   log.dblg
    2  -rw-        262,144  Aug 02 2013 00:49:44   logfilebuf.dat
    3  -rw-          1,508  May 30 2014 07:29:40   scene.dblg.zip
    4  -rw-      1,094,989  Feb 06 2016 01:11:28   2016-02-06.01-11-08.dblg.zip
    5  -rw-        626,757  Feb 12 2016 14:29:06   2016-02-12.14-28-51.log.zip
    6  -rw-        999,237  Mar 11 2016 01:11:18   2016-03-11.01-11-00.dblg.zip
    7  -rw-        967,042  Feb 17 2016 06:29:10   2016-02-17.06-28-51.dblg.zip
    8  -rw-        978,353  Feb 28 2016 04:29:10   2016-02-28.04-28-51.dblg.zip
    9  -rw-        685,204  Mar 04 2016 12:59:08   2016-03-04.12-58-51.log.zip
   10  -rw-        991,856  Mar 22 2016 01:11:30   2016-03-22.01-11-09.dblg.zip
   11  -rw-      8,412,776  Apr 21 2016 08:51:28   2016-04-21.05-01-15-dst.35.logtmp
   12  -rw-        960,961  Apr 02 2016 01:29:12   2016-04-02.01-28-51-dst.dblg.zip
   13  -rw-        978,646  Apr 14 2016 01:11:20   2016-04-14.01-10-59-dst.dblg.zip
   14  -rw-      1,097,927  Apr 21 2016 04:58:20   2016-04-21.04-57-57-dst.dblg.zip
   15  -rw-        637,749  Apr 21 2016 05:01:30   2016-04-21.05-01-15-dst.log.zip
   16  -rw-      8,393,002  Apr 21 2016 09:07:40   2015-11-05.19-58-51.34.logtmp
   17  -rw-      1,138,966  Feb 28 2014 18:11:54   2014-02-28.18-11-31.dblg.zip
   18  -rw-        449,312  Mar 01 2014 08:52:08   2014-03-01.08-51-55.log.zip
   19  -rw-      1,040,497  Mar 13 2014 08:23:24   2014-03-13.08-23-03.dblg.zip
   20  -rw-      1,068,521  Mar 25 2014 18:11:50   2014-03-25.18-11-30.dblg.zip
                                          
1,999,616 KB total (1,874,240 KB free)

geçmişe dönük arşivlenmiş logları görmek için “display logfile” komutu kullanılacaktır. yalnız burada dikkat edilmesi gereken noktada dosyanın tam yolunu yazmak gerektiği. bu farklı yazılımlarda değişebilir.

<fcicek_huawei_test_router>display logfile cfcard2:/log/2016-02-12.14-28-51.log.zip
Info: It may take several seconds, please wait ...
100%  complete
################################################################
#     This logfile is generated at slot 9
################################################################

################################################################
#Automatic record log end,current health information as follows:
Slot                    CPU Usage     Memory Usage (Used/Total)
---------------------------------------------------------------
9       MPU(System Master)  9%           31%  571MB/1806MB
1       LPU                18%           46%  384MB/825MB
2       LPU                18%           45%  378MB/825MB
3       LPU                19%           46%  386MB/825MB
10      MPU                 5%           26%  473MB/1806MB
#DateTime Stamp: 2016-01-26 16:58:51.980
################################################################


Jan 26 2016 17:00:14+02:00 fcicek_huawei_test_router LSPM/1/LDPVTUNNEL_DOWN:OID 1.3.6.1.4.1.2011.5.25.182.1.54.2 LDP virtual tunnel went Down. (VirtualTunnelIndex=3567058411)
Jan 26 2016 17:00:14+02:00 fcicek_huawei_test_router LSPM/1/LDPVTUNNEL_DOWN:OID 1.3.6.1.4.1.2011.5.25.182.1.54.2 LDP virtual tunnel went Down. (VirtualTunnelIndex=3567058317)

sqlite veritabanına verilerin kaydedilmesi ve flask frameworkunda bu verilerin mathplotlib ile grafiklerinin çizim örneği

öncelikle proje klasörümü ve kullanacağımız virtualenv yi oluşturulalım

fcicek@ferhatcicek:~$ mkdir system_usage

fcicek@ferhatcicek:~$ mkdir system_usage
fcicek@ferhatcicek:~$ cd system_usage/
fcicek@ferhatcicek:~/system_usage$ python -m venv env

projemizde sistem verilerini saklamak iin sqlite veritabanını kullancağız. kullanacağımız system_usage veritababı oluşturalım

fcicek@ferhatcicek:~/system_usage$ sqlite3 system_usage.db
sqlite> .quit

veritabanı dosyamızı oluşturduktan sonra sıra tablomuzu oluşturmaya geldi. bunu sql ortamında yapabiliriz ancak bu örnekte python ile oluşturacağız..

fcicek@ferhatcicek:~/system_usage$ nano sqlite_db_create.py

aynı isimli tablo varsa sileceğiz ve veri tabanımızla aynı isimli bir tablo oluşturacağız. örneğimizi basit tutmak adına anlık cpu ve hafıza verilerini tablomuzda tutacağımız için tablomuzda bu veriler için gerekli alanları oluşturacağız…

import sqlite3 as lite
import sys
con = lite.connect('system_usage.db')
with con: 
    cur = con.cursor() 
    cur.execute("DROP TABLE IF EXISTS system_usage")
    cur.execute("CREATE TABLE system_usage(timestamp DATETIME, cpu NUMERIC, mem NUMERIC)")

kodumuz yazık şimdi virtualenv i aktif ederek kodumu çalıştıralım…

fcicek@ferhatcicek:~/system_usage$ source env/bin/activate
(env) fcicek@ferhatcicek:~/system_usage$ python sqlite_db_create.py 

python kodumuz sonucu kontrol etmek istersek. clidan veritabanına bakıp tablonun durumunu inceleyebiliriz.

(env) fcicek@ferhatcicek:~/system_usage$ sqlite3 system_usage.db 
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .table
system_usage
sqlite> .quit

örneğimizde cpu ve hafıza verilerini saklayacağız. bunun için pythonde psutil paketini kullanacağız. psutil paketini yükleyelim

(env) fcicek@ferhatcicek:~/system_usage$ pip install psutil

psutil paketini daha önce kullanmamış olabilirsiniz.. programımızda kullanacağımız verileri içerecek basit bir uygulama yapalım.

import psutil

print('MEM  % used:', psutil.virtual_memory()[2])
print('CPU % used:', psutil.cpu_percent(2))

programi çalıştıralım.

(env) fcicek@ferhatcicek:~/system_usage$ python psutil_system.py 
MEM  % used: 86.5
CPU % used: 2.0

anlık olarak cpu ve hazfıza kullanım bilgileriniz artık alabiliyoruz. bu bilgilerini şimdi de veritabanımıza ekleyelim.

bunun için program tarafımızdan sonlandırılana kadar 60 saniyede bir cpu ve hazfıza kullanım değerini okuyarak sqlite veritabanına ekleyecek basit bir kod yazalım.

(env) fcicek@ferhatcicek:~/system_usage$ nano data_logger.py     
import time
import sqlite3
import psutil

dbname='system_usage.db'

ornekleme_zamani = 60

def sistem_bilgisi_oku():
    mem = psutil.virtual_memory()[2]
    cpu = psutil.cpu_percent(1)
    if mem is not None and cpu is not None:
        return cpu,mem

def veritabani_ekle (cpu, mem):
    conn=sqlite3.connect(dbname)
    curs=conn.cursor()
    curs.execute("INSERT INTO system_usage values(datetime('now'), (?), (?))", (cpu, mem))
    conn.commit()
    conn.close()

def main():
    while True:
        cpu, mem = sistem_bilgisi_oku()
        veritabani_ekle (cpu, mem)
        time.sleep(ornekleme_zamani)

main()

artık verilerimizi bir veri tabanında turuyoruz. şimdi bunu web üzerinden bağlantı yapacak kullanıcılar için görselleştirelim. bunun için flask frameworkunu kullancağız. virtualenv altına flask ve ilişkili paketleri yükleyelim.

(env) fcicek@ferhatcicek:~/system_usage$ pip install flask

kullanıcı browser kullanarak sayfamıza bağlandığında, veritabanındaki en son cpu ve hafıza kullanım verisini sorgulayarak bu veriyi ekrana yazdıralım.

(env) fcicek@ferhatcicek:~/system_usage$ nano son_olcum.py
from flask import Flask, render_template, request
app = Flask(__name__)
import sqlite3

def getData():
	conn=sqlite3.connect('system_usage.db')
	curs=conn.cursor()
	for row in curs.execute("SELECT * FROM system_usage ORDER BY timestamp DESC LIMIT 1"):
		time = str(row[0])
		cpu = row[1]
		mem = row[2]
        print(str(cpu))
        print((str(mem))
	conn.close()
	return time, cpu, mem

@app.route("/")
def index():	
	time, cpu, mem = getData()
	templateData = {
		'time': time,
		'cpu': cpu,
		'mem': mem
	}
	return render_template('son_olcum.html', **templateData)
    
if __name__ == "__main__":
   app.run(host='0.0.0.0', port=5000, debug=True)

flask frameworkun tema yapısını kullanacağımız için templates dizinini oluşturup içinde gerekli dosyaları oluşturmamız gerekmektedir. python dosyamızda ilişkilendirilen tema dosyası son_olcum.html veiçerisinde kullanılacak verinin templateData olarak belirtildi.

(env) fcicek@ferhatcicek:~/system_usage$ mkdir templates
(env) fcicek@ferhatcicek:~/system_usage$ cd templates
(env) fcicek@ferhatcicek:~/system_usage/templates$ nano son_olcum.html
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">    
<title>System Durum</title>

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

</head>

<body>

<div class="container-fluid">
    <div class="jumbotron">
        <p class="lead">Son veri okuma  :  {{ time }}   <a href="/"class="button">Güncelle</a></p>     
        <hr class="my-4">
        <p class="lead">CPU Kullanım Oranı  % : {{ cpu }}</p>    
        <p class="lead">Memory Kullanım Oranı  % : {{ mem }} </p>   
        <hr class="my-4">
    </div>        
</div>

</body>
</html>

şimdi kodumuzu test edelim.

(env) fcicek@ferhatcicek:~/system_usage$ nano son_olcum.py

tarayıcımız ile http://sunucuip:5000 adresine bağlandığımız aşagıdaline benzer bir ekran ile karşılaşmamız gerekecek…

kodumuz biraz daha geliştirmenin zamanı geldi. cpu ve hafıza verilerini veritabanımızda tuttugumuz için bu veriyi bir grafik olarka ekrana yansıtabiliriz. bu işlem sırasında mathplotlib paketinde faydalanacağımız için öncelikle kurulumunu yapalım.

(env) fcicek@ferhatcicek:~/system_usage$ pip install matplotlib

şimdi kodumuza yapacağımız ilave , belirtilen örnekleme sayısınca veri tabanından veri çekip bunu grafiği oluşturup son kullanıcıya ileteceğiz. cpu ve hafiza grafiklerini çizdirmek için app.route metodundan faydalanacağız.

from flask.globals import session
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import io

from flask import Flask, render_template, send_file, make_response, request
app = Flask(__name__)

import sqlite3

def sonKayit():
        conn=sqlite3.connect('system_usage.db')
        curs=conn.cursor()
        for row in curs.execute("SELECT * FROM system_usage ORDER BY timestamp DESC LIMIT 1"):
                time = str(row[0])
                cpu = row[1]
                mem = row[2]
        conn.close()
        return time, cpu, mem

def sonKayitDizi (orneklemeSayisi):
        conn=sqlite3.connect('system_usage.db')
        curs=conn.cursor()
        curs.execute("SELECT * FROM system_usage ORDER BY timestamp DESC LIMIT "+str(orneklemeSayisi))
        data = curs.fetchall()
        tarihDizi = []
        cpuDizi = []
        hafizaDizi = []
        for row in reversed(data):
                tarihDizi.append(row[0])
                cpuDizi.append(row[1])
                hafizaDizi.append(row[2])
        conn.close()
        return tarihDizi, cpuDizi, hafizaDizi
    
def maksimumKayit():
        conn=sqlite3.connect('system_usage.db')
        curs=conn.cursor()
        for row in curs.execute("select COUNT(cpu) from  system_usage"):
                maksimumKayitDizi=row[0]    
        conn.close()
        return maksimumKayitDizi


global orneklemeSayisi
orneklemeSayisi = maksimumKayit()
if (orneklemeSayisi > 101):
    orneklemeSayisi = 100

@app.route("/")
def index():
        time, cpu, mem = sonKayit()
        templateData = {'time':time,'cpu':cpu,'mem':mem,'orneklemeSayisi':orneklemeSayisi}
        return render_template('index.html', **templateData)
    
@app.route('/', methods=['POST'])
def post_form():
        global orneklemeSayisi
        orneklemeSayisi = int (request.form['orneklemeSayisi'])
        numMaxSamples = maksimumKayit()
        if (orneklemeSayisi > numMaxSamples):
                orneklemeSayisi = (numMaxSamples-1)
        time, cpu, mem = sonKayit()
        templateData = {'time':time,'cpu':cpu,'mem':mem,'orneklemeSayisi':orneklemeSayisi}
        return render_template('index.html', **templateData)
    
@app.route('/plot/cpu')
def cpu_cizim():
        times, cpuDizi, hafizaDizi = sonKayitDizi(orneklemeSayisi)
        ys = cpuDizi
        fig = Figure()
        axis = fig.add_subplot(1, 1, 1)
        axis.set_title("CPU [%]")
        axis.set_xlabel("Örnekleme")
        axis.grid(True)
        xs = range(orneklemeSayisi)
        axis.plot(xs, ys)
        canvas = FigureCanvas(fig)
        output = io.BytesIO()
        canvas.print_png(output)
        response = make_response(output.getvalue())
        response.mimetype = 'image/png'
        return response
    
@app.route('/plot/mem')
def hafiza_cizim():
        times, cpuDizi, hafizaDizi = sonKayitDizi(orneklemeSayisi)
        ys = hafizaDizi
        fig = Figure()
        axis = fig.add_subplot(1, 1, 1)
        axis.set_title("MEM [%]")
        axis.set_xlabel("Örnekleme")
        axis.grid(True)
        xs = range(orneklemeSayisi)
        axis.plot(xs, ys)
        canvas = FigureCanvas(fig)
        output = io.BytesIO()
        canvas.print_png(output)
        response = make_response(output.getvalue())
        response.mimetype = 'image/png'
        return response

    
if __name__ == "__main__":
   app.run(host='0.0.0.0', port=5000, debug=True)
<!-- index.html -->
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>System Durum</title>

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

</head>

<body>

<div class="container-fluid" align=center>
    <div class="jumbotron">
        <p class="lead"><a href="/"class="button">Güncelle</a></p>                                
        <hr class="my-4">
        <p class="lead">Son veri okuma  :  {{ time }}   </p>
        <hr class="my-4">
        <p class="lead">CPU Kullanım Oranı  % :<b> {{ cpu }} </b></p>
        <p class="lead">Memory Kullanım Oranı  %<b> : {{ mem }} </b></p>
        <hr class="my-4">
    </div>
</div>
<div class="container-fluid" align=center>

        <form method="POST">
                <input name="numSamples" value= {{orneklemeSayisi}}>
                <input type="submit">
                </form></p>
        <hr>
        <img src="/plot/cpu"  width="80%" height=400>
        <img src="/plot/mem"  width="80%" height=400>

</div>
</body>
</html>

kodumuzu aşagıdaki şekilde günceller ve çalıştırırsak aşagıdaki gibi ekran görüntüsüne sahip olacağız

python projelerinde gerekli modül / paketler

python projelerinde, projenin sorunsuz olarak çalışması için ihtiyaç duyulan paketler ana dizinde genel olarak requirements.txt dosyası içinde belirtilir.

dosya içerinde her satırda ihtiyaç duyulan modül adı ve sürüm numarası yer almaktadır.

Jinja2==3.0.1
requests==2.25.1

paketlerin sürümlerinde farklılık olabiliceği için yeni ve eski sürümlerde uygulama düzgün şekilde çalışmayabilir… bunun için paket sürüm ihtiyaçlarını belirtmek için ==, >=, <= operaatörleri kullanılabilir.

geliştirme ortamınızda en doğru paket ve versiyonlarını dosyaya aktarmak için pip paket yöneticisini kullanıyorsak

pip freeze > requirements.txt

komutu kullanılabilir. temin edilmiş herhangi bir projedeki en uygun paket kurmak içinde

pip install -r requirements.txt

kullanablirsiniz.

huawei network ekipmanlarında qos-profile uygulanmış interface listesi

huawei network ekipmanlarında qos-profile yapısını kullanıyorsanız tanımlı bir profile in hangi interfacelerde tanımlı olduğunu öğrenmek isterseniz aşagıdaki örnekteki komut yapısını kullanabilirsiniz.

[testrouter_fc]display qos-profile application qos-inbound-profile
qos-profile qos-inbound-profile:
  GigabitEthernet1/1/3.221
  GigabitEthernet1/1/3.222
  GigabitEthernet1/1/3.223
  GigabitEthernet1/1/3.224
  GigabitEthernet1/1/3.225
Reference number by access user: [inbound] 0, [outbound] 0
Back To Top