Remote bir IP'nin internetinin olup olmadığını kontrol etmek

Başlatan ibocakir, 18 Nisan 2018, 15:45:11

ibocakir

Merhabalar,

Şöyle bir derdim var. Bir 3G router uzakta static IP almış vaziyette duruyor. Bu cihazın internetinin olup olmadığını python / shell script tarzı bir şekilde otomatik olarak almak istiyorum.

Şöyleki, cihazı pinglediğim zaman bana cevap geliyorsa diyorumki evet bu cihazın internete çıkıyor. Fakat bazı makinelerin önlerindeki firewall'lardan dolayı interneti olmasına rağmen pinge cevap vermiyor. Bu durumda cihazı pingleyerek bunu tespit etmem mümkün görülmüyor.

Araştırdığım kadarıyla bir cihazı pinglemek için ICMP paketleri gönderiliyormuş, firewall da aslında bu paketleri limitliyormuş. Fakat pinglemek sadce ICMP ile de olmuyormuş, SYN/ACK paketleriyle de ping atılabiliyormuş. Bunun için de

nping --tcp hostname

nping kullanılabilirmiş. Bununla çok güzel tespit edebiliyorum. Ubuntu terminale bunu girince icmp bloklayan firewalları da pingleyebiliyorum. Fakat bunun bir shell scripte nasıl dökebilirim ?

Normal attığında nasıl algılıyorsun diye sorabilirsiniz, şöyle bir script işimi görüyor:
ping -c 5 5.26.91.132 ; echo $?

-c dediğimde 5 tane paket gönderirse, hepsi gönderse bash çıktısı 0 oluyor.

Bu durumda internetin olup olmadığını sadece pinglemekle değil açık port var mı diye de bakabiliriz diye düşünelim. Netcat ile test yaptığımda da istediğimiz sonuca ulaşamadım.

nc -zv hostname portnumber

Sonuç olarak remote bir IP'nin internetini kontrol etmek istiyorum. Bunu en jenerik nasıl yapabilirim ?

foseydon

firewall pingi blokluyorsa birşey yapamazsın. ama normalde o cihaza dışarıdan bağlanılabiliyorsa, misal cihaza telnet çekebiliyorsan bu port 23 ün açık olduğu anlamına gelir bu durumda ping çekmek yerine telnet ile bağlantı denersin, cevap gelmiyorsa cihaz aktif değildir.

ibocakir

Hocam porta bakmak şart mı? Mesela oradaki firewall'ın web arayüzü gibi bir portunun açık olması kesin olarak internete çıktığını garanti eder mi ? Mesele cihazın web servisi çalışmayı durdurmuş olabilir mi?
Aynı şekilde telnet ve ya ssh portları için de sorum geçerli.

foseydon

senin ulaşmaya çalıştığın cihazın telnet portunun açık olması gerekiyorsa, bu durumda firewall'a istisna eklenmiş olması gerekiyor. Misal bu cihaz web sunucusudur, cihazın 80 portu açık olmalı. Sen bu porta istekte bulunursan, firewall senin buradan geçmene izin verir. Ama bağlantın yine firewall üzerinden olur. bağlantı kuruluyorsa da, cihazın internete bağlanmış olduğunu teyit etmiş olursun. burada asıl mesele, senin cihazın bu tarz dışarıya çıkan portu var mı? bunu öğrenmen lazım en başta.

memoliz188

Merhaba güncel portları sorgulaya bilirsiniz bunun için bir çok teknik var en basiti aşağıdaki likteki siteden portları kontrol edebilirsin.

https://ip-adresim.net/araclar/acik-portlar

ibocakir

Alıntı yapılan: foseydon - 18 Nisan 2018, 17:29:26senin ulaşmaya çalıştığın cihazın telnet portunun açık olması gerekiyorsa, bu durumda firewall'a istisna eklenmiş olması gerekiyor. Misal bu cihaz web sunucusudur, cihazın 80 portu açık olmalı. Sen bu porta istekte bulunursan, firewall senin buradan geçmene izin verir. Ama bağlantın yine firewall üzerinden olur. bağlantı kuruluyorsa da, cihazın internete bağlanmış olduğunu teyit etmiş olursun. burada asıl mesele, senin cihazın bu tarz dışarıya çıkan portu var mı? bunu öğrenmen lazım en başta.

Hocam tam sorduğum soruya yanıt vermediniz gibi ya da ben anlamadım. Misal bu cihaz web sunucusudur dediniz ya, bu web sunucusu beklenmedik bir sebepten çalışmayı durdurmuş olsa bu durumda cihazın 80 portu kapanacaktır. Dışarıdan 80 portuna baksam kapalı olacağından internetin olup olmadığına dair bilgiyi yine edinemiyorum.

@memoliz188 hocam teşekkür ederim. Zaten netcat ile istediğim hostun istediğim portuna bakabiliyorum yukarıda belirttiğim gibi.

foseydon

