آموزش به دست آوردن آیپی در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش به دست آوردن آیپی در برنامه نویسی اندروید می پردازیم با بررسی که انجام دادیم به طور معمول نمی شود آیپی اصلی کاربر را به دست آورد امروز با استفاده از یک وب سرویس آیپی را به دست میاریم که چندین مزیت دارد که در ادامه به آن ها می پردازیم با ما همراه باشید.
مزیت استفاده از وب سرویس
- به دست آوردن آیپی اصلی : در صورتی که کاربر از فیلترشکن هم استفاده کند ما می توانیم آیپی اصلی کاربر رو به دست بیاریم.
- دسترسی داشتن به کد php برای تغییر اعمالات
ابتدا یک فایل به نام getip.php در هاست خود ایجاد کنید
<?PHP
function getUserIP()
{
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
return $ip;
}
$user_ip = getUserIP();
echo $user_ip;
?>
دوستانی که هاست ندارند می تواند از لینک زیر استفاده کنند.
http://orjinakteb.com/getip.php
در صورتی که به آدرس بالا بروید آیپی شما نمایش داده می شود.
برای اینکه آیپی رو به دست بیارید از کد زیر استفاده کنید.
public static String getHtml(String url) throws IOException {
URLConnection connection = (new URL(url)).openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.connect();
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder html = new StringBuilder();
for (String line; (line = reader.readLine()) != null; ) {
html.append(line);
}
in.close();
return html.toString();
}
ورودی آن باید همان url ی باشد که در بالا قرار دادیم .
قبلش باید این کتاب خانه را اضافه کنید.
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
در صورتی که خطا داشتید از کد زیر استفاده کنید.
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://orjinakteb.com/getip.php");
HttpResponse response = client.execute(request);
String html = "";
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder str = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null)
{
str.append(line);
}
in.close();
html = str.toString();
این آموزش هم به پایان رسید.
موفق و موید باشید.
آموزش برنامه نویسی اندروید |
سلام و تشکر بابت این آموزش.
ببخشید چطور میشه آی پی مربوط به GateWay رو در هنگام اتصال به شبکه موبایل به دست آورد؟
مقدار gateway، مثل آی پی خود موبایل هست. با این تفاوت که رقم آخرش فرق داره.
مثلا اگر آی پی خود دستگاه 100.80.25.137 هست، مقدار GateWay ، برابر با 100.80.25.136 هست.
حالا من آی پی خود دستگاه را میتونم به دست بیارم. اما گیت وی رو نمیتونم.
با تشکر فراوان.
برای اینکه آیپی GateWay رو بگرید کافی است مثل زیر عمل کنید
package ir.programchi.dhcp; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.widget.TextView; import android.net.*; import android.net.wifi.WifiManager; public class dhcpInfo extends Activity { public String s_dns1 ; public String s_dns2; public String s_gateway; public String s_ipAddress; public String s_leaseDuration; public String s_netmask; public String s_serverAddress; TextView info; DhcpInfo d; WifiManager wifii; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); wifii= (WifiManager) getSystemService(Context.WIFI_SERVICE); d=wifii.getDhcpInfo(); s_dns1="DNS 1: "+String.valueOf(d.dns1); s_dns2="DNS 2: "+String.valueOf(d.dns2); s_gateway="Default Gateway: "+String.valueOf(d.gateway); s_ipAddress="IP Address: "+String.valueOf(d.ipAddress); s_leaseDuration="Lease Time: "+String.valueOf(d.leaseDuration); s_netmask="Subnet Mask: "+String.valueOf(d.netmask); s_serverAddress="Server IP: "+String.valueOf(d.serverAddress); } }دسترسی های فراموش نشود.
موفق باشید.
شاید return هر کدام به درستی نباشد برای تبدیل آنها به عدد می توانید از void زیر استفاده کنید.
public String intToIp(int addr) { return ((addr & 0xFF) + "." + ((addr >>>= 8) & 0xFF) + "." + ((addr >>>= 8) & 0xFF) + "." + ((addr >>>= 8) & 0xFF)); }متشکرم از راهنماییتون.
این کد به درستی کار میکنه. اما من میخوام مقدار گیت وی مربوط به شبکه موبایل(یا دیتا) رو به دست بیارم.
مقادیر بالا مربوط به مودم خانگی هستند.
با سپاس.
کد زیر را تست کنید.
try { Process process = Runtime.getRuntime().exec("ipconfig"); try (BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream()))) { String line; while ((line = bufferedReader.readLine()) != null) { if (line.trim().startsWith(DEFAULT_GATEWAY)) { String ipAddress = line.substring(line.indexOf(":") + 1).trim(), routerURL = String.format("http://%s", ipAddress); // opening router setup in browser Desktop.getDesktop().browse(new URI(routerURL)); } System.out.println(line); } } } catch (Exception e) { e.printStackTrace(); } }البته این کد در جاوا تست شده است شاید بعضی از متودها را شناخته نشود.
بله. متاسفانه این قسمت ها را نمیشناسد:
DEFAULT_GATEWAY
Desktop
getDesktop