Seri portları (COM / ttyUSB / ttyACM / ttyS) ağ üzerinden erişilebilir kılan, web arayüzünden yönetilen, çapraz-platform (Windows + Linux) saf-Python köprü.
C dünyasındaki
ser2net'in modern, web yönetimli karşılığı. Tek ekrandan onlarca seri portu IP:port'a eşleyin; raw / telnet / RFC2217; çift yönlü; düşük gecikme.
Pano — onlarca eşleme, canlı durum, algılanan portlar ve LAN cluster paneli:
LAN cluster — tüm düğümlerin eşlemeleri tek tabloda; düğüm sağlığı + uzaktan başlat/durdur:
| Eşleme ekleme (tüm seri/ağ seçenekleri) | Tarayıcı-içi seri konsol (xterm.js) |
|---|---|
![]() |
![]() |
| Ayarlar (parola · TLS · cluster · yedek) | Giriş |
|---|---|
![]() |
![]() |
Endüstriyel cihazlar, PLC'ler, ölçüm aletleri, GPS/modem, mikrodenetleyiciler ve
konsol portları çoğunlukla seri (RS-232/485/USB-serial) haberleşir. Bu cihazlara
ağdaki herhangi bir bilgisayardan erişmek için her seri portu bir TCP/UDP uç
noktasına köprülemek gerekir. ser2net bunu yapar ve tüm yönetimi parola
korumalı bir web arayüzünden sunar — komut satırı veya elle config dosyası
düzenlemeye gerek yok.
Tipik kullanım senaryoları:
- Bir sunucuya bağlı 10+ USB-serial cihazı ağdaki uygulamalara açmak
- SCADA / Modbus-RTU cihazlarını uzak istemcilere ulaştırmak (raw veya RFC2217)
- Cihaz konsollarına (switch, router, gömülü kart) ağdan erişim
- Uzak baud/parity değişimi gereken cihazlar için RFC2217
- İki seri portu birbirine köprüleme (serial↔serial)
- Taşıma modları: TCP sunucu (dinleme), TCP istemci (dışarı bağlanma), UDP, ve serial↔serial köprüleme. TCP köprüleri için isteğe bağlı TLS.
- Protokoller:
raw,telnet(8-bit temiz),rfc2217(uzaktan canlı baud/parity/databit/stopbit/akış kontrolü değişimi),modbus(RTU↔TCP gateway). - Modbus ağ geçidi: Modbus/TCP master'larını seri Modbus/RTU slave'lere köprüler —
çoklu master, paylaşımlı bus'ta transaction serileştirme + transaction-id koruması,
RTU yanıtı gelmezse
0x0B(gateway-timeout) exception. Edge modu: coil ve register'ları periyodik okuyup MQTT'ye yayınlar (bool, uint/int/float 16/32, ölçek);"writable": truenoktalar MQTT'den yazılır (<topic>/<nokta>/set→ FC5/FC15 coil, FC6/FC16 register). İstenirse Sparkplug B edge node olarak, her Modbus unit'i bir cihaz (unit1, …):bdSeqile NBIRTH/NDEATH,seqile DBIRTH/DDATA, DCMD ile yazma, NCMD ile rebirth. - Client-side sanal COM: uzaktaki portu yerel
COMx/ttyolarak göstermek için reçeteler (pyserialrfc2217://, Linuxsocat, Windows com0com+com2tcp / HW VSP3) — bkz.docs/VIRTUAL-COM.md. - Tam seri yapılandırma: baud (custom dahil), data bit, parity, stop bit, akış
kontrolü (none/RTS-CTS/XON-XOFF/DSR-DTR), açılışta RTS/DTR, exclusive open ve RS-485
donanım auto-RTS (Linux
TIOCSRS485: aç + TX öncesi/sonrası gecikme + TX'te RTS seviyesi). - Canlı port listesi: ayrıcalık gerektirmeyen polling + isteğe bağlı olay-tabanlı
hotplug (Linux pyudev / Windows WM_DEVICECHANGE), yoksa polling'e düşer. Linux'ta
arkasında donanım olmayan
ttySportları gizlenir,/dev/serial/by-idkalıcı adları gösterilir ve seçilebilir. - Cihazı USB kimliğiyle bulma: eşleme formundaki kutu işaretlenince adaptör VID:PID
(+ seri no) ile bağlanır; çıkarılıp takılınca
ttyUSB0→ttyUSB1ya da COM numarası değişse de eşleme doğru cihazı açar. - IP seçici: makineye atanmış IP'ler (localhost / LAN / 0.0.0.0) veya custom.
- Onlarca eşleme: tek ekrandan ekle/düzenle/sil/başlat/durdur, canlı durum; arama, durum filtresi, sıralama ve seçili eşlemeleri toplu başlat/durdur/yeniden başlat. Tablo yalnızca değiştiğinde yenilenir (titreme yok, seçimler korunur).
- Erişim kontrolü (eşleme başına): izinli IP/CIDR listesi, yüksek-öncelikli
istemci IP'leri (doluyken eski istemciyi atar), max bağlantı, eski-kullanıcıyı-at,
salt-okunur, banner, open/close string,
closeon. - Bağlantı yaşam döngüsü (eşleme başına, TCP): TCP keepalive ile ölü bağlantı
tespiti — FIN/RST göndermeden kaybolan istemci ya da uzak sunucu (elektrik kesintisi,
kablo çekilmesi, Wi-Fi/VPN/NAT düşmesi) artık sonsuza dek
ESTABLISHEDkalmaz: varsayılan ayarlarla (açık · 60 sn boşta · 10 sn aralık · 3 deneme) ~90 sn içinde düşürülür ve yuvası boşalır — cihaz veri gönderirken de (LinuxTCP_USER_TIMEOUT). Ayrıca dışa bağlanmada bağlantı zaman aşımı (varsayılan 10 sn), idle timeout ve maksimum bağlantı süresi (ör. 24 sa); her kopuş nedeniyle loglanır. - Gözlemlenebilirlik: per-mapping trafik trace (hex/timestamp, döner dosyalar,
arayüzden indirilir), Prometheus
/metrics, audit log ekranı, canlı log görüntüleyici, tarayıcı-içi seri konsol (xterm.js, WebSocket — trafiği izle veya cihaza yaz) ve iki yönlü, zaman damgalı canlı hex görünümü. - Bildirimler: cihaz koptuğunda/geri geldiğinde, eşleme başlamadığında, istemci bağlanıp düştüğünde ya da hatalı girişte webhook (JSON, Slack, Microsoft Teams, Discord, Telegram) ve/veya e-posta (SMTP); tekrarlar bastırılır, test mesajı gönderilir.
- Güvenlik: parola (ilk erişimde belirlenir, scrypt), CSRF, imzalı-çerez oturum, login oran sınırı, sıkı güvenlik başlıkları, parola değişince oturum iptali. Güvenilir ağlar için giriş zorunluluğu Ayarlar → Web arayüzü erişimi'nden kapatılabilir (ziyaretçiler seçilen rolle parolasız kullanır; bkz. Güvenlik).
- Çok-kullanıcı / RBAC:
admin/operator/viewerrolleri — viewer salt-okunur, operator eşlemeleri yönetir, admin her şey + kullanıcı yönetimi. Tek-parola kurulumları otomatik olarak biradminkullanıcısına geçer. - LDAP / Active Directory auth (opsiyonel): kullanıcılar dizine bind ederek doğrulanır;
LDAP grup üyeliği role eşlenir. Yerel hesaplarla birlikte çalışır;
ldap3gerektirir. - OIDC tek-oturum (SSO, opsiyonel): Keycloak/Entra ID/Google/Okta ile authorization-code
akışı; id_token doğrulanır (imza/iss/aud/exp/nonce), claim→rol eşlenir.
authlibgerektirir. - REST API: otomasyon için JSON API (
/api/v1) — eşleme CRUD, başlat/durdur/yeniden, durum ve portlar; bearer-token kimlik doğrulama (rol seçilebilir —viewersalt-okunur); OpenAPI 3.0 (/api/v1/openapi.json). Token, Ayarlar'dan üretilir. - LAN cluster (filo yönetimi): aynı ağdaki düğümler birbirini otomatik bulur (imzalı UDP broadcast — mDNS yok) ve bir düğüm tüm düğümlerin eşlemelerini tek tabloda gösterir; her satır hangi bilgisayara ait olduğunu (ad + IP) ve her düğümün sağlığını (uptime · sürüm · çalışan/toplam) belirtir. Operatörler bu ekrandan başka bir host'un eşlemelerini uzaktan başlat/durdur/yeniden başlat ve düzenle edebilir. Broadcast'in ulaşmadığı yönlendirilmiş/L3 ağlar için manuel peer (host:port) eklenebilir. Güven = her düğümde aynı paylaşılan anahtar; varsayılan kapalı, Ayarlar → LAN cluster'dan açılır.
- Dağıtım: resmi Docker imajı +
docker-compose; systemd birimi; Linux+Windows × Python 3.10–3.13 CI (GitHub Actions). - MQTT yayınlama (opsiyonel): seri satırlarını eşleme başına bir MQTT broker'ına
yayınlar (host/port/topic/QoS/TLS/kimlik), retained birth/death durumuyla.
paho-mqttgerektirir (opsiyonel; yoksa köprü normal çalışır). - Klasik ser2net'ten geçiş:
ser2net.yaml(4.x) veser2net.conf(3.x) dosyaları Ayarlar → içe aktarma ile önizlemeli olarak alınır; karşılığı olmayan seçenekler uyarı olarak gösterilir. - Türkçe / İngilizce arayüz: üst menüdeki TR / EN ile seçilir (tarayıcıda hatırlanır); seçilmemişse tarayıcının dili ya da admin'in Ayarlar → Web arayüzü erişimi'nde seçtiği varsayılan dil. Bildirimler varsayılan dille gider; log'lar, audit log ve REST API İngilizce kalır.
- Tamamen offline: tüm bağımlılıklar wheel olarak birlikte gelir; internet gerekmez.
- Python 3.10+ (sistemde kurulu). Başka hiçbir şey gerekmez — bağımlılıklar
vendor/wheels/içinde gelir ve ilk çalıştırmada./lib'e kurulur (offline). - Linux'ta seri portu açmak için kullanıcının
dialoutgrubunda olması gerekir (port listelemek için ayrıcalık gerekmez):sudo usermod -aG dialout "$USER" # ardından oturumu kapatıp aç
- Windows'ta COM portları için ek yetki gerekmez.
- (Opsiyonel) TLS self-signed üretimi için
openssl; olay-tabanlı hotplug içinpyudev(Linux) /pywin32(Windows) — yoksa polling kullanılır.
# Linux / macOS
python3 ser2net.py # veya: ./start.sh
# Windows
start.batHer sürümde Windows .exe ve Linux binary'si GitHub Releases'a eklenir. İkisi de
her şeyi içinde taşıyan tek bir dosyadır: Python, OpenSSL, VC++ runtime (Windows),
MQTT / LDAP / OIDC desteği. Python, openssl ya da başka bir paket gerekmez. İndir,
çalıştır; config/log data/ altında binary'nin yanına yazılır.
| Dosya | Çalıştığı sistemler |
|---|---|
ser2net-windows-x64.exe |
Windows 10/11, Windows Server 2016 ve sonrası (x64) |
ser2net-linux-x64 |
glibc ≥ 2.28 olan x86_64 Linux: RHEL / AlmaLinux / Rocky 8+, Debian 11+, Ubuntu 20.04+, Fedora, openSUSE Leap 15 (musl/Alpine değil — orada Docker kullanın) |
ser2net-linux-arm64 |
glibc ≥ 2.28 olan 64-bit ARM Linux: Raspberry Pi 3/4/5 (64-bit Raspberry Pi OS 11+ veya Ubuntu), ARM endüstriyel gateway'ler, AWS Graviton, aynı dağıtımlar |
Her sürümde ayrıca SHA256SUMS, her binary için CycloneDX SBOM (*.cdx.json) ve lisans
metinleri yayımlanır; binary'ler GitHub'ın derleme kaynağı imzasıyla (build provenance)
doğrulanabilir: sha256sum -c SHA256SUMS --ignore-missing,
gh attestation verify ser2net-linux-x64 -R haliskilic/ser2net. Windows exe'si, bir imzalama
servisi tanımlandığında sürümlerde imzalanır (docs/SIGNING.md).
Bu, her PR'da ve her sürümde test edilir (tests/test_standalone.py):
- paketin içindekiler işletim sisteminin temel kütüphanelerinden (glibc ≤ 2.28 / Windows sistem DLL'leri) başka bir şeye ihtiyaç duymamalı (Linux'ta x86_64 ve arm64);
- binary boş bir
PATHile (Python yok,opensslyok) çalışmalı; - Linux binary'si temiz AlmaLinux 8/9, Debian 11/12, Ubuntu 20.04/22.04/24.04, openSUSE Leap 15.6 ve Fedora konteynerlerinde çalışmalı.
Linux notları:
chmod +x ser2net-linux-x64; seri portlar genellikledialoutgrubunu gerektirir.- Binary açılışta kendini
$TMPDIR'e (varsayılan/tmp) açar./tmpnoexecile bağlıysaTMPDIR'i öyle olmayan bir klasöre yönlendirin. - Sertifika kontrolleri (TLS üzerinden MQTT, OIDC) için dağıtımın CA paketini, ayarlıysa
SSL_CERT_FILE'ı kullanır.
ser2net --about sürümleri (Python, OpenSSL, bileşenler) gösterir; hata bildirirken
ekleyin. ser2net --licenses binary'nin içindeki her bileşenin lisans metnini yazar
(sürümlere *.THIRD-PARTY-LICENSES.txt olarak da eklenir).
Kendin derlemek için:
- Windows:
pip install -r requirements.txt -r requirements-optional.txt pyinstaller && pyinstaller ser2net.spec - Linux (eski dağıtımlarda da çalışsın diye eski glibc'li bir konteynerde):
docker run --rm -v "$PWD:/src" -w /src almalinux:8 bash tools/build_standalone_linux.sh
İlk çalıştırmada:
- Konsolda arayüzün hangi IP'den erişileceği sorulur (makine IP'leri veya custom) ve port (varsayılan 8080). Başsız/servis ortamında güvenli varsayılan 127.0.0.1.
- Tarayıcıda açılan adrese gidin; ilk ekranda admin parolasını belirleyin.
- Panodan + Eşleme ekle ile COM/tty seçip IP:port'a eşleyin.
Bind IP'yi sonradan değiştirmek:
python3 ser2net.py --reconfigureBağımlılıklar vendor/wheels/ içinde bulunur; ser2net.py ilk açılışta bunları
./lib'e kurar (pip install --no-index). İnternet gerektirmez. Set, Linux x86_64 ve
Windows x64'te Python 3.10–3.14'ü kapsar; requirements.txt değişince
python3 tools/refresh_wheels.py ile yenilenir (tests/test_vendor_wheels.py denetler).
Opsiyonel özellikleri (MQTT/LDAP/OIDC) offline kaynak kurulumunda etkinleştirmek için
wheel'lerini de indirip kurun: pip download -r requirements-optional.txt -d vendor/wheels
ardından pip install --no-index --find-links vendor/wheels -r requirements-optional.txt.
(Standalone binary bunları zaten içerir.)
docker compose up -d # docker-compose.yml içindeki `devices:` satırını düzenleyin
# veya:
docker build -t ser2net . && docker run -d -p 8080:8080 \
--device /dev/ttyUSB0 --group-add dialout -v ser2net-data:/data ser2netHazır imaj (amd64 + arm64, her sürümde): docker pull ghcr.io/haliskilic/ser2net:latest
(ya da :2.8, :2.8.0); docker-compose.yml bunu kullanır.
Container'da arayüz 0.0.0.0'a bağlanır (SER2NET_BIND_IP / SER2NET_PORT env ile
ayarlanır — başsız ortamda interaktif seçici çalışamaz). Süreç root olarak değil, ser2net
kullanıcısıyla (uid 10001) çalışır; eski (root ile çalışan) imajların yazdığı /data
volume'u ilk açılışta otomatik devralınır, yükseltmede elle bir şey yapmak gerekmez.
İmajda HEALTHCHECK var (ser2net --healthcheck). Ayrıntılar:
docs/DOCKER.md.
- Eşleme ekle: Ad, tür (Serial↔Network / Serial↔Serial), seri port + parametreler, ağ modu (server/client/udp), protokol, bind/remote IP:port, erişim kuralları.
- Başlat/Durdur/Yeniden başlat/Kopyala/Sil: her satırda.
- Log: eşlemenin geçmiş logu (en yeni üstte, restart sonrası kalıcı).
- Monitor: tarayıcıda canlı seri terminal (xterm.js); ağ eşlemelerinde cihaza yazılabilir.
- Ayarlar: parola değiştir, web arayüzü erişimi (giriş zorunlu / parolasız rol), admin TLS (yol ver veya self-signed üret), REST API token'ı üret/iptal et, mapping yedek al/yükle (JSON), durum.
- /metrics: Prometheus formatında metrikler (kimlik doğrulamalı).
Tarayıcı arayüzünün yanında, otomasyon için JSON bir API (/api/v1). Kimlik doğrulama
Authorization: Bearer <token> ile yapılır; token'ı Ayarlar → REST API token'dan
üretin (yalnızca bir kez gösterilir). Tam tanım: GET /api/v1/openapi.json.
TOKEN="s2n_..." # Ayarlar'dan üretilen token
# tüm eşlemeler (config + canlı durum)
curl -H "Authorization: Bearer $TOKEN" http://HOST:8080/api/v1/mappings
# eşleme oluştur
curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name":"PLC-1","kind":"net","serial":{"port":"/dev/ttyUSB0","baudrate":9600},
"network":{"mode":"server","bind_ip":"0.0.0.0","port":4001}}' \
http://HOST:8080/api/v1/mappings
# başlat / durdur / yeniden başlat
curl -X POST -H "Authorization: Bearer $TOKEN" http://HOST:8080/api/v1/mappings/<id>/stopUç noktalar: GET/POST /mappings, GET/PUT/DELETE /mappings/{id},
POST /mappings/{id}/{start|stop|restart}, GET /status, GET /ports,
GET /health (kimlik doğrulamasız), GET /openapi.json.
Arayüz varsayılan olarak parola korumalı. Varsayılan bind 127.0.0.1; ağa açmak
için açılışta IP seçimi gerekir ve TLS'siz ağ bind'inde uyarı verilir. LAN'a açılan
kurulumlarda TLS (admin_ui.tls_*) ve eşleme bazlı allowed_client_ips önerilir.
Raw TCP düz-metindir — güvensiz ağlarda dikkat. Allowed/priority listesinde tek başına
0.0.0.0/:: "herkes" demektir.
Parolasız erişim (isteğe bağlı): yalnızca güvenilir ağlar için, bir admin
Ayarlar → Web arayüzü erişimi'nden giriş zorunluluğunu kapatıp ziyaretçilere bir rol
(viewer salt-okunur / operator / admin) verebilir. Oturum açmak yine mümkündür
(kendi rolünüz geçerli olur), RBAC ve CSRF aynen uygulanır, REST API her zaman
token ister. Parolasız erişim yalnızca arayüze IP adresi, localhost veya makinenin
kendi adıyla gelindiğinde geçerlidir — başka bir alan adıyla (ör. DNS-rebinding yapan
kötü niyetli bir sayfa) gelen istekler giriş ekranına yönlendirilir. Ters proxy arkasında
proxy özgün adı X-Forwarded-Host ile iletmelidir (iletmiyorsa girişi açık tutun).
LAN cluster'daki diğer düğümler yalnızca oturum açınca görünür ve yönetilebilir;
erişim kapatılınca/rol değişince açık konsollar da kapanır. Açıkken arayüzde uyarı
gösterilir ve açılışta loga yazılır.
- Docker: resmi
Dockerfile+docker-compose.yml(bkz. yukarısı vedocs/DOCKER.md) —restart: unless-stopped,/datavolume. - Linux (systemd):
systemd/ser2net.service— ayrı, yetkisiz bir kullanıcı,SupplementaryGroups=dialout,Restart=on-failure, sertleştirme direktifleri. root ile çalıştırmayın. - Windows: ek bir program gerekmez. Yönetici olarak açılmış bir komut isteminde:
Servis açılışta başlar, kullanıcı oturumu gerektirmez (LocalSystem), çökerse ya da hatayla çıkarsa 5 sn sonra yeniden başlar. İlk kurulumda arayüz adresi konsolda sorulur. Kaldırmak:
ser2net-windows-x64.exe --install-service --data-dir C:\ser2net\data
--uninstall-service(veri klasörü kalır). Farklı veri klasörleriyle birden fazla örnek için--service-name. Durdur/başlat:sc stop ser2net/sc start ser2netya da Hizmetler (services.msc).
Tüm durum veri dizininde (varsayılan data/). Veri dizini yalnızca sahibe açık
kilitlenir (POSIX 0700; Windows'ta icacls ile sahip/SYSTEM/Administrators), böylece
içindeki dosyalar başka kullanıcılarca okunamaz:
config.json— admin IP, parola hash'i, tüm eşlemeler (atomik yazım).backups/— her değişiklikten önceconfig.json'un önceki hâli (son 50). Ayarlar → Configuration backups'tan indirilir ya da geri yüklenir; geri yükleme de geri alınabilir.all.log— global etkinlik (boyutla döner);audit.log— girişler ve config değişiklikleri, kim/nereden/ne (döner). Ayarlar → Audit log'da aranabilir, CSV olarak indirilebilir.logs/<id>.log— eşleme başına geçmiş (saatlik bakım: >15 gün veya >100MB kırpılır).traces/<id>-<ad>— eşlemenin trafik kaydı (trace). Trace dosyaları yalnızca burada tutulur; boyut sınırına gelince döner (varsayılan 10 MB × 3 eski dosya). v2.7'deki tam yollar dosya adına indirgenir ve açılışta log'a yazılır.tls/— self-signed üretilirse sertifika/anahtar.
config.json + all.log silinince sistem sıfırdan başlar (orphan loglar otomatik
temizlenir; backups/ kendiliğinden geri yüklenmez, isterseniz onu da silin).
Oturum süresi: Ayarlar → Web arayüzü erişimi → Oturum süresi (dakika) (varsayılan 8 saat). İçe aktarma: önce önizleme gösterilir; birleştir (aynı adlı eşlemeleri güncelle, yenileri ekle) ya da hepsini değiştir seçilir.
Birleşik test koşucusu — taşınabilir (donanımsız, socat'sız) takım her işletim sisteminde çalışır:
python3 tests/run_all.py # taşınabilir takım (Windows + Linux)
python3 tests/run_all.py --socat # + socat tabanlı veri-yolu testleri (Linux)
python3 tests/run_all.py -v # geçen testlerin çıktısını da göstersocat (Linux) ile sanal seri portlar kullanılır; donanım gerekmez. Tek tek de
çalıştırılabilir, örn. python3 tests/test_rest_api.py. CI (GitHub Actions) her pull
request'te ruff, mypy, pip-audit, çevrimdışı wheel kontrolü, tam test matrisi
(ubuntu/windows × Python 3.10–3.13) ve coverage koşar
(python3 tests/coverage_run.py: testlerin başlattığı sunucular da ölçülür). Geliştirme
ortamı ve kurallar için CONTRIBUTING.md.
tests/test_dead_peer.py ölü bağlantı tespitini gerçek yarı-açık (half-open) TCP
bağlantılarıyla da sınar: SER2NET_BLACKHOLE_TESTS=1 verildiğinde bir loopback
akışının paketlerini düşürür (Linux: root/şifresiz sudo + iptables; Windows: Yönetici
pip install pydivert). Güvenlik duvarını değiştirdiği için yerelde isteğe bağlıdır (Linux'ta tek kullanımlık bir network namespace içinde çalıştırmak önerilir); CI'da her iki işletim sisteminde de her zaman koşar.
tests/test_ui_layout.py web arayüzünü gerçek bir tarayıcıda (Playwright + Chromium)
çok uzun eşleme adları ve cihaz yollarıyla, masaüstünden telefona farklı genişliklerde
açar. Panelinin dışına taşan bir şey olursa başarısız olur
(pip install playwright && python -m playwright install chromium; CI'da ui işi).
tests/test_standalone.py derlenmiş bir binary'yi sınar
(SER2NET_STANDALONE_BIN=dist/ser2net). CI'da bunu standalone.yml workflow'u yapar;
her sürüm de aynı workflow'dan geçer.
ser2net çift lisanslıdır:
- Açık kaynak — GNU AGPL-3.0: kullanmak, incelemek, değiştirmek ve paylaşmak serbesttir. Dağıtırsan ya da değiştirilmiş bir sürümü ağ servisi olarak çalıştırırsan, tüm kaynak kodunu AGPL-3.0 ile sunman gerekir.
- Ticari lisans: AGPL-3.0 yükümlülükleri olmadan kapalı kaynak ürün, cihaz ya da SaaS için — bkz. COMMERCIAL_LICENSE.md veya [email protected].
Birlikte gelen üçüncü-taraf bileşenler kendi lisanslarını korur — bkz. THIRD-PARTY-NOTICES.md;
binary'deki tam metinler: ser2net --licenses. LGPL lisanslı ldap3 binary'de kaynak
dosyaları olarak durur; SER2NET_LIB_OVERRIDE=<klasör> ile başka bir sürümü yüklenebilir.
Güvenlik açığı bildirimi: SECURITY.md.
Katkılar memnuniyetle karşılanır! İlk pull request'inde tek seferlik bir Katkıcı Lisans Sözleşmesi (CLA) imzalaman istenir; katkının telif hakkı sende kalır.
Telif © 2026 Halis KILIÇ.
ser2net işine yarıyorsa GitHub Sponsors üzerinden destek olmayı ❤️ düşünebilirsin — sponsorluklar test donanımını ve projenin bakımına ayrılan zamanı karşılıyor.
GitHub hesabın yoksa bir kahve ısmarlayabilirsin ☕.
Yol haritası: ROADMAP.md · English: README.en.md