hocam sen 80 numaralı porta bir request yaptığın zaman oradan sana bir cevap gelecek, bu ftp'te olabilir, telnet'te olabilir. cevap gelmiyorsa cihazda sorun var diyebilirsin, cevap geliyorsa zaten bağlantı vardır ve bu da cihazın internete bağlı olduğu anlamına gelir(local network üzerinden bağlantı kurmadığını varsayarsak).

öteki soruna cevap vermedim, çünkü konu ile çok alakalı gelmedi. karışıklık olmasın dedim. neyse anlatayım, firewall cihazının kullanıcı arayüzüne muhtemelen sen dışardan ulaşamazsın zaten. farzedelim ki ulaşabilirsun, bu firewall hizmeti veren cihaza bağlanabiliyorsun demek. bundan daha ötesini garanti etmez. misal, senin ulaşmak istediğin cihaz herhangi bir sebepten down olduğu halde firewall hala çalışıyor olabilir. Fakat, firewall'un veya router'ın admin arayüzüne girebiliyorsan, oradan bakabilirsin hangi cihazlara hizmet verdiğine ve trafiklerini inceleyebilirsin buradan senin cihazın bağlantısı var mı kontrol edebilirsin. ama bunu da yapabileceğini düşünmüyorum, erişimin yoktur. olsa bile manuel olarak kontrol etmen gerekecek.

edit:

aklıma gelmişken, TCP bağlantısı yapabildiğin bir programla(misal hercules) IP kısmına www.google.com yaz porta 80 ver ve bağlan, birde saçma bir adres yaz www.asdas4d09237589.com gibi yine porta 80 ver bağlanmaya çalış, sonuca bir bak dediğimi anlayacaksın.

ibocakir

Alıntı yapılan: foseydon - 18 Nisan 2018, 18:30:00hocam sen 80 numaralı porta bir request yaptığın zaman oradan sana bir cevap gelecek, bu ftp'te olabilir, telnet'te olabilir. cevap gelmiyorsa cihazda sorun var diyebilirsin, cevap geliyorsa zaten bağlantı vardır ve bu da cihazın internete bağlı olduğu anlamına gelir(local network üzerinden bağlantı kurmadığını varsayarsak).

Tamamdır hocam çok teşekkür ederim şimdi anladım. Ben 80 portuna atılan sorguya sadece oradaki server cevap veriyor sanıyordum.

foseydon

Alıntı yapılan: ibocakir - 18 Nisan 2018, 18:43:10Tamamdır hocam çok teşekkür ederim şimdi anladım. Ben 80 portuna atılan sorguya sadece oradaki server cevap veriyor sanıyordum.

cevap vermiyor, fakat izin veriyor. site bekçisi gibi kapıda duruyor, zaten bu tarz cihazların ortak adı "gateway" olarak geçer. dışarıdan bir istek geldiği zaman, isteğin uygun olup olmadığına bakar, uygunsa ilgili cihaza cevap vermek üzere yönlendirir. cevabı ilgili cihaz verir ve cevap yine aynı kapıdan çıkarak sana gelir. bu tarz sistemlerde gereksiz olan herşey, genellikle,  güvenlik açığı ve ekstra trafik oluşturmaması için bloklanır.

ibocakir

Şöyle bir uygulama yaptım. Bir python scripti ile nping komut çıktısındaki dönen ping sayısına baktım. substring ile elde ettim. Bu nping komutu çıktısı:

