Linux Traceroute Komutu
traceroute komutu, hedef bir sunucuya veya IP adresine giden yolun her adımını analiz etmek için kullanılır. Komutla birlikte kullanabileceğiniz farklı parametreler, ağ durumunu daha detaylı incelemek veya özelleştirmek için faydalıdır.
Yaygın Kullanılan Parametreler
| Parametre | Açıklama |
|---|---|
-n | DNS çözümlemesini devre dışı bırakır. Daha hızlı sonuç almak için IP adreslerini direkt gösterir. |
-w <saniye> | Her atlama için zaman aşımı süresini ayarlar (varsayılan: 5 saniye). |
-q <sayı> | Her atlama için yapılacak sorgu sayısını belirler (varsayılan: 3). |
-m <ttl> | Maksimum "Time To Live" (TTL) değerini ayarlar (varsayılan: 30). |
-p <port> | Hedef port numarasını belirler (varsayılan: 33434). |
-I | ICMP Echo Request kullanarak traceroute yapar (varsayılan: UDP). |
-T | TCP SYN paketi kullanarak traceroute yapar. |
-f <ttl> | İlk atlama için başlangıç TTL değerini ayarlar. |
-z <milisaniye> | Her paket arasında bekleme süresini ayarlar (milisaniye cinsinden). |
-4 | Sadece IPv4 kullanır. |
-6 | Sadece IPv6 kullanır. |
--mtu | Maksimum İletim Birimi (MTU) değerini kontrol eder. |
traceroute komutu, bir hedef IP adresine veya domain'e giden yol üzerindeki ağ cihazlarını (router, gateway, vb.) ve ağ atlamalarını (hops) analiz etmek için kullanılan bir ağ teşhis aracıdır. Çalışma prensibi, Time-To-Live (TTL) alanını manipüle ederek, her ağ cihazından gelen yanıtları izlemeye dayanır.Traceroute Nasıl Çalışır?
TTL Değeri ve Paket Gönderimi:
traceroute, ilk olarak hedefe gönderilen paketin TTL (Time-To-Live) değerini 1 olarak ayarlar.- Paketin yönlendiricilere ulaştıkça TTL değeri 1 azalır. TTL değeri sıfıra ulaştığında, paket düşürülür ve yönlendirici, kaynak IP'ye bir hata mesajı (ICMP Time Exceeded) gönderir.
Her Atlamanın İzlenmesi:
traceroutebu hata mesajını alır ve paketi hangi yönlendiricinin düşürdüğünü öğrenir.- Daha sonra aynı işlemi TTL değerini artırarak tekrarlar (ör. TTL=2, TTL=3) ve hedefe ulaşana kadar bu işlemi sürdürür.
Son Nokta:
- Paket hedefe ulaştığında, hedef cihaz bir ICMP Echo Reply (veya ilgili protokole bağlı başka bir yanıt) gönderir.
- Böylece
traceroute, hedefe giden yolu ve her atlamadaki gecikme süresini ölçer.
Çıktının Sunulması:
- Her atlama için yanıt veren yönlendiricinin IP adresi (ve varsa DNS adı) ve gecikme süreleri (milisaniye cinsinden) görüntülenir.
Traceroute'un Kullanım Protokolleri
traceroute, farklı protokollerle çalışabilir:
- UDP (Varsayılan): Traceroute, hedefe ulaşmak için varsayılan olarak UDP paketlerini kullanır. Bu paketler genelde yüksek port numaraları (33434 ve üzeri) kullanılarak gönderilir.
- ICMP:
-Iparametresi ile ICMP Echo Request paketleri kullanılarak traceroute yapılır. Bu yöntempingkomutuna benzer. - TCP:
-Tparametresi ile TCP SYN paketleri kullanılarak traceroute yapılır. Bu yöntem, güvenlik duvarlarının genelde UDP ve ICMP trafiğini engellediği durumlarda faydalıdır.
Önemli Notlar
- Firewall (Güvenlik Duvarı) Engelleri: Bazı ağlar,
traceroutetarafından kullanılan UDP, ICMP veya TCP trafiğini engelleyebilir. Bu durumda alternatif protokoller denenmelidir. - Asimetrik Rotalar: Traceroute’un ölçtüğü rota, hedefe giden yolun bir yönünü gösterir. Geri dönüş yolu farklı olabilir. Bu durum ağ tasarımına bağlıdır.
Python Modül Yüklümü Kontrolü
Python da bir modül yüklü değilse ilk kullanmaya çalıştığınızda modülün olmadığına dair bir hata mesajı verir ve yazılım durur. Özellikle yeni bilgisayarda bir kod çalıştırırken veya bir başka kaynaktan aldığınız kodları kendi bilgisayarınızda çalıştırırken bu durum sıkca meydana gelebilir. Aşağıdaki kod bilgisayarınızda ilgili modüllerin olup olmadığını kontrol eder ve yoksa yükleme işlemini otomatik olarak yapar.
import subprocess
import sys
def check_and_install(package_name):
# Modül yüklü mü kontrol et
if importlib.util.find_spec(package_name) is None:
print(f"{package_name} modülü yüklü değil, yüklenecek...")
# pip ile modülü yükle
subprocess.check_call([sys.executable, "-m", "pip", "install", package_name])
else:
print(f"{package_name} modülü yüklü.")
# Kullanılacak modülleri burada kontrol edebilirsiniz
required_packages = ['numpy', 'requests', 'pandas']
for package in required_packages:
check_and_install(package)
Python Schedule Modülü Nasıl Kullanılır
Python'da zamanlanmış görevler için schedule modülünü kullanabilirsiniz.
import schedule
import time
# Yeni bir zaman aralığı belirliyoruz.
new_interval = 20
# İşlev: Belirli bir işi gerçekleştiren ve zaman aralığını güncelleyen fonksiyon
def job_function(job_name):
global new_interval
print(job_name + " çalıştı!")
# Zaman aralığını artırıyoruz.
new_interval += 1
print(new_interval)
# Güncellenmiş zaman aralığını ilgili işe atıyoruz.
job_list["job3"].interval = new_interval
# Çalıştırılacak işlerin adları
job_names = ["job1", "job2", "job3"]
# İş listesini oluşturuyoruz ve her bir işi plana ekliyoruz.
job_list = {}
for job_name in job_names:
job = schedule.every(5).seconds.do(job_function, job_name)
job_list[job_name] = job
# Planlanan işleri gösteriyoruz.
print(job_list)
# Planlanan işleri alıp ekrana yazdırıyoruz.
scheduled_jobs = schedule.get_jobs()
for job in scheduled_jobs:
print(job)
# Ana döngü
n = 0
while True:
# Planlanan işleri çalıştırıyoruz.
schedule.run_pending()
# 1 saniye bekleme
time.sleep(1)
# Güncellenmiş işleri gösteriyoruz.
scheduled_jobs = schedule.get_jobs()
for job in scheduled_jobs:
print(job)
# 11. turda "job2" işini iptal ediyoruz.
if n == 11:
cancelled_job = job_list["job2"]
schedule.cancel_job(cancelled_job)
n += 1
# Güncellenmiş işleri bir kez daha gösteriyoruz.
scheduled_jobs = schedule.get_jobs()
for job in scheduled_jobs:
print(job)
K.Club - Python giriş seviyesi eğitimleri.
K.Club - Python giriş seviyesi ücretsiz eğitimler.
1- https://www.youtube.com/watch?v=T20jpNJYJwE
2- https://www.youtube.com/watch?v=_BX_VUD7XiY
3- https://www.youtube.com/watch?v=Ze34p_I8L3g
4-5- https://www.youtube.com/watch?v=D5g0GaYohM4
6- https://www.youtube.com/watch?v=LFJ04OokCcQ
7- https://www.youtube.com/watch?v=2i2_AfoPnjQ
8- https://www.youtube.com/watch?v=k2s5c7csTgk
9- https://www.youtube.com/watch?v=7yAWyD6B_yI
10- https://www.youtube.com/watch?v=SFFeQXHHuXI
11- https://www.youtube.com/watch?v=n_PvRV3Z7-c
12- https://www.youtube.com/watch?v=Q6DEPPFB1EI
13- https://www.youtube.com/watch?v=J2fgU3DHN6s
14- https://www.youtube.com/watch?v=y4hyq7bHAnY
15- https://www.youtube.com/watch?v=5-tPw279AeU
16- https://www.youtube.com/watch?v=4vdrH1qF9_w
17- https://www.youtube.com/watch?v=_ofKLfjUUpo
18- Listeler & Tuple
https://www.youtube.com/watch?v=_mEc1CsfLw4
19- Dictionary
https://www.youtube.com/watch?v=TGPUxsm7_so
Network Otomasyon Netmiko
Network Otomasyon Netmiko
Netmiko kütüphanesi ile telnet/SSH protokolleri üzerinden ağ cihazlarına bağlanabilirsiniz. Netmiko, SSH ve Telnet protokollerini destekler, bu nedenle bağlantıyı sağlamak için device_type parametresini cihazınıza uygun bir diğer device_type değerine ayarlayarak bağlantı yapabilirsiniz.
Örneğin, bir Cisco cihazına telnet üzerinden bağlanmak için:
'device_type': 'cisco_ios_telnet',
'ip': 'cihaz_ip_adresi',
'username': 'kullanici_adi',
'password': 'parola',
}
net_connect = ConnectHandler(**device)
Ancak, unutulmaması gereken önemli bir nokta var. SSH, güvenli bir bağlantı protokolüdür ve genellikle telnet yerine tercih edilir. Eğer mümkünse, cihazınız SSH üzerinden bağlantıya izin veriyorsa, bu daha güvenli bir seçenektir. Telnet, verileri şifrelemeden gönderdiği için güvenli olmayabilir.
Netmiko ile bağlanırken device_info sözlüğüne cihazın bağlantı bilgilerini eklemelisiniz. Bu bilgiler, bağlanmaya çalıştığınız cihazın türüne ve yapılandırmasına göre değişecektir.
Netmiko device_info bilgiler
Temelde, device_info sözlüğünde aşağıdaki temel bilgiler olması gerekir:
device_type: Bağlanmaya çalıştığınız cihazın türünü belirtir (örneğin, 'cisco_ios', 'cisco_xr', 'juniper_junos', vb.).
ip: Cihazın IP adresi.
username: Cihaza erişim için kullanıcı adı.
password: Kullanıcı parolası.
Netmiko device_info diğer bilgiler
device_info sözlüğüne ek olarak, cihazın özelliklerine ve gereksinimlerine bağlı olarak çeşitli diğer parametreleri ekleyebilirsiniz. İşte bazı yaygın parametreler:
port: Cihaza bağlanmak için kullanılacak port numarası (örneğin, 22 için SSH, 23 için Telnet).
secret: Cihazda "enable" moduna geçiş için kullanılan parola.
global_delay_factor: Komut gönderimlerinin ve cevap almanın arasındaki zaman gecikmesini ayarlar. Varsayılan olarak 1'dir.
fast_cli: Eğer destekleniyorsa, bu parametre True olarak ayarlanarak, komut gönderme işlemlerinin hızlandırılmasını sağlar.
session_log: Bağlantı üzerindeki etkileşimleri bir dosyaya kaydetmek için kullanılır.
session_log_record_writes: True olarak ayarlanırsa, her yazma işlemi log dosyasına kaydedilir.
auto_find_prompt: True olarak ayarlandığında, cihazın komut istemcisini otomatik olarak algılar.
use_keys: Eğer cihazın anahtar tabanlı kimlik doğrulama kullanıyorsa, bu parametre True olarak ayarlanmalıdır.
key_file: Anahtar tabanlı kimlik doğrulama için kullanılacak özel anahtar dosyasının yolu.
alt_host_keys: Eğer cihaz farklı anahtarları kullanıyorsa, bu parametre True olarak ayarlanmalıdır.
alt_key_file: Farklı anahtarlar kullanılıyorsa, bu parametre ile kullanılacak anahtar dosyasının yolu belirtilir.
alt_passwords: Eğer cihaz farklı parolalar kullanıyorsa, bu parametre ile kullanılacak parolalar belirtilir.
alt_secret: Eğer farklı bir "enable" parolası kullanılıyorsa, bu parametre ile belirtilir.
verbose: Daha fazla ayrıntı için bu parametre True olarak ayarlanabilir.
Bu, sadece bazı örnek parametrelerdir. Cihazın türüne ve gereksinimlerine bağlı olarak, farklı parametreler de kullanılabilir. Bu nedenle, belgeleri inceleyerek doğru parametreleri belirlemeniz önemlidir.
netmiko.redispatch() fonksiyonu, Bir ağ cihazının türünü dinamik olarak tanımlamak için kullanılır.
Özellikle, bir cihaza ilk olarak bağlandığınızda, belirli bir cihaz türü için yapılandırılmış bir bağlantı yapısı oluşturursunuz (örneğin, cisco_ios için). Ancak bazen cihazın türünü önceden bilmiyorsanız veya oturum açtıktan sonra cihazın türü değişirse, bu durumda redispatch() fonksiyonunu kullanarak cihazın türünü dinamik olarak belirleyebilirsiniz.
# Cihazın bağlantı bilgilerini belirtin
device = {
'device_type': 'autodetect', # Dinamik olarak cihaz türünü belirle
'ip': 'cihaz_ip_adresi',
'username': 'kullanici_adi',
'password': 'parola',
'secret': 'enable_parola', # Enable modu için gerekli ise
}
# Cihaza bağlantı yap
net_connect = ConnectHandler(**device)
# Cihaz türünü dinamik olarak belirle
device_type = net_connect.device_type
netmiko.redispatch(net_connect, device_type=device_type)
# Cihaza bir komut gönder
output = net_connect.send_command('show interfaces')
# Çıktıyı ekrana yazdır
print(output)
Netmiko bağlantı fonksiyoanları
ConnectHandler(): Bu fonksiyon, belirtilen bağlantı parametrelerine göre bir ağ cihazına bağlantı yapar.
device = {
'device_type': 'cisco_ios',
'ip': 'cihaz_ip_adresi',
'username': 'kullanici_adi',
'password': 'parola',
'secret': 'enable_parola', # Opsiyonel: Enable modu için gerekli ise
}
net_connect = ConnectHandler(**device)
ConnectHandler.from_dict(): Bu fonksiyon, bir cihazın bağlantı bilgilerini bir sözlükten alır.
'device_type': 'cisco_ios',
'ip': 'cihaz_ip_adresi',
'username': 'kullanici_adi',
'password': 'parola',
'secret': 'enable_parola', # Opsiyonel: Enable modu için gerekli ise
}
net_connect = ConnectHandler.from_dict(device_info)
Netmiko komut gönderme fonksiyonları
net_connect.write_channel() metodu, cihaza veri göndermek için kullanılır.
net_connect.write_channel("Komut" + ' \r\n')
send_command(): Bu fonksiyon, bir komutu cihaza gönderir ve cevabını döndürür.
output = net_connect.send_command('show interfaces')
send_command_expect(): Bu metot, belirtilen komutu cihaza gönderir ve ardından belirtilen bir dizeyi bekler. Bu metot, beklenen dizeyi görene kadar cihazdan gelen yanıtı döndürmez. expect_string="Info:": Bu parametre, cihazdan beklenen dizedir. Yani, cihazın yanıtında bu dizenin bulunması beklenir. Eğer bu dize bulunmazsa, metot beklemeye devam eder.
output = net_connect.send_command_expect(' \n', expect_string="Info:")
send_config_set(): Bu fonksiyon, yapılandırma komutlarını cihaza gönderir. Birden fazla komutu içeren bir liste veya bir string'i kabul eder. Örneğin:
config_commands = ['interface Loopback0', 'ip address 192.168.1.1 255.255.255.255']
output = net_connect.send_config_set(config_commands)
send_command_timing(): Bu fonksiyon, komutları gönderir ve bekler. Eğer cihaz hızlı yanıt veriyorsa veya bekleme süresi beklenmiyorsa bu fonksiyon kullanılabilir. Örneğin:
output = net_connect.send_command_timing('show interfaces')
send_config_from_file(): Bu fonksiyon, bir dosyadan yapılandırma komutlarını cihaza gönderir. Örneğin:
output = net_connect.send_config_from_file('config_commands.txt')
send_command_with_yml(): YML şablonlarına göre çıktı işleyen komuttur, ancak yaygın bir kullanım değildir.
send_multiline() : Birden fazla satırı tek komut olarak göndermek gerektiğinde kullanılır. Bu fonksiyon, uzun komutlar veya birden fazla satırdan oluşan çıktılar için kullanılabilir.
send_command_sc(): Netmiko'nun Single Connect entegrasyonu ile kullanılan bu fonksiyon, birden fazla cihaza aynı komutu göndermek için kullanılır.
send_interactive(): Etkileşimli komutlar (örneğin, bir komut çıktı verdikten sonra kullanıcıdan onay istemesi gibi) için kullanılır. Girdi-girdi senaryolarında kullanışlıdır.
commit() (yalnızca bazı cihazlarda): Bu fonksiyon, yapılandırma değişikliklerini cihaza uygular. Örneğin:
net_connect.commit()
read_channel(): fonksiyonu, bağlantı kanalından (connection channel) gelen verileri okumak için kullanılır. Bu fonksiyon, özellikle düşük seviyeli ağ iletişimi gerektiren durumlarda kullanılır.
Özetle, net_connect.read_channel() ile cihazın yanıtlarını doğrudan okuyabilirsiniz. Ancak, bu yöntem genellikle daha ileri seviyeli fonksiyonlar (send_command(), send_command_expect()) kullanılarak otomasyon işlemleri için tercih edilir.
İşte net_connect.read_channel() fonksiyonunun nasıl kullanılacağına dair basit bir örnek:
output = net_connect.read_channel()
print(output)
Bu örnekte, net_connect.read_channel() fonksiyonu cihazdan gelen verileri okur ve bu verileri output değişkenine atar. Daha sonra print(output) komutu ile bu veriyi ekrana yazdırabilirsiniz.
Unutmayın ki bu yöntem, cihazın yanıtlarını doğrudan işlemek için kullanılır ve yanıtların formatına bağlı olarak bu verileri işlemek zor olabilir. Bu nedenle, genellikle daha yüksek seviyeli fonksiyonları kullanarak cihaz ile etkileşimde bulunmak daha yaygındır.
bekleme süresini ayarlamak için
Netmiko ekran (Prompt) okuma fonksiyonları
output = net_connect.find_prompt() #Bu komut prompt'da en son yazan kısmı getirir.
veya
output = net_connect.read_channel(timeout=10) #Bu komut cihazın en son döndüğü verinin tamamını getirir.
Python DateTime Modülü
Python'da datetime modülü, tarih ve zamanla ilgili işlemler yapmanızı sağlayan bir standart kütüphanedir. Aşağıda, datetime modülünü kullanarak temel işlemleri nasıl gerçekleştireceğinizi gösteren birkaç örnek bulunmaktadır:
Tarih ve Zamanı Almak:
# Şu anki tarih ve zamanı almak
now = datetime.now()
print(now)
# Belirli bir tarihi ve zamanı oluşturmak
print(specific_date)
Tarihi Biçimlendirmek:
now = datetime.now()
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_date)
Tarih ve Zamanı Ayırmak:
year = now.year
month = now.month
day = now.day
hour = now.hour
minute = now.minute
second = now.second
print(f"Yıl: {year}, Ay: {month}, Gün: {day}, Saat: {hour}, Dakika: {minute}, Saniye: {second}")
Tarih ve Zaman İşlemleri:
yesterday = now - timedelta(days=1)
tomorrow = now + timedelta(days=1)
print(f"Bugün: {now}")
print(f"Dün: {yesterday}")
print(f"Yarın: {tomorrow}")
Tarih içinde bazı alanları sıfır olarak almak:
dt = datetime.datetime.now()
dt = dt.replace(hour=0, minute=0, second=0, microsecond=0)
X gün önceki veya sonraki tarihi bulmak.
50 gün önceki tarihi bulan kod.
today = datetime.datetime.now()
d = datetime.timedelta(days = 50)
a = today - d
print(a, b)
Bu örnekler, datetime modülünün temel kullanımlarını göstermektedir.
Serkan.net
Merhaba!
Bilgi Paylaşım'a hoş geldiniz! Bu platform, teknoloji dünyasına ilgi duyanlar için kapsamlı bir bilgi kaynağıdır. Network, Network Automation, Python, Cisco, Huawei, Linux, Microsoft, VSAT, IoT, HTML, PHP, Oracle, MySql ve PostgreSQL gibi birçok önemli konuda içerikler sunuyoruz.
Network dünyasına olan ilginizi geliştirmek ve uzmanlaşmak için doğru adrestesiniz. Ağ teknolojilerinin yanı sıra, Network Automation ile iş süreçlerini otomatikleştirmeyi öğreneceksiniz. Python gibi güçlü bir programlama dili sayesinde ağ yönetiminde ve otomasyonunda kendinizi geliştireceksiniz.
Cisco ve Huawei gibi önde gelen ağ ekipmanları hakkında bilgi edinerek, profesyonel ağ altyapılarının nasıl tasarlandığını ve yönetildiğini öğreneceksiniz. Linux işletim sistemi hakkında temel bilgilere sahip olacak ve ağ dünyasında kullanılan Microsoft ürünleri ile ilgili en güncel bilgilere ulaşacaksınız.
VSAT teknolojisi, uzak bölgelerde internet erişimi sağlamak için kritik bir konudur. Bu konuda temel bilgileri ve çalışma prensiplerini öğreneceksiniz. IoT (Nesnelerin İnterneti) konusu, nesnelerin internete bağlı olduğu bu çağın önemli bir trendi olarak ele alınacak.
Web geliştirme ile ilgileniyorsanız, HTML ve PHP dilleriyle web siteleri tasarlamayı öğrenerek dijital dünyada varlığınızı güçlendireceksiniz. Ayrıca, veritabanı yönetimi alanında uzmanlaşmak için Oracle, MySql ve PostgreSQL gibi popüler veritabanı sistemleri hakkında bilgi sahibi olacaksınız.
Bilgi Paylaşım, teknoloji dünyasındaki güncel gelişmeleri takip eden, paylaşan ve birlikte öğrenen bir topluluktur. Siz de bu topluluğa katılarak, teknoloji alanında bilgi birikiminizi artırabilir ve kariyerinizde yeni ufuklar açabilirsiniz.
Haydi, Bilgi Paylaşım'a katılın ve teknolojiye dair keşfetmeniz gereken dünyayı birlikte keşfedelim!
Konu başlıkları;
Network Security
Network Monitoring
Network Troubleshooting
Network Virtualization
Network Performance
Network Configuration
Network Devices
Network Topology
Network Protocols
Network Management
Network Design
Network Engineering
Network Optimization
Network Automation
Network Scripting
Network DevOps
Network Programmability
Network Analytics
Network Cloud Integration
Python Network Automation
Python Networking Libraries
Cisco Routing
Cisco Switching
Cisco Networking Certifications
Cisco Network Security
Huawei Network Technologies
Huawei Routing and Switching
Huawei Network Certification
Microsoft Networking Solutions
Microsoft Azure Networking
Microsoft Network Administration
Linux Network Administration
Linux Network Security
Linux Networking Tools
Linux Network Troubleshooting
VSAT Installation
VSAT Troubleshooting
IoT Network Connectivity
IoT Network Protocols
IoT Network Security
IoT Network Architecture
HTML Web Development
HTML5 Canvas
HTML Email Design
PHP Web Applications
PHP Frameworks
PHP Security Best Practices
Oracle Database Management
Oracle SQL Queries
Oracle Database Administration
MySQL Database Management
MySQL Performance Tuning
MySQL Replication
PostgreSQL Database Management
PostgreSQL Data Modeling
PostgreSQL Performance Tuning
Cloud Networking Technologies
Cloud Network Security
Cloud Network Monitoring
Cloud Network Migration
Mobile Network Technologies
Mobile Network Optimization
Mobile Network Protocols
Mobile Network Performance
Mobile Network Security
Network Security Certifications
Network Traffic Analysis
Network Load Balancing
Network Storage Solutions
Network Disaster Recovery
Network Scalability
Network Data Privacy
Network Data Backup
Network Data Center Design
Network Data Encryption
Network Data Governance
Network Data Integrity
Network Data Leakage Prevention
Network Data Loss Protection
Network Data Recovery
Network Data Retention
Network Data Segmentation
Network Data Transfer
Network Data Visualization
Network Data Warehousing
Network Data Traffic Management
Network Data Virtualization
Network Data Compression
Network Data Deduplication
Network Data Archiving
Network Data Indexing
Network Data Quality
Network Data Resilience
Network Data Replication
Network Data Synchronization
Network Data Migration
Network Data Governance
Network Data Anonymization
Network Data Consent Management
Network Data Protection Regulations
Network Data Security Policy
Network Data Breach Response
Network Data Incident Management
Network Data Compliance
Network Data Access Control
Network Data Authentication
Network Data Authorization
Network Data Encryption Algorithms
Network Data Firewall
Network Data Intrusion Detection
Network Data Intrusion Prevention
Network Data Penetration Testing
Network Data Risk Assessment
Network Data Threat Intelligence
Network Data Vulnerability Assessment
Network Data Malware Detection
Network Data Phishing Protection
Network Data Ransomware Prevention
Network Data Social Engineering Awareness
Network Data Cybersecurity Awareness
Network Data Cybersecurity Training
Network Data Cybersecurity Incident Response
Network Data Cybersecurity Forensics
Network Data Cybersecurity Governance
Network Data Cybersecurity Auditing
Network Data Cybersecurity Policy
Network Data Cybersecurity Compliance
Network Data Cybersecurity Ethics
Network Data Cybersecurity Laws and Regulations
Network Data Cybersecurity Best Practices
Network Data Cybersecurity Tools
Network Data Cybersecurity Frameworks
Network Data Cybersecurity Standards
Network Data Cybersecurity Research
Network Data Cybersecurity Trends
Network Data Cybersecurity Threats
Network Data Cybersecurity Risks
Network Data Cybersecurity Challenges
Network Data Cybersecurity Solutions
Network Data Cybersecurity Technologies
Network Data Cybersecurity Vendors
Network Data Cybersecurity Industry
Network Data Cybersecurity Careers
Network Data Cybersecurity Certifications
Network Data Cybersecurity Training Courses
Network Data Cybersecurity Conferences
Network Data Cybersecurity Webinars
Network Data Cybersecurity Workshops
Network Data Cybersecurity Seminars
Network Data Cybersecurity News
Network Data Cybersecurity Blogs
Network Data Cybersecurity Forums
Network Data Cybersecurity Communities
Network Data Cybersecurity Social Media Groups
Network Data Cybersecurity Experts
Network Data Cybersecurity Consultants
Network Data Cybersecurity Analysts
Network Data Cybersecurity Engineers
Network Data Cybersecurity Specialists
Network Data Cybersecurity Managers
Network Data Cybersecurity Directors
Network Data Cybersecurity Leaders
Network Data Cybersecurity Researchers
Network Data Cybersecurity Innovations
Network Data Cybersecurity Startups
Network Data Cybersecurity Companies
Network Data Cybersecurity Products
Network Data Cybersecurity Services
Network Data Cybersecurity Solutions
Network Data Cybersecurity Partnerships
Network Data Cybersecurity Collaborations
Network Data Cybersecurity Projects
Network Data Cybersecurity Implementations
Network Data Cybersecurity Case Studies
Network Data Cybersecurity Success Stories
Network Data Cybersecurity Lessons Learned
Network Data Cybersecurity Strategies
Network Data Cybersecurity Action Plans
Network Data Cybersecurity Assessments
Network Data Cybersecurity Evaluations
Network Data Cybersecurity Reviews
Network Data Cybersecurity Recommendations
Network Data Cybersecurity Guidelines
Network Data Cybersecurity Standards
Network Data Cybersecurity Frameworks
Network Data Cybersecurity Policies
Network Data Cybersecurity Procedures
Network Data Cybersecurity Protocols
Network Data Cybersecurity Controls
Network Data Cybersecurity Measures
Network Data Cybersecurity Metrics
Network Data Cybersecurity KPIs
Network Data Cybersecurity Reports
Network Data Cybersecurity Dashboards
Network Data Cybersecurity Tools
Network Data Cybersecurity Technologies
Network Data Cybersecurity Trends
Network Data Cybersecurity Future
Network Data Cybersecurity Challenges
Network Data Cybersecurity Opportunities
PHP: Oracle SQL Injection
Cross-Site Scripting: Persistent web güvenliği açısından çok önemli ve dikkat edilmesi gerken bir durumdur. PHP kodu ile Oracle SQL de injection engellemek için aşağıdaki yöntemi kullanabilirsiniz. Bir oracle bağlantısı kurabilmek için ilk olarak sorgu hazırlanır.
query="select * from tablo where userID=:user"
$user="username";
$parse = oci_parse($connectora, $query);
oci_bind_by_name($parse, ':user', $username);
$r = oci_execute($parse)
XSS
Java Script Güvenlik
Güvensiz rastgelelik hataları, öngörülebilir değerler üretebilen bir işlev, güvenliğe duyarlı bir bağlamda rastgelelik kaynağı olarak kullanıldığında ortaya çıkar. Bilgisayarlar deterministik makinelerdir ve bu nedenle gerçek rastgelelik üretemezler. Sözde Rastgele Sayı Üreteçleri (PRNG'ler), sonraki değerlerin hesaplandığı bir çekirdekten başlayarak, algoritmik olarak rastgeleliğe yaklaşır. İki tür PRNG vardır: istatistiksel ve kriptografik.
İstatistiksel PRNG'ler yararlı istatistiksel özellikler sağlar, ancak çıktıları oldukça tahmin edilebilirdir ve güvenliğin üretilen değerlerin öngörülemez olmasına bağlı olduğu durumlarda kullanım için uygun olmayan, yeniden üretilmesi kolay bir sayısal akış oluşturur.
Kriptografik PRNG'ler, tahmin edilmesi daha zor çıktılar üreterek bu sorunu çözer. Bir değerin kriptografik olarak güvenli olması için, bir saldırganın oluşturulan rasgele değer ile gerçekten rasgele bir değer arasında ayrım yapmasının imkansız veya çok düşük olması gerekir. Genel olarak, bir PRNG algoritmasının kriptografik olarak güvenli olduğu ilan edilmiyorsa, bu muhtemelen istatistiksel bir PRNG'dir ve kullanımının tahmin edilmesi kolay geçici parolalar gibi ciddi güvenlik açıklarına yol açabileceği güvenlik açısından hassas bağlamlarda kullanılmamalıdır. , tahmin edilebilir kriptografik anahtarlar, oturum ele geçirme ve DNS sahtekarlığı. Örnek: Aşağıdaki kod, satın alma işleminden sonra belirli bir süre etkin kalan bir makbuz için bir URL oluşturmak üzere istatistiksel bir PRNG kullanır.
Math.random() fonksiyonu çıktıları tahmin edilebilir, güvenilir bir fonksiyon olmadığı için yerine aşağıdaki fonksiyonlardan biri kullanılmalıdır.
window.crypto.random()
crypto.getRandomValues()
Python Yazılımı İçin Log Oluşturma
Python kodunuzun loglarını takip etmek istiyorsanız program çalışırken oluşan hataları veya mesajları bir log dosyasına yardırabilirsiniz. Bu log dosyası yazılımınızın geçmişe dönük çalışmasıyla ilgili size bilgi verecektir. Python'da en popüler log oluşturma kütüphanesi logger kütüphanesidir. Logger yazılımını bilgisayarımıza yükleyerek başlayalım.
pip install logger
Modülü yükledikten sonra yazılıma import edelim.
import logging
İlk olarak oluşturduğumuz log için bir isim tanımı yapalım.
logger = logging.getLogger("Log_adı")
Mesaj seviyesi belirleyelim, bu seviye ve üzerindeki loglar alınır. Örneğin: Error seçilirse sadece error ve critical logları alınır.
Seviyeler:
- debug
- info
- warning
- error
- critical
logger.setLevel(logging.DEBUG)
Logların yazılacağı dosyanın belirlenmesi;
logging.basicConfig(filename='dosya_adi.log', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', filemode="w", level=logging.DEBUG)
Burada filemode="w" ise her çalıştırmada eski dosya silinerek yeni dosya oluşturulur. filemode="a" ise bilgiler eski dosyaya eklenerek kaydedilir. Ekrana yazdırma parametreleri;
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
Log formatı;
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s:%(lineno)d')
asctime = Çalışma zamanı
name = Log adı
levelname = Log level
message = Yazdığınız veya sistemden okuduğu hata mesajı.
pathname = Dosyanın bulunduğu dizin.
lineno = Kodun çalıştırdığı satır.
Ekrana yazılacak veriye format uygulanması
ch.setFormatter(formatter)
logger.addHandler(ch)
Yazılır.
#Uygulama mesaj formatları;
Print komutunu kullanır gibi aşağıdaki formatta yazdığınız tüm mesajlar log dosyasında oluşacaktır.
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
Kodun tamamı
logger = logging.getLogger('Log_adı')
logger.setLevel(logging.DEBUG)
logging.basicConfig(filename='dosya_adi.log', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s:%(lineno)d', filemode="w", level=logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s:%(lineno)d')
ch.setFormatter(formatter)
logger.addHandler(ch)
Tavsiye edilen kullanım:
import os
logger_name=os.path.basename(__file__)
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)
logging.basicConfig(filename=logger_name+'.log', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s:%(lineno)d', filemode="w", level=logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s:%(lineno)d')
ch.setFormatter(formatter)
logger.addHandler(ch)
Python Log'larını otomatik olarak mail atmak için
Koda aşağıdaki satırları da ekleyerek mail atma işlemini de gerçekleştirebilirsiniz.
import logging.handlers
Sender_pwd = "passWord" #Password kullanımı opsiyoneldir...
smtpHandler = logging.handlers.SMTPHandler(
mailhost=("localhost", 25),
fromaddr="noreply@domain.com",
toaddrs="user@email.com",
subject="Dikkat!",
credentials=(Mail_sender, Sender_pwd))
smtpHandler.setLevel(logging.DEBUG)
logger.addHandler(smtpHandler)
Not: Mail atarken alarm seviyesini warning olarak ayarlayın, yoksa çok fazla mail ile karşı karşıya kalabilirsiniz.
Python Yazılımı İçin Konfigürasyon Dosyası
Python yazılımı için bir konfigürasyon dosyası nasıl oluşturulur?
Yazılım kodunda sürekli değişiklik yapmamak için veya kod üzerinde başkaları ile çalışırken kullanıcı adı ve şifre bilgilerinin açık bir şekilde görünmemesi için bir konfigürasyon dosyası hazırlayıp değişkenleri burada tanımlamak çok kullanışlı olacaktır. Bu değişkenler username, password, host, port, ve IP gibi sürekli değişecek bilgiler olabilir. İlk olarak config.py isimli bir dosya oluşturalım ve içeriğini gerekli bilgiler ile aşağıdaki örnekteki gibi dolduralım.
host = 'localhost'
port = '8080'
username = 'user'
password = 'password'
Dosyaya bilgileri yazdıktan sonra config.py ismi ile yazılımımızın dosyalarının olduğu klasöre kaydedelim. Konfigürasyonun import edilebilmesi için main.py dosyası ile config.py dosyası aynı klasörde olmalıdır. Yazdığımız kod içinden bu değişkenleri çağırmak için aşağıdaki örnek koda uygun bir şekilde değişkenleri çağıralım. Bu dosya adı main.py olsun.
host = config.host
port = config.port
username = config.username
password = config.password
Böylece konfigürasyonları yazdığımız dosya config.py ana dosyayı main.py çalıştırdığımızda yüklenecektir ve içerdiği bilgileri kullanabileceğiz. Özellikle password içeren kodlarda başkaları ile beraber çalışıyorsanız veya eğitim veriyorsanız bilgileri bu şekilde kod içinde görünmez hale getirebilirsiniz. Yazdığınız kodu başkaları da çalıştırabiliyorsa veya dosyalara erişebiliyorsa bu yöntem size güvenlik sağlamaz.
Konfigürasyon bilgilerini güvenli bir şekilde saklamak.
Güvenli bir şekilde konfigürasyon bilgilerini saklamak istiyorsanız cryptography modülünden faydalanabilirsiniz. İlk olarak bir konfigürasyon dosyası hazırlayıp bu dosyayı şifrelemek ve şifreli dosyayı kullanmak en güvenli yollardan biri olacaktır. İlk olarak yukarıda anlatıldığı gibi bir konfigürasyon dosyası oluşturun ve adını config.py olarak kaydedin. Pythn cryptography modülünü kurun;
pip install cryptography
Hazırladığınız config.py dosyasını şifrelemek için bir key oluşturun ve bu key bilgisini sonra kullanmak üzere bir dosyaya yazdırın. Daha sonra konfigürasyon dosyanızın şifreli bir halini oluşturun. Aşağıdaki kod key dosyası ve şifrelenmiş bir konfigürasyon dosyası oluşturmamızı sağlar.
key = Fernet.generate_key()
print(key)
#Oluşturduğunuz key bilgisini dosyaya kaydeder.
with open('mykey.key', 'wb') as mykey:
mykey.write(key)
f = Fernet(key)
with open('config.py', 'rb') as original_file:
original = original_file.read()
encrypted = f.encrypt(original)
with open ('encrypted.py', 'wb') as encrypted_file:
encrypted_file.write(encrypted)
Bu kod iki adet çıktı elde eder. mykey.key oluşturulan key bilgisinin içinde bulunduğu dosya, encrypted.py config.py dosyasının şifrelenmiş versiyonudur.
İşlemden sonra mykey.key dosyasını mutlaka saklamalısınız, bu dosya şifreli encrypted.py dosyasını düzgün bir şekilde açmanızı sağlayacaktır. Artık bilgilerin açık bir şekilde yazılı olduğu config.py dosyasını başka bir güvenli yere taşıyabilir veya silebilirsiniz. Oluşturduğunuz şifreli konfigürasyon dosyasındaki bilgileri kullanmak için aşağıdaki kod size yardımcı olacaktır.
from cryptography.fernet import Fernet
key = filekey.read()
print(key)
f = Fernet(key)
with open('encrypted.py', 'rb') as encrypted_file:
encrypted = encrypted_file.read()
print(host, port, username, password )
config.py dosyasını tekrar oluşturmak isterseniz yukarıdaki koda aşağıdaki kod parçacığını eklemeniz yeterlidir.
dec_file.write(decrypted)
ORACLE SQL: IP Adresinin Dahil Olduğu IP Bloğunu Bulma
Database'de bulunan bir tablonun ilgili kolonunda listelenmiş network blokları içinde (IP_Adresi/Subnet) bir IP adresinin hangi bulağa ait olduğunu bulmak için aşağıdaki sorgu kullanılabilir
Burada database kolonunda bulunan veri ör:IP_RANGE=192.168.1.0/30 şeklinde arana IP adresi ör:IP_Adresi=192.168.1.3 olabilir. Bu durumda sorgumuz;
SELECT IP_RANGE, regexp_substr(IP_RANGE, '(.*)/', 1, 1, null, 1) as network,
to_number(regexp_substr(IP_RANGE, '/(.*)', 1, 1, null, 1)) as subnet_mask_length
FROM Tablo_adi
)
SELECT IP_RANGE, network, subnet_mask_length
FROM subnet_table
WHERE
to_number(regexp_substr('IP_Adresi', '\d+', 1, 1)) * 16777216 +
to_number(regexp_substr('IP_Adresi', '\d+', 1, 2)) * 65536 +
to_number(regexp_substr('IP_Adresi', '\d+', 1, 3)) * 256 +
to_number(regexp_substr('IP_Adresi', '\d+', 1, 4))
BETWEEN
to_number(regexp_substr(network, '\d+', 1, 1)) * 16777216 +
to_number(regexp_substr(network, '\d+', 1, 2)) * 65536 +
to_number(regexp_substr(network, '\d+', 1, 3)) * 256 +
to_number(regexp_substr(network, '\d+', 1, 4))
AND
to_number(regexp_substr(network, '\d+', 1, 1)) * 16777216 +
to_number(regexp_substr(network, '\d+', 1, 2)) * 65536 +
to_number(regexp_substr(network, '\d+', 1, 3)) * 256 +
to_number(regexp_substr(network, '\d+', 1, 4)) + power(2, 32 - subnet_mask_length) - 1
ORDER BY subnet_mask_length DESC
Bu sorguda;
subnet_table : Tablonun kolonunda bulunan IP_RANGE=192.168.1.0/30 şeklindeki veriyi network=192.168.1.0 ve subnet_mask_length=30 şekline dönüştürür.
Sorgu ise IP_Adresi ve subnet_table'dan gelen network bilgilerini Decimal IP adresine dönüştürerek en küçün network IP'sinden en büyük network IP'si aralığında IP_Adresi bilgisinin olup olmadığına bakar.
subnet_table kısmı aşağıdaki gibi de yazılabilir.
select substr(IP_RANGE,1,length(IP_RANGE)-3) AS network, substr(IP_RANGE,-2,2) AS subnet_mask_length FROM Tablo_adi
veya
select substr(IP_RANGE, 1, INSTR(IP_RANGE, '/') - 1) as network, SUBSTR(IP_RANGE, INSTR(IP_RANGE, '/') + 1) as subnet_mask_length FROM Tablo_adi
Oracle SQL Bir Hücreye 4000 Karkterden Fazla Veri Yazmak
Oracle SQL'de bir hücreye 4000 karekterden fazla veri yazmayı istiyorsanız kolon tipi olarak CLOB kullanmalısınız. VARCHAR2 ve benzeri kolonlara maximum 4000 karekter veri yazabilirsiniz. 4000 karekterden uzun veriyi tabloya yazmayı denediğinizde aşağıdaki gibi bir hata alırsınız.
General Exception: ORA-01704: string literal too long
Bu hatayı almanız, veritabanına yazmak istediğiniz verinin uzunluğunun veritabanı tarafından desteklenmeyen bir değere ulaştığı anlamına gelir. Oracle veritabanında, bir string literal'in maksimum uzunluğu 4000 karakterdir. Eğer veritabanına yazmak istediğiniz veri bu uzunluğu aşıyorsa, CLOB veri tipi kullanmanız gerekir. GENIS_KOLON isimli CLOB Kolon aşağıdaki gibi oluşturulabilir.
( "NORMAL_KOLON" VARCHAR2(200),
"GENIS_KOLON" CLOB
);
import cx_Oracle
# Veritabanı bağlantısının açılması
conn = cx_Oracle.connect("username/password@hostname:port/sid")
# Veritabanı işlemleri için bir cursor oluşturulması
cursor = conn.cursor()
# Veriyi içeren değişken
long_data = "Long data here..." * 1000
# Veritabanı tablosuna veri yazma
cursor.execute("""
INSERT INTO table_name (column_name)
VALUES (:data)
""", data=cx_Oracle.CLOB(long_data))
# Değişikliklerin veritabanına kaydedilmesi
conn.commit()
# Bağlantının kapatılması
SSH Bağlantısı Üzerinden Telnet Bağlantısı
Bir sunucuya veya cihaza SSH bağlantısı kurup bu bağlantı üzerinden Telnet ile başka bir cihaza bağlanabilmek için Python kodu içinde SSH için Paramiko, Telnet için Telnetlib modülleri kullanılabilir. Aşağıdaki kod bir sunucuya SSH ile bağlanmanızı ve aynı sunucu üzerinden Telnet ile başka bir cihaza komut göndermenizi sağlar.
import telnetlib
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('ssh_hostname', username='ssh_username', password='ssh_password')
tn = ssh.invoke_shell()
tn.send('telnet telnet_hostname\n')
tn.expect(['Username: '])
tn.send(f'{telnet_username}\n')
tn.expect(['Password: '])
tn.send(f'{telnet_password}\n')
# Telnet bağlantısı kurulunca burada telnet üzerinde yapmak istediğiniz komutları gönderebilirsiniz
tn.send('ls\n')
output = tn.recv(9999).decode('ascii')
print(output)
tn.close()
ssh.close()
Bu kodda bulunan, ssh_hostname, ssh_username, ssh_password, telnet_hostname, telnet_username, telnet_password değişkenlerine bağlanmak istediğiniz SSH ve Telnet sunucularının adresleri, kullanıcı adları ve parolalarıdır.
PHP IP Adresi Doğrulama
PHP'de bir formdan girilen IP adresini doğrulamak için aşağıdaki kodları kullanabilirsiniz. IPv4 ve IPv6 için ayrı ayrı iki adet IP doğrulama kodu mevcuttur. Bu kod değişkenin uygun bir IP adresi olup olmadığını söyler.
IP versiyon 4 için;
<?php
$ip = "127.0.0.1";
if (filter_var($ip, FILTER_VALIDATE_IP)) {
echo("$ip is a valid IP address");
} else {
echo("$ip is not a valid IP address");
}
?>
IP versiyon 6 için;
<?php
$ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
echo("$ip is a valid IPv6 address");
} else {
echo("$ip is not a valid IPv6 address");
}
?>
IPv6 Nedir ve Konfigürasyonu Nasıl Yapılır
IPv6 (Internet Protocol version 6) IP adresleme sisteminin sonraki sürümüdür. IPv6, IPv4'ten daha yüksek miktarda adres alanı sunar ve daha iyi güvenlik özellikleri içerir. IPv6 adresleri, IPv4 adreslerinden daha uzun olarak 128 bit uzunluğunda olup, daha yüksek sayıda cihazın internete bağlanmasına olanak tanır. Bu nedenle, IPv6, internetin gelecekteki ihtiyaçlarını karşılamak için tasarlanmıştır.
IPv6 kullanılmasının birkaç nedeni vardır:
- Adres yokluğu: IPv4 adresleri, internetteki cihazların sayısının hızla artması nedeniyle tükenmeye başlamıştır. IPv6, daha fazla adres alanı sunarak bu sorunu çözmeye çalışır.
- Daha yüksek güvenlik: IPv6, IPv4'ten daha iyi güvenlik özellikleri içerir. Örneğin, IPv6, IPsec ile birlikte gelir ve cihazlar arasındaki iletişimi şifreler.
- Daha hızlı ağ performansı: IPv6, IPv4'ten daha az yer kaplar ve dolayısıyla daha hızlı ağ performansı sunar.
- Daha esnek yapı: IPv6, IPv4'ten daha esnek bir yapıya sahiptir ve dolayısıyla daha kolay yönetilir.
- IoT: Internet of Things (IoT) gibi cihazların sayısının hızla artması, IPv6'nın kullanılmasını gerekli kılmaktadır.
- Mobil cihazlar: Mobil cihazlar, IPv4 adresleri ile sınırlıdır ve dolayısıyla IPv6 kullanılması gerekmektedir.
Bu nedenler ve daha fazlası ile IPv6 kullanılması gereklidir.
IPv6 adres yapısı, 128 bit uzunluğunda bir dizidir ve 8 parçaya ayrılır. Her parça, 16 bit uzunluğunda bir hexadecimal sayıdır. Parçalar arasında iki nokta üst üste (:) kullanılır. Örnek bir IPv6 adresi: 2001:0db8:85a6:0000:0000:8a2e:0370:7335.
IPv6 adres yapısı, IPv4 adres yapısından farklıdır. IPv4 adres yapısı, 32 bit uzunluğunda bir dizidir ve 4 parçaya ayrılır. Her parça, 8 bit uzunluğunda bir sayıdır. Parçalar arasında nokta (.) kullanılır. Örnek bir IPv4 adresi: 192.168.1.1
IPv6 kullanılması, dünya genelinde hızla yaygınlaşmaktadır. Ancak, tüm ağlar ve cihazlar tamamen IPv6'ya geçmeden önce, geçiş bir süreç olacaktır. Bu süreç, IPv4 ve IPv6 arasında çalışan çoklu protokol desteği ve IPv4 adreslerinin tükenmeden önce IPv6'ya dönüştürülmesi gibi faktörlere bağlıdır. Ipv4 ve Ipv6'yı bir tablo ile karşılaştıralım.
IPv4'ün tükenmesiyle beraber IPv6 kullanımı gün geçtikçe artıyor. Ülkemizde bulunan operatörler müşterilerine IPv6 tahsis ediyor ve kullanım kurumsal bağlantılarda daha yoğun olmak üzere artarak devam ediyor. IPv6 kullanımıyla ilgili bilgi almak için aşağıdaki linkten faydalanabilirsiniz.
https://www.google.com/intl/en/ipv6/statistics.html#tab=per-country-ipv6-adoption
Cisco ve Huawei cihazlarda IPv6 konfigürasyonu ve kontrolü için gerekli komutların bazıları aşağıdaki gibidir.
Cisco
Interface altında IPv6 tanımlama
IPv6 static route tanımlama
1. ipv6 route { ipv6 address/mask } gigabitethernet { value } { destination ipv6 address }IPv6 BGP tanımlama
1. router bgp xxxxxx2. neighbor { destination ipv6 address }
3. remote-as { value }
4. description { name }
5. address-family ipv6 unicast
6. route-policy { policy name } in
7. maximum-prefix { value } { value }
8. route-policy { policy name } out
9. soft-reconfiguration inbound always
IPv6 prefix-list tanımlama
1. prefix-set { prefix name }2. { ipv6 address/mask } ,
3. { ipv6 address/mask } ,
4. { ipv6 address/mask }
5. end-set
IPV6 Route Policy oluşturma
1. route-policy { policy name }2. if destination in { prefix name } then
3. drop
4. elseif destination in { prefix name }then
5. set local-preference { value }
6. set community { value } additive
7. pass
8. endif
9. end-policy
Cisco IPv6 Kontrol Komutları
Huawei
Interface altında IPv6 tanımlama
2. ipv6 address { ipv6 address/mask }
IPv6 static route tanımlama
1. ipv6 route-static { ipv6 address ve mask } interface { value } { destination ipv6 address }IPv6 BGP tanımlama
1. BGP xxxxxx2. peer { destination ipv6 address } as-number { value }
3. ipv6-family unicast
4. peer { destination ipv6 address } enable
5. peer { destination ipv6 address } route-policy { policy name } import
6. peer { destination ipv6 address } route-policy { policy name } export
IPv6 prefix-list tanımlama
1. ip ipv6-prefix { prefix name } index { value } permit { ipv6 address ve mask }IPv6 Route Policy oluşturma
1. route-policy { policy name } permit node { value }2. if-match ipv6 address prefix-list { prefix name }
3. apply local-preference { value }
4. apply community { community id }
Huawei IPv6 Kontrol Komutları
display ipv6 interfacedisplay ipv6 interface tunnel
display ipv6 neighbors
display ipv6 pathmtu
display ipv6 socket
display ipv6 statistics
display snmp-agent trap feature-name ipv6 all
display tcp ipv6 authentication-statistics
display tcp ipv6 statistics
display tcp ipv6 status
display this ipv6 interface
display udp ipv6 statistics
Windows bilgisayarlar için IPv6 konfigürasyonu aşağıdaki adımlar izlenerek yapılabilir:
- Başlamak için, Başlat menüsünde arama kutusuna "cmd" yazın ve "Command Prompt" uygulamasını seçin.
- Command Prompt açıldıktan sonra, "ipv6" yazın ve enter tuşuna basın. Bu, sisteminizdeki IPv6 yapılandırmasını gösterir.
- IPv6 adresini değiştirmek için "netsh interface ipv6 set address" komutunu kullanabilirsiniz. Örneğin, "netsh interface ipv6 set address interface=Ethernet address=2001:0db8:85a3:0000:0000:8a2e:0370:7334" komutu ile Ethernet arayüzü için adres değiştirebilirsiniz.
- Alt ağ maskesini değiştirmek için "netsh interface ipv6 set prefixlength" komutunu kullanabilirsiniz. Örneğin, "netsh interface ipv6 set prefixlength interface=Ethernet prefixlength=64" komutu ile Ethernet arayüzü için alt ağ maskesini 64 olarak değiştirebilirsiniz.
- Varsayılan ağ geçidini değiştirmek için "netsh interface ipv6 set route" komutunu kullanabilirsiniz. Örneğin, "netsh interface ipv6 set route interface=Ethernet next-hop=2001:0db8:85a3:0000:0000:8a2e:0370:7334" komutu ile Ethernet arayüzü için varsayılan ağ geçidini 2001:0db8:85a3:0000:0000:8a2e:0370:7334 olarak değiştirebilirsiniz.
- Değişiklikleri kaydetmek için "netsh interface ipv6 set global" komutunu kullanabilirsiniz. Örneğin, "netsh interface ipv6 set global randomizeidentifiers=disabled" komutu ile rastgele tanımlayıcıları devre dışı bırakabilirsiniz.
- Değişiklikleri geri almak için "netsh interface ipv6 reset" komutunu kullanabilirsiniz.
Not: Bu komutlar yönetici hakları gerektirir. Bu komutları çalıştırmadan önce Command Prompt yönetici olarak çalıştırmanız gerekir.
XAMPP için PHP Yazılım Upgrade Nasıl Yapılır
PHP Yazılımını upgrade etmek için ilk olarak aşağıdaki URL'e gidilir ve yeni yazılım versiyonu bilgisayara indirilir. Burada XAMPP server üzerinde PHP yazılımını nasıl upgrade edeceğimizi yazacağız. Diğer uygulamalar da benzer şekilde yapılabilir. İşletim sistemi için uygun olan XAMPP yazılımı dosya seçilerek indirilmelidir.
https://www.apachefriends.org/download.html
Bilgisayarınıza indirdiğiniz yazılımı bilgisayarınızda bir klasöre açın. Sunucu üzerinde çalışan Apache servisini durdurun. Sunucudaki PHP yazılımının klasörünün adını değiştirin (Kesinlikle silmeyin) İndirip diske açtığınız klasördeki PHP klasörünü sunucuda eski PHP klasörünün olduğu dizine kopyalayın. Eksi PHP klasöründe bulunan php.ini dosyasını yeni klasör içindeki dosya ile değiştirin ve Apache servisini tekrar başlatın.
PHP içine daha önce modül yüklediyseniz Apache açılırken hata verecektir. Yüklediğiniz bu modülleri de aynı klasöre diğer klasörden kopyalayıp servisi tekrar açmayı denemelisiniz. Sorun devam ediyorsa geri dönüş yeni klasörü silip eski klasörün adını tekrar PHP yapmak şeklinde olacaktır. İşlem tamamlandıktan sonra versiyon testlerini info.php dosyasından yapabilirsiniz.
Oracle SQL ve Postgre SQL de Pivot Nasıl Yapılır
Oracle SQL'de aşağıdaki gibi yaptığımız Pivot işlemini PostgreSQL'de yapabilmek için Crosstab komutu kullanılır. Yapacağımız örnekte dört kolona sahip bir tablo düşünelim. KolonBilgiler kolonu aynı kolona yazılmış bilgi başlıklarını, KolonDegerler kolonu bilgi başlıklarına karşılık gelen değerleri içersin. Çıktı olarak ilk iki kolonu tablodan gelecek diğer dört kolonu bilgi başlıklarının kolon olarak gösterileceği bir yapı olsun. Toplamda altı kolon oluşturacağız.
(SELECT Kolon1, Kolon2, KolonBilgiler, KolonDegerler FROM Tablo_adı
) d PIVOT (
MAX(KolonDegerler )
FOR KolonBilgiler
IN (Bilgi1, Bilgi2, Bilgi3,Bilgi4
)) piv
WHERE .....
Python IP Doğrulama (IPv4 IPv6 Public Private)
Python içinde hazır gelen Ipaddress modülü bir IP adresini doğrulamak ve tanımlamak için bize yardımcı olacaktır. IP adresi IPv4, IPv6, Public veya private olabilir. Bu ayrımı küçük bir fonksiyon ile anlayabiliriz.
try:
ip_object = ipaddress.ip_address(ip_string)
if ipaddress.ip_address(ip_string).is_private == False:
if ip_object.version == 4:
print("IPv4")
return "IPv4"
else:
print("IPv6")
return "IPv6"
else:
print("The IP address is private")
return "private"
except ValueError:
print("The IP address is not valid")
return "NotValid"
validate_ip_address(192.168.0.1)
Bir IP adresinin Network IP'sini bulmak istiyorsak aşağıdaki kod bize yardımcı olacaktır.
net_ip=ipaddress.ip_network(ip_address, strict=False)
print(net_ip)
Ayrıntılı bilgi için aşağıdaki adrese göz atabilirsiniz.
ipaddress — IPv4/IPv6 manipulation library
https://docs.python.org/3/library/ipaddress.html
Kaynak kod: https://github.com/python/cpython/blob/3.10/Lib/ipaddress.py
IP versiyon 4 - IP versiyon 6 - Public IP - Private IP
IP Versiyon kontrolü.
IP bilgileri nasıl listelenir:


