Fountain Project(http://www.fountainproject.com, 하지만 사이트에 가봐도 현재로서는 뭐 작동하는게 없슴메다)의 부산물. Fountain Project를 하루라도 빨리 번듯하게 뭘 좀 만들어서 공개해야겠다는 마음은 굴뚝같지만, 이것저것 손을 대다 보니 걷잡을 수 없이 작업이 늘어나서 사이트는 그냥 망한채로 하루하루 굴러가고 있다보니... 자기위안 혹은 셀프갈굼(?)의 일환으로 작업의 부산물을 하나 공개해 봅니다.
이 NICInfo는 현재 시스템의 NIC과 NIC에 할당된 MAC/IP/브로드캐스트 IP 등을 알아내기 위한 클래스입니다. Fountain Project는 그 특성상 MAC 주소, 브로드캐스트 주소를 사용하게 되는데 iOS의 경우에는 관련 소스가 잘 정리되어 있질 않더라구요. 끙끙대면서 iOS용 버전을 만들어놓고 보니(사실 예전에 NICInfoSummary ; 아이폰용 네트워크 인터페이스 정보 제공 클래스라는 포스팅을 작성한 적이 있습니다) Python 버전으로도 만들어야 하고 안드로이드 버전으로도 만들어야 하고... 하다보니 플랫폼별로 하나씩 다 만들게 되었네요(...)
사실 Windows Phone 7.5를 타겟으로 만들어놓은 소스도 있는데 - 관심이 있는 분은 아시겠지만 - WP 7.5는 멸망의 길에 들어선 관계로 차후에 제가 WP 8.0 작업을 하게 되면 공개하도록 하겠습니다(;;;)
먼저 각 플랫폼별 링크 갑니다:
- iOS : https://bitbucket.org/kenial/nicinfo
- Android : https://bitbucket.org/kenial/nicinfo_android
- Python : https://bitbucket.org/kenial/netifaces_ya
(Python 버전의 경우에는 pypi.python.org/pypi/netifaces 패키지와 비슷하게 만든답시고 저런 이름을 붙였습니다)
사용법은 iOS 기준으로, 이렇습니다:
// Process NIC information
NICInfoSummary* summary = [[[NICInfoSummary alloc] init] autorelease];
NSArray *nic_array = summary.nicInfos;
for(int i=0; i<nic_array.count; i++)
{
NICInfo* nic_info = [nic_array objectAtIndex:i];
NSLog(@"interface : %@\r\n", nic_info.interfaceName);
if(nic_info.macAddress != nil)
NSLog(@" - MAC : %@\r\n", [nic_info getMacAddressWithSeparator:@"-"]);
// ip can be multiple
if(nic_info.nicIPInfos.count > 0)
{
NSLog(@" - IPv4 :\r\n");
for(int j=0; j<nic_info.nicIPInfos.count; j++)
{
NICIPInfo* ip_info = [nic_info.nicIPInfos objectAtIndex:j];
NSLog(
@" IP : %@\r\n netmask : %@\r\n broadcast : %@\r\n"
, ip_info.ip, ip_info.netmask, ip_info.broadcastIP);
}
}
// ipv6 can be multiple, also.
if(nic_info.nicIPv6Infos.count > 0)
{
NSLog(@" - IPv6 :\r\n");
for(int j=0; j<nic_info.nicIPv6Infos.count; j++)
{
NICIPInfo* ipv6_info = [nic_info.nicIPv6Infos objectAtIndex:j];
NSLog(
@" IP : %@\r\n netmask : %@\r\n broadcast : %@\r\n"
, ipv6_info.ip, ipv6_info.netmask, ipv6_info.broadcastIP);
}
}
}
// What are those connected?
NSLog(@"is3GConnected : %d\r\n", summary.is3GConnected);
NSLog(@"isBluetoothConnected : %d\r\n", summary.isBluetoothConnected);
NSLog(@"isPersonalHotspotActivated : %d\r\n", summary.isPersonalHotspotActivated);
NSLog(@"isWifiConnected : %d\r\n", summary.isWifiConnected);
NSLog(@"isWifiConnectedToNAT : %d\r\n", summary.isWifiConnectedToNAT);
참 쉽죠
NIC의 목록을 얻어오거나, NIC의 IP/MAC/Broadcast IP 주소를 알아내거나, 3G에 접속되었는지, 핫스팟(=테더링)에 연결되어 있는지, NAT에 연결되어 있는지, WIFI에 연결되어 있는지.... 등의 여부도 알아낼 수 있습니다. Android판 NICInfo 클래스도 비슷한 기능을 제공하긴 하지만, 메서드만 있고 내부에는 기능이 구현되지 않은 것도 있긴 합니다. 그건 뭐 알아서(...) IP/MAC/Broadcast IP 주소 알아내는 기능은 일단 잘 동작합니다 -_-;;
참고로, iOS의 WIFI 인터페이스는 'en0'이라는 이름을 갖고 있습니다. 나중에 변경될 가능성도 있을 것 같긴 하지만 일단 아직까지는 애플에서 바꿀 생각이 없어 보이니 대강대강 사용하면 되지 않을까 싶네요.
-------------------------------------------
Fountain Project 작업은 열심히 하고 있습니다.
관심가지는 분이 계시기나 한지 혹은 아직까지 남아계시기는 한건지 모르겠지만 어쨌든 붙들고 있습니다. 간단하고 바보같지만 효과적인 기술 셋을 만든다는 건 역시 그리 쉬운 일이 아니구나 싶기도 하고... 좌우지간 조만간 뭔가를 좀 들고 나올 수 있도록 노력해 보겠습니다.
' 3 ')/ =3
'알림 > 앱 / 프로젝트' 카테고리의 다른 글
PEP 한글 번역 프로젝트 관련 (0) | 2013.05.24 |
---|---|
독서 노트용 구글 스프레드시트 템플릿 Bookshelf template (3) | 2012.11.02 |
'BITNA: 오직 그분만을 위한' 관련, 두 번째 글 (0) | 2012.08.17 |
'BITNA: 오직 그분만을 위한' 관련 (0) | 2012.07.20 |
BITNA 2.15 관련 (0) | 2012.07.20 |