Android 10 සහ ඉන් පසුව, /proc/net/tcp විවෘත කරන යෙදුමට socket වගුවක් වෙනුවට ප්‍රවේශ ප්‍රතික්ෂේපයක් ලැබේ. VPN අතුරුමුහුණතට එය ගණන් නැත: පැකට් තවමත් පැමිණේ, මන්ද උමග යනු මාර්ගගත කිරීමේ තීරණයක් මිස ගොනු අවසරයක් නොවේ. වෙනස් වූයේ වඩාත් පටු ප්‍රශ්නයකට දෙන පිළිතුරයි: “මෙම සම්බන්ධතාවය හිමි යෙදුම කුමක්ද?” ආදේශකය ConnectivityManager.getConnectionOwnerUid වේ, සෑම සම්බන්ධතාවයකටම ආධාරක විමසුම, සහ පැරණි පුරුද්ද සහ නව API අතර තේරීම රැඳී ඇත්තේ ඔබට ඇත්ත වශයෙන්ම කාර්ය තුනෙන් කුමක්ද යන්න මතය: පැකට් ලැබීම, ප්‍රවාහය ගුණනය කිරීම, හෝ භාවිතය එකතු කිරීම.

හිමිකරු ප්‍රශ්නයට පිළිතුරු දෙකක්

API 29 ට පෙර, වරප්‍රසාදිත හෝ root ක්‍රියාවලියකට කර්නලයේ socket වගු කියවා, හතර සමපාත කර හිමිකරු UID දැනගත හැකි විය. එය එක් ගොනුවක සමස්ත උපාංග ලැයිස්තුවක් ලබා දුන්නේය. API 29 සිට ගොනු පද්ධති දර්ශනය සීමිත වන අතර, ආධාරක මාර්ගය වන්නේ ප්‍රොටෝකෝලය, දේශීය ලිපිනය සහ දුරස්ථ ලිපිනය සමඟ සෑම සම්බන්ධතාවයකටම විමසුමයි.

QuestionLegacy socket tablesgetConnectionOwnerUid
Who owns this flow?Scan and match the tupleAsk once per tuple
Device-wide inventory?Yes, when readableNo, one flow at a time
Historical usage?NoNo; that is NetworkStatsManager
Works without root?No on modern releasesYes, for authorized callers

සංසන්දනය “පැරණි එදිරිව නව” නොවේ. මෙය කලින් එක් කියවිය හැකි ගොනුවකින් සම්පූර්ණ කළ, දැන් වෙනස් ගිවිසුම් තුනක් සහිත වෙනස් අතුරුමුහුණත් තුනකින් සම්පූර්ණ කරන වෙනස් කාර්ය තුනකි.

දේශීය ලිපිනය යෙදුමේ කෙළවරයි

ක්‍රම අත්සන ප්‍රොටෝකෝලයක්, දේශීය socket ලිපිනයක් සහ දුරස්ථ socket ලිපිනයක් ගනී. “දේශීය” යනු සම්බන්ධතාවයේ යෙදුම් පැත්තයි, පරීක්ෂා කරන මොහොතේ පැකට්ටුවේ මූලාශ්‍රය වන කෙළවර නොවේ. දුරස්ථ සේවාදායකයේ සිට යෙදුම වෙත ආපසු එන පැකට්ටුවේ මූලාශ්‍රය සහ ගමනාන්තය එම අර්ථදැක්වීමට සාපේක්ෂව ආපසු හැරී ඇත.

ConnectivityManager cm = getSystemService(ConnectivityManager.class);
int uid = cm.getConnectionOwnerUid(
    OsConstants.IPPROTO_TCP, appLocalAddress, appRemoteAddress);

මෙම දිශා වැරැද්ද ක්‍රියාකාරී විමසුමක් වැරදි පිළිතුරක් හෝ කිසිවක් නොදීමට වඩාත් පොදු හේතුවයි. ඇමතුමට පෙර කෙළවර දෙකම සටහන් කර යෙදුම ඇත්ත වශයෙන්ම විවෘත කළ සම්බන්ධතාවය සමඟ යුගලය තහවුරු කරන්න. ලිපින පවුලද වැදගත්: IPv4 මගින් සිතියම් කළ ලිපිනය සහ ස්වදේශීය IPv6 ලිපිනය වෙනස් tuple වන අතර, එකම වරායවල TCP සහ UDP ප්‍රවාහ ද එසේමය.

අවසරය සහ නොදන්නා ප්‍රතිඵල ගිවිසුමේ කොටසකි

