kernel의 네트워크 계층에서 ip header가 포함된 packet을 가로채고 싶습니다.
글쓴이: violetoov / 작성시간: 금, 2015/04/24 - 2:19오후
안녕하세요.
android 환경에서 vpn을 사용하지 않고 패킷(ip header를 포함한 패킷)을 가로채어 app에서 이용할 수 있는 방법에 대해 고민하고 있습니다.
현재 app에서 생성된 패킷이
응용계층 -> 전송 계층(tcp) -> 네트워크 계층(ip) 로 내려가면서
네트워크 계층의 ip_output.c파일의 ipqueue_xmit() 함수에서
ip header를 구성해 데이터 링크 계층으로 보내는 것 까지는 알아낸 상태입니다.
그 다음 step으로 ip haeder가 들어간 패킷을 빼돌려 데이터링크 계층으로 내보내지 않고
app에서 해당 패킷을 얻을 수 있는 방법에 대해 고민하고 있는데 감이 오질 않아 어떻게 해결하면 좋을지 의견 부탁드립니다.
Forums:
안드로이드 프로그래밍을 안해봐서 정확히는 모릅니다만,
안드로이드 프로그래밍을 안해봐서 정확히는 모릅니다만, system call을 직접 호출 가능하다면
둘 중 하나로 소켓을 생성하시면 됩니다.
둘다 | IP header | Payload | 형식으로 데이터를 수신하게되는데 약간의 차이가 있습니다.
둘다 온전한 IP header를 얻을수 있구요. 예를 들면,
C로 짠다음 안드 앱에서 JNI로 호출하면
C로 짠다음 안드 앱에서 JNI로 호출하면 구현가능합니다.
그런데 혹시 root 권한 요구하는 시스템 콜인가요? 그럼 일반적인 방법으로는 *절대* 안됩니다. 앱 쓰는 유저들에게 폰 루팅해서 쓰라고 해야죠.
Written By the Black Knight of Destruction
안드로이드에서 시스템콜이 호출가능하긴
안드로이드에서 시스템콜이 호출가능하긴 하군요.
말씀하신 것 처럼 루트권한이 필요합니다. (정확히는 SOCK_RAW 같은 permission만 있으면 되죠. 정확히 어떤 권한인지 가물가물..)
그런데
http://stackoverflow.com/questions/27983869/android-socket-permission
찾아보니, 가능한것 같은데 어떻게 생각하시는지..?
폰에 usb 웹캠 연결해서 녹화프로그램 짤려고
폰에 usb 웹캠 연결해서 녹화프로그램 짤려고 구현하면서 알게된겁니다.
당시 video4linux 인터페이스 문서 보고 노가다질 했는데 나중에 폰 개발하는 사람에게 들은 얘기로는 제조사가 그걸 해주지 않는 한은 순정상태에서는 절대 불가능하다고 했습니다.
제조사 순정폰 상테에서는 루트권한 획득하는 길이 다 막혀있고 앱 빌드시 카메라 사용, 네트웍 사용 권한을 부여하면 루트는 아니지만 앱 실행시 그걸 사용할 수 있는 유저의 권한을 받습니다. 그리고 유저권한으로 할수있는거면 JNI로 시스템 콜 부르면 뭐든지 다 할 수 있습니다.
Written By the Black Knight of Destruction
댓글 달기