Notice
Recent Posts
Recent Comments
Link
투케이2K
516. (kotlin/코틀린) [유틸 파일] getDomainIpList : 도메인 입력해 접속 가능한 IP 주소 확인 본문
[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Kotlin
[소스 코드]
// -----------------------------------------------------------------------------------------
// TODO [SEARCH FAST] : [Observable] : getDomainIpList : 도메인 입력해 접속 가능한 IP 주소 확인
// -----------------------------------------------------------------------------------------
// TODO [호출 방법 소스 코드]
// -----------------------------------------------------------------------------------------
/*
try {
C_App.getDomainIpList(A_Intro@this, "www.google.com", 80, 2000)
.subscribeOn(AndroidSchedulers.mainThread()) // [Observable (생성자) 로직을 IO 스레드에서 실행 : 백그라운드]
.observeOn(Schedulers.io()) // [Observer (관찰자) 로직을 메인 스레드에서 실행]
.subscribe(
{ value ->
S_Log._W_("도메인 IP 정보 확인 :: onNext :: $value", null)
},
{ error ->
S_Log._E_("도메인 IP 정보 확인 :: onError :: " + error.message.toString(), null)
}
)
{
}
}
catch (Exception e){
e.printStackTrace();
}
*/
// -----------------------------------------------------------------------------------------
fun getDomainIpList(mContext: Context, domain: String, port: Int, milliSecond: Int): Observable<ArrayList<Map<String, String>>> {
// [로직 처리 실시]
return Observable.create { subscriber: ObservableEmitter<ArrayList<Map<String, String>>> ->
/**
* // -----------------------------------------
* [getDomainIpList 메소드 설명]
* // -----------------------------------------
* 1. 도메인 입력해 접속 가능한 IP 주소 확인 (nslookup 도메인)
* // -----------------------------------------
* 2. 리턴 데이터 :
*
* [{ConnectStatus=Success, HostAddress=2404:6800:400a:813::2004}, {ConnectStatus=Success, HostAddress=142.250.207.100}]
* // -----------------------------------------
* 3. 참고 :
*
* ipV4 주소인 경우 제한적이므로 특정 통신사 마다 주기적으로 변경 될 수 있음
*
* http 기본 포트 : 80
*
* // -----------------------------------------
*/
S_Log._D_("도메인 입력해 접속 가능한 IP 주소 확인", arrayOf(
"domain :: $domain",
"port :: $port",
"milliSecond :: $milliSecond"
))
try {
// [인풋 데이터 방어 로직 작성]
if (C_Util.stringNotNull(domain) === true && domain.contains(".") == true && port >= 0 && milliSecond >= 0) {
// [도메인 https , http 시작 확인 및 제거]
var address = domain.trim { it <= ' ' }
address = address.replace("http://".toRegex(), "")
address = address.replace("https://".toRegex(), "")
// [AsyncTask] : [IP 정보 확인 및 연결 여부 테스트 수행]
val finalAddress = address
AsyncTask.execute {
val resultList = ArrayList<Map<String, String>>()
try {
val addressAll = InetAddress.getAllByName(finalAddress)
for (adr in addressAll) {
//S_Log._D_("Connection Test [Start] :: " + String.valueOf(adr.getHostAddress()), null);
try {
Socket().connect(InetSocketAddress(adr, port), milliSecond) // TODO [HTTP : 기본 80 포트 / 특정 포트 지정]
S_Log._W_("Connection Test [Success] :: " + adr.hostAddress.toString(), null)
val map: MutableMap<String, String> = HashMap()
map["HostAddress"] = adr.hostAddress.toString()
map["ConnectStatus"] = "Success"
resultList.add(map)
} catch (e: Exception) {
S_Log._E_("Connection Test [Fail] :: " + adr.hostAddress.toString(), null)
val map: MutableMap<String, String> = HashMap()
map["HostAddress"] = adr.hostAddress.toString()
map["ConnectStatus"] = "Fail"
resultList.add(map)
}
}
} catch (e: Exception) {
e.printStackTrace()
if (resultList != null && resultList.size > 0) {
resultList.clear()
}
} finally {
subscriber.onNext(resultList)
subscriber.onComplete()
}
}
} else {
try { subscriber.onError(Throwable("[Error] : Input Data Is Null")) } catch (ex: Exception) { ex.printStackTrace() }
}
} catch (e: Exception) {
e.printStackTrace()
try { subscriber.onError(Throwable("[Exception] : [catch] : $e")) } catch (ex: Exception) { ex.printStackTrace() }
}
}
}
[결과 출력]
W///===========//: ================================================
I/: [LOG :: CLASS PLACE :: com.example.kotlinproject.A_Intro$1$1.onNext(A_Intro.java:344)]
I/: ----------------------------------------------------
I/: [LOG :: NOW TIME :: 2024-08-02 13:45:03 금요일]
I/: ----------------------------------------------------
I/: [LOG :: DESCRIPTION :: 도메인 IP 정보 확인 :: onNext :: [{ConnectStatus=Success, HostAddress=2404:6800:400a:813::2004}, {ConnectStatus=Success, HostAddress=142.250.207.100}]]
W///===========//: ================================================
반응형
'Kotlin' 카테고리의 다른 글
Comments