Alternate for NetworkInterface.getHardwareAddress()? - android

I have used this API to pick the mac address of device,
NetworkInterface.getHardwareAddress()
But this is for API level 9 and later, what should i use to pick the mac address for API level 8? froyo device.
May be this a very simple thing, but i tried googling and couldn't find the answer.

WifiInfo.getMacAddress() has been available since API level 1.
WifiManager wifiMan = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInf = wifiMan.getConnectionInfo();
String macAddr = wifiInf.getMacAddress();
You'll need to add:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
To your manifest

WifiInfo.getMacAddress() always gives you Wi-Fi MAC address although your active interface may be currently cellular. If the intended purpose is to get the associated hardware address (such as from cellular connection), then MAC should be retrieved from rmnet0 interface and so on (if IP/MAC association is required).

Related

Android blacklist wifi bssid

I have a problem banning a specific bssid. I can see there is a class called WifiNative that was in api 19 but not able to access it:https://android.googlesource.com/platform/frameworks/base/+/kitkat-release/wifi/java/android/net/wifi/WifiNative.java
Is there any other way anyone knows of to do this? Maybe via JNI? Any android system libraries that can be used? c,c++?
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
newWifiInfo = wifiManager.getConnectionInfo();
from there you can get the BSSID by doing
newWifiInfo.getBSSID()
then "blacklist" by turning off the wifi via
wifiManager.setWifiEnabled(false)
Also don't forget your permissions
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
If you want more control over your wifi state, you can use the following library to "sniff" your connection and other things
https://github.com/pwittchen/ReactiveNetwork

how to set My Own android Hotspot Device name

I'm not asking about how to create a WIFIConfiguration
that I want to connect to.
But I'm asking how to set my own Device SSID for my own phone?
private WifiManager obWifiManager;
obWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = obWifiManager.getConnectionInfo();
sendMessage(wifiInfo.getSSID());
The above code has no setter method.
Only getter method. Please help!
I then stumbled upon this article. it said the configuration file is located almost there for any linux OS. There is an SSID setting over there!
So i search on that location but found none!
Probably android put it in a different order / place. Any clue?

Scan all wifi devices near the phone

Company http://renewlondon.com/ have the terminal stations that collect all near by mac addresses
Can I via iOS SDK, and Android SDK,do the same thing?
You can access the wifi data using 'WifiManager' and after the scanning the scanresult contain all the data like
BSSID The address of the access point.
SSID The network name.
capabilities Describes the authentication, key management, and encryption schemes supported by the access point.
frequency The frequency in MHz of the channel over which the client is communicating with the access point.
level The detected signal level in dBm.
timestamp Time Synchronization Function (tsf) timestamp in microseconds when this result was last seen.
about the wifi devices.
if you need more related to coding, I think I can help you...
Sample code
WifiManager wManager;
List<ScanResult> wifiList;
wManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
// Inside BroadcastReceiver()
wifiList = wManager.getScanResults();
for (int i=0; i<wifiList.size(); i++){
ScanResult scanresult = wifiList.get(i);
System.out.println("SSID: "+ssid);
System.out.println("RSSI: "+scanresult.level);
System.out.println("Frequency: "+scanresult.frequency);
System.out.println("BSSID: "+scanresult.BSSID);
System.out.println("Capability: "+scanresult.capabilities);
}
Also checkout the BroadcastReceiver().
One way i can think of doing this is making your device as wifi hotspot and use some hidden api to discover devices.You are basically trying to mimic an access point.
Otherwise each device would need some p2p framework on them-either wifi direct on or some other framework like alljoyn or samsung chord which helps in peer to peer discovery

I want to change MAC address of android device?

I am getting MAC address of devices using wifi interface:
WifiManager wifiMan = (WifiManager) this.getSystemService(
Context.WIFI_SERVICE);
WifiInfo wifiInf = wifiMan.getConnectionInfo();
String macAddr = wifiInf.getMacAddress();
Is there any way for retrieve mac address without wifi interface?
Also confirm me Can we able to change MAc address of android devices?
Please confirm me android framework support these things or not?
A MAC address uniquely identifies a network adapter (e.g. WiFi or Bluetooth), so you'll have to access that adapter to retrieve it's MAC address. To get the MAC address of a bluetooth adapter you can use:
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
if (btAdapter != null) {
String mac = btAdapter.getAddress();
}
Note that this code requires the android.permission.BLUETOOTH permission and that your code to get the WiFi adapter's MAC requires the android.permission.ACCESS_WIFI_STATE permission. Also, both codes may not work when the adapter is turned off.
There is this post on MAC spoofing (returning a false MAC address) but spoofing can only be done on rooted phones. If you'll google you'll probably find more info on MAC spoofing.

Can I find the MAC address of my Access point in Android?

Can my Android app find the MAC address of the Wifi access point it is connected to?
The docs for android.net.wifi.WifiInfo getMacAddress() don't provide any details.
See http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getMacAddress().
I'm assuming this is the Mac address of my phone. Can I find the Mac address of the access point?
getBSSID() of WifiInfo class will return MAC address of remote access point.
BSSID explained here.
The following method will return the MAC address of the access point, null if there is no network currently connected.
public String getMacId() {
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
return wifiInfo.getBSSID();
}
Check out the application "Network Info II" from the Android Market. It does show the MAC address, but I'm not sure if this is still the phone's MAC. It also shows the BSSID, which has the same format as a MAC address so perhaps is what you're looking for.
I'm fairly sure that getMacAddress(), is, as you suspected for the Local Device.
If you can get the IP of the router/gateway/accesspoint, then you might be able to use the code in this post: https://web.archive.org/web/20160308014312/http://www.flattermann.net/2011/02/android-howto-find-the-hardware-mac-address-of-a-remote-host/ to do your bidding. Good luck!

Categories

Resources