විමසුම අවසර ලත් ඇමතුම්කරුවන්ට පමණක් සීමා වේ, අදාළ පරිශීලකයාගේ සක්‍රීය VPN යෙදුමද ඇතුළත්ව. සම්බන්ධ නොවන නිරීක්ෂණ යෙදුමකට වෙනත් පැතිකඩක සම්බන්ධතා ගණන් කළ හැකි යැයි උපකල්පනය කළ නොහැක, සහ අනවසර ඇමතුමක් මිත්‍රශීලී දෝෂයක් වෙනුවට ආරක්ෂක ව්‍යතිරේකයක් විසි කළ හැක. ප්‍රතිඵල දෙකම පැහැදිලිව හසුරුවන්න.

නොමැති හිමිකරු යනු පැකේජ නාමයක් නොවේ. පැකට්ටුව සහ විමසුම අතර ප්‍රවාහය වැසී තිබිය හැක, tuple අසම්පූර්ණ විය හැක, නැතහොත් ඇමතුම්කරුට දැනගැනීමට අවසර නොමැති විය හැක. පළමු සාර්ථක පිළිතුර හැඹිලිගත කර පසුව නැවත භාවිත කිරීම නව සම්බන්ධතාවයක් පැරණි යෙදුමකට ආරෝපණය කරයි, එය නොදන්නා ලෙස වාර්තා කිරීමට වඩා නරකය.

ගුණනය අසාර්ථක වූ විට, රථවාහනයට තවමත් තීරණයක් අවශ්‍යයි: ප්‍රතිපත්තිය ඉල්ලන තැන එය අවහිර කරන්න, ඔබ තේරුම් ගන්නා විෂය පථයක් පමණක් අවසර දෙන්න, නැතහොත් හිඩැස පෙන්වන්න. එම විකල්පය නිර්මාණයට අයත්, අදහස් දැක්වීමට නොවේ.

ගිණුම්කරණය වෙනත් ප්‍රශ්නයකි

NetworkStatsManager තමන්ගේම ප්‍රවේශ නීති යටතේ භාවිතය වාර්තා කරයි. UID එකක් කාල පරිච්ඡේදයක් තුළ කොපමණ මාරු කළාදැයි කිව හැක; අත්‍යවශ්‍ය ජීවමාන පැකට්ටුවක හිමිකරු කිව නොහැක. ජාල හැකියාවන් ජාලයක ගුණාංග විස්තර කරයි, socket ලැයිස්තුවක් නොවේ. තුනම මිශ්‍ර කිරීමෙන් ස්ථාවර ලෙස පෙනෙන නමුත් නොවන උපකරණ පුවරු ඇති වේ.

කුමන යෙදුම් උමං භාවිත කරයිද යන්න තීරණය කරන සරල අවස්ථාවට, Android හි ආධාරක අවසර ලත් සහ තහනම් යෙදුම් ලැයිස්තු කිසිදු scraping එකකින් තොරව ප්‍රතිපත්තිය ප්‍රකාශ කරයි. සැබවින්ම අවශ්‍ය අවස්ථා සඳහා ප්‍රවාහය අනුව ගුණනය තබා ගන්න, සහ දිශාව, අවසර සහ නොදන්නා තත්ත්ව එකට හසුරුවන නඩත්තු කරන ලද ක්‍රියාත්මක කිරීමක් සඳහා අයවැය වෙන් කරන්න.

කාර්යය අනුව මෙවලම තෝරා, පසුව කෙළවර පරීක්ෂා කරන්න

අවශ්‍යතාව උමං තේරීම නම්, වේදිකා ලැයිස්තුව භාවිත කරන්න. සජීවී ගුණනය නම්, හිමිකරු විමසුම භාවිත කර පිළිතුරු නොදෙන සෑම tuple එකක්ම නොදන්නා ලෙස සලකන්න. ඓතිහාසික එකතු නම්, stats API භාවිත කරන්න. පසුව සරල ක්‍රියාත්මක කිරීම් බිඳ දමන කෙළවර තුන පරීක්ෂා කරන්න: ප්‍රතිවිරුද්ධ දිශාවේ පැකට්ටුව, විමසුමට පෙර වැසෙන ප්‍රවාහය, සහ සක්‍රීය VPN නොවන ඇමතුම්කරු.

මේ කිසිවක් SELinux අක්‍රීය කිරීම, දුරකථනය root කිරීම හෝ කර්නල වගු ලෝකයට කියවිය හැකි කිරීම අවශ්‍ය නොවේ. සීමාවම වැදගත්: වේදිකාව ගුණනය ගිවිසුමක් පිටුපසට ගෙන ගියේ පිළිතුර නීත්‍යානුකූලව අවශ්‍ය සංරචකයට පමණක් ලබා දීමටය, වෙන කිසිවෙකුට නොවේ.

අදාළ ලිපි