Android 'te local ip öğrenme_?

import socket
hostname  = socket.gethostname()
ipadres = socket.gethostbyname(hostname)
print("hostname: " + hostname)
print("ip:" + ipadres)

Bu kodlar ile local ip ve hostname öğreniliyor.
pc ile modeme bağlanıp çalıştırdığımda sorun yok.
ama android telefon ile modeme bağlanıp pydroid programıyla çalıştırdığımda localhost ip(127.0.0.1) 'sini veriyor bildiğim kadarıyla modem telefona ayrı bir static ip atıyor bu static ip android telefonda nasıl öğrenilebilir_?

1 Beğeni

Öncelikle merhabalar

import socket
socket.gethostbyname(socket.gethostname())

bu kod linuxda /etc/hosts dosyasındaki ip yi verir yani demek istediğim şuki benim host dosyamı okuyalım

127.0.1.1 emre08

yazıyor yani ben emre08 verdiğim zaman bana bu karşılığı verecektir

ben localhostun ip 'sini öğrenmek istemiyorum zaten localhost genelde 127.0.0.1 dir. bana static ip lazım windowsta aynı kodlarlan static ip sonucunu gösteriyor 127.0.0.1 değil

Demek istediğimi anlıyamadınız herhalde bakın bu kod /etc/host dosyasında ne varsa onu verir yani size direk ingilizce dökümanında yazanı atayım.

The gethostbyname function retrieves host information corresponding to a host name from a host database.

buradaki host database windowsda neresidir bilmiyorum ama linuxde host database /etc/hosts dur

import socket

def get_ip():
    ip_address = '';
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        s.connect(("8.8.8.8",80))
        ip_address = s.getsockname()[0]
        s.close()
        return ip_address
        
    except:
       
        s.close()
        return "Something went wrong."
        
    

print(get_ip())

Buyrun en sağlıklı yöntem :smiley:

3 Beğeni

Telefon da olsa modem statik bir IP vermez, dinamik verir. Tabii sizin durumunuzda bu pek fark edecek bir ayrıntı değil.

1 Beğeni

Yalnız bir sorum var local ip ler de mi statik veriliyor ? Ben , bir ayar yapılmadığı sürece , değişmediğini biliyordum .

Hayır yanlış biliyorsunuz. Modemi kapatıp açtığınızda dış ip’niz değişir, local ip’niz değil. Buna dinamik ip denir. Serverlarda statik ip bulunur .Hizmet verdiği dış ip 'si değişmez. Ve hayır local ip’ler dış ağa bağlantı kurmayı sağlamaz. Adı üstünde local.

Evet doğru söylüyorsunuz dış ip değişiyor ama bu her internet için geçer li değil ama benim bir kaç okuduğum konuda local ip de değişiyor deniyor.

İç (local) IP de değişir bildiğim kadarıyla. Hatta aynı kalması için ağ ayarlarında belirli bir IP veririz, iç ağda sen şu IP’yi al diye.

1 Beğeni

Yani ayarlara girldiğinde windowsda otomatik ip ver ayarı açık ama benim ne telde ne bilgisayarda ip değişmiyor. Neyden kaynaklı acaba :man_shrugging: ?

Aynen hocam bende bunu demeye çalıştım teşekkür ederim açıkladığınız için local ip de değişiyor :slight_smile:

s.connect(("8.8.8.8",80)) burada ne yapılmakta açıklayabilirmisiniz_?

Oluşturduğumuz soket ile bir bağlantı kurmaya çalıştık . Ve kurulan bağlantıda hangi ip adresi kullanmaya çalıştığımızı bulduk. Orada 8.8.8.8.8 yerine atıyorum www.google.com yazsaydın gene aynı sonucu alacaktın .

IPv4’te varsayilan IP edinme islemi DHCP. Bilgisayar da telefon da birer DHCP istemcisi kullanarak agdaki DHCP sunucularindan (modem) IP aliyor. Ayni IP gelmesinin birkac olasi sebebi var:

  1. (DHCP kullanilmiyor ve statik IP ayarlanmis)
  2. DHCP istemcisi kendine verilen son IP’yi hatirlayip sunucudan onu istiyor
  3. DHCP sunucusu istemciye verdigi son IP’yi hatirlayip onu veriyor
  4. DHCP sunucusu istemciye belirli (sabit) bir IP adresi vermeye ayarlanmis
  5. Şans
2 Beğeni

socket ile public(genel) ip nasıl öğrenilir_?

1 Beğeni

Socket kütüohanesi ile nasıl olur bilmem ama şöyle bulabilirsiniz


""" Easy IP Getter """
import json
import urllib.request
info = json.loads(urllib.request.urlopen("http://jsonip.com").read())
ip = info["ip"]
print( ip)


Python 3

2 Beğeni

socket kütüphanesi ile şu şekilde yapabilirsiniz:

import socket

def get_public_ip():
    s=socket.socket()
    s.connect(("bot.whatismyipaddress.com",80))
    host = socket.gethostbyname(socket.gethostname()).encode()
    s.send(b"GET / HTTP/1.1\r\nHost: " + host + b"\r\n\r\n")
    ip=s.recv(2000).split(b"\n")[-1].decode()
    return ip
1 Beğeni

bot.whatismyipaddress.com HTML donduruyor* ve bir sirketin urunu.

https://www.ipify.org/ tavsiye ederim (api.ipify.org)

*: icinde \n de yok bu arada, splite gerek yok.