{"id":14989902,"url":"https://github.com/beyza-ozben/malicious_url","last_synced_at":"2026-01-05T19:14:31.046Z","repository":{"id":253849103,"uuid":"842366392","full_name":"beyza-ozben/malicious_url","owner":"beyza-ozben","description":"Malicious-URL-Detection","archived":false,"fork":false,"pushed_at":"2024-09-11T13:25:36.000Z","size":6943,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-04T13:37:02.032Z","etag":null,"topics":["api-rest","curl","flask","machine-learning"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/beyza-ozben.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-14T07:51:44.000Z","updated_at":"2024-09-17T17:58:58.000Z","dependencies_parsed_at":"2024-09-05T13:14:16.091Z","dependency_job_id":"3ba2a456-5162-40f8-bf27-4a1605926d6c","html_url":"https://github.com/beyza-ozben/malicious_url","commit_stats":{"total_commits":34,"total_committers":2,"mean_commits":17.0,"dds":"0.11764705882352944","last_synced_commit":"4ad33ed6377ba2bdeeec949f9adfb7d839ea5d5b"},"previous_names":["beyza-ozben/case"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beyza-ozben%2Fmalicious_url","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beyza-ozben%2Fmalicious_url/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beyza-ozben%2Fmalicious_url/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beyza-ozben%2Fmalicious_url/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/beyza-ozben","download_url":"https://codeload.github.com/beyza-ozben/malicious_url/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239854435,"owners_count":19708080,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","curl","flask","machine-learning"],"created_at":"2024-09-24T14:19:06.830Z","updated_at":"2026-01-05T19:14:26.024Z","avatar_url":"https://github.com/beyza-ozben.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Zararlı URL Tespiti \n\n### _Proje Amacı: Bir URL'nin oltalama olup olmadığını tespit ederek ilk kullanıcının doğru kaynaklara yönlendirilmesini sağlamak._\n\n *\"Bu projede Python yazılım dili kullanıldı.\"*\n\n*Proje Akışı:*\n1. USOM'un web sitesinde yayımladığı \"Zararlı Bağlantılar\" isimli API'lerden \"Banking Phishing\" urllerini çekmek. (Ya da elinde var olan veri setini kullanmak.)\n2. URL'leri düzenlemek ve etiketleyerek eğitime hazır dataset haline getirmek.\n3. Machine Learning için bir model oluşturmak.\n4. Oluşturduğun modeli eğitmek için Python betiği oluşturmak.\n5. Flask ile API kurmak.\n\n----------------------------------------\n\n\u003c--\u003e Elindeki dataset etiketleme işlemi için \"label.py\" dosyasını kullanarak \"banking_phishing.txt\" adında bir .txt dosyası oluşturuyoruz. Aşağıdaki kod bloğundan da ilgili scripte ulaşabilirsin. \n\n```\nwith open('phishing.txt', 'r') as file: #dataset .txt olarak kayıtlı olduğu için belgenin açılması ve satır satır okunması gerekiyor.\n    urls = file.readlines()\n\netiketli_veriler = [f\"{url.strip()} ,phishing\\n\" for url in urls] #Etiketleme yapıp bunu diziye kaydet.\n\n#Dikkat! Eğer veri setinin satırları temizlenmediyse önce bunu kullan:\n#cleaned_data = [line.strip() for line in data if line.strip() != '']\n\nwith open('banking_phishing.txt', 'w') as file: #Hazırlanan verileri yeni bir .txt'ye kaydet.\n    file.writelines(etiketli_veriler)\n\n```\n\n\u003c--\u003e Pandas kütüphanesi kullandığımız için \".csv\" uzantılı datasete ihtiyaç var. Bunun için elimizdeki .txt uzantılı dataseti \"pandas_framework.py\" ile .csv dosyasına dönüştürüyoruz. İlgili python bloğuyla verileri çekip şununla:\n\n```\n# DataFrame'i .csv dosyasına kaydet\ndata.to_csv('mix_labels.csv', index=False)\n```\ndosyanı kaydettirmiş olacaksın.\n\n#### \u003c--\u003e Şimdi sıra geldi modeli oluşturmaya! \n    \n\u003c-----\u003e _\"machine_learning.py\"_ dosyasındaki kod bloğu ile eğiteceğin modele dair bilgileri düzenleyerek ekle ve eğittin modelin adı ne olsun istiyorsan _\"model.save('my_model.keras')\"_ satırında 'my_model.keras' kısmına kendi isimlendirmeni yaz!\n    \n\u003e![Image-1](https://github.com/user-attachments/assets/10c1a52a-e1e4-4c3c-b146-36174082443d)\n    \n#### !!Dikkat!! \".csv dosyandaki etiketlemen nasılsa tam olarak öyle yazmalısın, eğer (space) varsa öyle yazdığından emin ol.\"\n\n#### \u003c--\u003e Ve son aşama modelini test etmek! \n\n---\u003e \"test_model.py\" dosyasındaki kod bloğunu localdeki bilgilerine göre güncelleyerek ve \"test_domain = '....' \" kısmına denemek istediğin URL'yi girerek modelini test edebilirsin. (Bu noktada space olduğuna dikkat et!)\n\n\u003e![Image-2](https://github.com/user-attachments/assets/599a1492-a191-432f-9ebb-43d9bbe72f73)\n\n(Modelin cevabı 0-1 arasında bir double değer olacak.)\n\n### Tebrikler!! Model başarıyla eğitildi!\n\n\u003e![Image-3](https://github.com/user-attachments/assets/8249171b-aa27-4611-a1c5-eb01d955dba5)\n\n----------------------------------------\n\n---\u003e Modelin çalıştığından da emin olduğumuza göre şimdi API kurarak localden istek atmayı sağlayalım!\n\n---\u003e Bunun için önce Flask ile bir rest ayarlayacaksın, bu noktada \"f_restapi.py\" scripti seni yönlendirecek.\n```\nmodel = keras.models.load_model('new_model.keras') #Modeline yaptığın isimlendirmeye göre ('...') kısmına belgenin adını yaz.\n...\ndata = pd.read_csv('mix_labels.csv') #Datasetin bulunduğu .csv dosyasının adını kişisel olarak değiştebilirsin.\n```\n----------------------------------------\n\nDosyada gerekli düzenlemeleri yaptıktan sonra:\n\n\u003e1. Datasetinin bulunduğu .csv\n\u003e2. Eğitilmiş modelin bulunduğu .keras\n\u003e3. Flask ile yazdığımız API f_restapi.py \n\n... bu üç dosyanın aynı çalışma dizininde olduğundan emin ol! (Aynı dizinde olmazsa hata alırsın)\n\n\u003c---\u003e Şimdi de API'yi çalıştırıp *(C:\\Users\\BEYZANUR\\url-detection\\case\u003e python f_restapi.py)* curl ile istek atacağız.\n\nPython scriptini çalıştırınca böyle bir çıktı alacaksın:\n\n![image-4](https://github.com/user-attachments/assets/e44a5121-e1fa-474c-8342-a7ee5217c518)\n\nTerminal \u0026 CMD çalışır durumdayken bir tane daha aç ve bulunduğun aynı dizine gir. Ardından,\n```\ncurl -X POST http://127.0.0.1:5000/test -H \"Content-Type: application/json\" -d \"{\\\"domain\\\":\\\"testedeceğinveri\\\"}\"\n#API'ye ulaşabileceğimiz iki yöntemden birisi curl diğeri postman'dir. Burada biz curl ile POST atmayı kullandık.\n```\nKomutunu çalıştırınca çıktın bu olacak: (vsCode IDE'sinde çalışma hatası alabilirsin, CMD(komut istemi) kullanmanı tavsiye ederim.)\n\n![image-5](https://github.com/user-attachments/assets/fa517a27-9a5b-486b-8933-21c824c9aa06)\n\n### \u003c---\u003e Projeni dockerize edip container haline getirerek her platformda çalışmasını sağlayabilirsin!\n\n-------------------------------------------\n###  -- Kaynakça --\n\n1. [Zararlı URL dataları](https://www.usom.gov.tr/adres)\n2. [Temel RestAPI](https://medium.com/@ibrahimpuskullu44/flask-kullanarak-python-ile-temel-bir-restful-api-olu%C5%9Fturma-2817b5f1f929)\n3. [Örnek curl'ler](https://gist.github.com/subfuzion/08c5d85437d5d4f00e58)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeyza-ozben%2Fmalicious_url","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbeyza-ozben%2Fmalicious_url","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeyza-ozben%2Fmalicious_url/lists"}