Starting Nping 0.7.01 ( https://nmap.org/nping ) at 2018-04-19 16:10 +03
SENT (0.0015s) Starting TCP Handshake > 149.13.82.XX:80
RECV (0.0668s) Handshake with 149.13.82.XX:80 completed
SENT (1.0040s) Starting TCP Handshake > 149.13.82.XX:80
RECV (1.0701s) Handshake with 149.13.82.XX:80 completed
SENT (2.0063s) Starting TCP Handshake > 149.13.82.XX:80
RECV (2.0703s) Handshake with 149.13.82.XX:80 completed
SENT (3.0084s) Starting TCP Handshake > 149.13.82.XX:80
RECV (3.0808s) Handshake with 149.13.82.XX:80 completed
SENT (4.0110s) Starting TCP Handshake > 149.13.82.XX:80
RECV (4.0884s) Handshake with 149.13.82.XX:80 completed
 
Max rtt: 77.381ms | Min rtt: 64.023ms | Avg rtt: 69.045ms
TCP connection attempts: 5 | Successful connections: 5 | Failed: 0 (0.00%)
Nping done: 1 IP address pinged in 4.09 seconds

Bu da python

import os

str1 = os.popen("echo password | sudo -S nping --tcp-connect 149.13.82.XX").read()

str2 = "Successful connections:"

index = str1.find(str2)

print str1[int(index)+24:int(index)+25]

Output : 5 ise ok(toplam 5 adet sorgu atıyor), 0 ise fail.

Sizce mantıklı mı ?

mehmet

Bu işinize yarar mı?

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------------
# mehmet
# 19 Nisan 2018 17:20
# İlgili hostçalışıyor mu/bağlı mı görüyoruz.
# Ya da biz internete bağlı mıyız?
# google.com adresi kontrol ediliyor. 
#-------------------------------------------------------------------------------
import requests
import re

def bagliMi():
    try:
        cevap = requests.get("http://www.isitdownrightnow.com/google.com.html")
        ipAdresim = re.compile("is UP").search(cevap.text).group()
        if ipAdresim == "is UP":
            return "Bağlı."
    except:
        pass
    return "Bağlı değil."

adres = bagliMi()
print(adres)
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

ibocakir

@mehmet hocam teşekkür ederim fakat siz direk http request atıyorsunuz. Ben direk bir remote IP'yi kontrol etmek istiyorum.

mehmet

O halde ilgili ip bir porttan cevap
vermesi gerekmez mi?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

ibocakir

Hocam ya ben birşeyi çok yanlış biliyorum, ya da derdimi anlatamıyorum.

Bir Gateway düşünelim. WAN IP'si 10.20.30.40 olsun. Bu Remote IP'nin local ağında da 192.168.1.10'da  bir web servis çalışıyor olsun. Yani bu cihazın 80 portu açık, gelen sorgulara cevap veriyor. Ve de bu 192.168.1.10'daki cihazın 80 portu gatewayin 80 portuna yönlendirilmiş olsun.

Siz diyorsunuzki ben dışarıdan 10.20.30.40'ın 80 portuna sorgu attığım zaman bana cevap dönerse bil ki 10.20.30.40'ın interneti vardır.

Ben de diyorumki 192.168.1.10'da çalışan cihazın web servisi dursa, kendi local ağında da 80 portu kapansa, ben de dışarıdan 10.20.30.40'ın 80 portu açık mı diye kontrol etsem bana kapalı diyecek. Sonra da kapalıysa internet yoktur desek yanlış olmuyor mu?

Burada sadece 192.168.1.10'da çalışan cihazın 80 portunu örnek verdim. Aynı durum gateway'in kendisinde de olabilir. Gateway'in IP'si 192.168.1.1 olsun. Bunun da üzerinde web servis çalışıyor olsun. Yukarıda bahsettiğim örnek birebir bunun için de geçerli.

Yani demem o ki bir remote IP'nin herhangi bir portuna bakmakla internetinin olup olmadığını anlayamayız diyorum. Yanlış düşünüyor/biliyor olabilirim.

foseydon

hocam sen cihazı pingleyemediğin sürece emin olamazsın. birde traceroute var, cihazın ip'sine traceroute çekebilirsin o şekilde ulaşabiliyor musun görebilirsin(firewall bloklamazsa). bunun haricinde yaptığımız şeyler, kesin olmayan ama işe yarayabilecek şeyler. bu da, yine senin cihaz ve oradakip setup ile alakalı bilgine bakıyor. Misal, cihaza telnet çekiliyor mu diye bakabilirsin ama cihaz telnet hizmeti veriyorsa bu bir işine yaramaz. senin cihazın telnet hizmeti verdiğini biliyor olman gerekiyor, bu durumda telnet çektiğin zaman cevap alamıyorsan bu ya cihaz o an telnet hizmeti veremiyor demek. Burada gizli bir varsayım yapıyoruz, cihaz eğer çalışıyorsa telnet hizmeti verebiliyor olmalı ve ben ona telnet üstünden bağlanabiliyorsam internete bağlıdır. sistem çalışıyor ve internete bağlı durumda olabilir, fakat bir sebepten telnet servisi başlamamış olabilir. bu durumda yanlış sonuca ulaşırsın. ama cihazın çalışır ve internete bağlı olduğu halde, telnet hizmetinin başlamamış olma ihtimali nedir?? so bu. biz burda asıl yoldan gidemediğimiz için, tali yollara başvuruyoruz elbette istenileni tam karşılamaz ama faydalı olabilir.

Siz diyorsunuzki ben dışarıdan 10.20.30.40'ın 80 portuna sorgu attığım zaman bana cevap dönerse bil ki 10.20.30.40'ın interneti vardır.

Ben de diyorumki 192.168.1.10'da çalışan cihazın web servisi dursa, kendi local ağında da 80 portu kapansa, ben de dışarıdan 10.20.30.40'ın 80 portu açık mı diye kontrol etsem bana kapalı diyecek. Sonra da kapalıysa internet yoktur desek yanlış olmuyor mu?


yukarıda yazdığına da geleyim. firewall o cihazın internete çıkmasına sadece 80 portu üzerinden izin veriyorsa, bu durumda cihaza 80 numaralı porttan sorgu yaptığında cevap vermiyorsa internete çıkamıyor demektir. belki başka portlar üzerinden çıkabiliyordur, ama senin bu portları biliyor olman gerekiyor. şayet sadece 80 üzerinden çıktığını biliyorsan, bu durumda kesin sonuca ulaşabilirsin.