Jinsi ya kuangalia hali ya VPN bila ping kwenye Android, iOS na Windows
Ping inathibitisha tu kwamba mwenyeji mmoja alijibu, si kwamba handaki linafanya kazi. Uliza API za hali za Android, iOS na Windows, kisha thibitisha njia ambayo programu yako inahitaji kweli.
Kufanya ping kwa 192.0.2.10 kunakuambia tu kwamba anwani moja ilijibu mwangwi wa ICMP, na hakuna zaidi. Kwenye mtandao usio na handaki inaweza bado kufaulu, kwa sababu anwani inaweza kuwa kwenye subnet ya ndani; ukiwa na handaki nzuri inaweza kushindwa, kwa sababu seva inatupa ICMP wakati inatoa HTTPS. Ukaguzi ambao script yako inahitaji ni swali la hali ya jukwaa pamoja na jaribio la njia kuelekea lengo ambalo programu inatumia. Wachukulie kama sehemu mbili tofauti, kamwe kama boolean moja.
Jibu la mwangwi linathibitisha nini kwa kweli
ICMP ni itifaki ya ufikivu ambayo haina dhana ya violesura au handaki. Jibu linapofika, kerneli inaripoti kwamba mwenyeji alijibu; hairipoti njia iliyobeba ombi au ile iliyobeba jibu. Uchujaji hufanya ishara kuwa na kelele zaidi, kwa sababu firewall inayozuia maombi ya mwangwi haisemi chochote kuhusu bandari zilizo nyuma yake. Na wasifu wa handaki lililogawanywa unaweza kuondoa kwa makusudi anwani iliyojaribiwa wakati maeneo mengine yote yanafanya kazi.
Unachotaka kujua kwa kweli ni kama huduma fulani inatumika kwenye njia ambayo programu inapita. Chagua mwenyeji na bandari ambazo programu inaita, kisha dai jibu katika safu ya programu.
Ufikivu na hali ya handaki ni ukweli tofauti, na mmoja unaweza kuwa kweli wakati mwingine ni uongo. Kuwatenganisha kunakuambia kosa ni la nani. Kuwachanganya katika ukaguzi mmoja huzalisha tiketi ambayo hakuna mtu anayeweza kuielekeza.
Uliza Android kuhusu usafirishaji, si ping
Android hujibu swali la hali moja kwa moja kupitia ConnectivityManager. Uwezo wa mtandao unaotumika hubeba bendera ya usafirishaji wa VPN, ambayo huwekwa wakati trafiki inaelekezwa kupitia kiolesura cha VPN. Wito huo ni wa ndani, wa bei nafuu na haujali kama mwenyeji yeyote wa mbali anajibu.
Toleo hili la Java hurudisha false badala ya kutupa hitilafu wakati hakuna mtandao unaotumika. Kwa kuwa linasoma mtandao unaotumika, linaonyesha wasifu ambao mtumiaji alichagua katika Mipangilio.
ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities caps = cm.getNetworkCapabilities(cm.getActiveNetwork());
boolean tunnel = caps != null && caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN);
Kwa arifa za mabadiliko, sajili NetworkCallback badala ya kuuliza kwa kipima muda. Usichanganye hilo na VpnService.prepare, ambayo huripoti tu kama mtumiaji alitoa ruhusa ya VPN, si kama pakiti zinapita. Kubatilisha huja kupitia VpnService.onRevoke, lakini kusahau wasifu katika Mipangilio hakutengenezi tangazo lolote.
iOS: majina ya violesura ni makisio, si mkataba
Vipande vingi vya iOS hukagua mipangilio ya proksi, hupata kamusi ya __SCOPED__ na kutafuta funguo za kiolesura kama tap, tun, utun2, ppp au ipsec. Mbinu hiyo ni kawaida ya majina, si uhakika ulioandikwa, kwa hiyo sasisho la OS linalobadilisha jina la kiolesura linaweza kuivunja. Pia huwa na tabia ya kuripoti true kwa maingizo ya zamani yanayoishi zaidi ya handaki.
Wakati programu yako inamiliki usanidi, NEVPNManager hutoa hali halisi. Inaelezea handaki ambalo programu yako ilianzisha; kwa VPN ya kila programu, programu nyingine zinaweza kuwa nje kabisa ya handaki hilo.
Pakia upya mapendeleo kabla ya kusoma hali, kwa sababu thamani hubadilika handaki linapopanda na kushuka:
let manager = NEVPNManager.shared()
manager.loadFromPreferences { error in
let up = manager.connection.status == .connected
print(up)
}
Bendera ya hali ya jukwaa bado haithibitishi kwamba trafiki inafikia mwenzake. Pengo hilo ndilo jaribio la njia hufunika, na ndiyo sababu boolean moja haitoshi kwa msaada.
Wasifu wa Windows hufichua sehemu halisi ya hali
Windows hufuatilia wasifu wa VPN kando na adapta, na Get-VpnConnection hufichua ConnectionStatus kwa kila wasifu unaoujua. Wasifu ulioundwa kupitia mteja wa Windows au kifurushi cha utayarishaji huonekana hapa. Cmdlet hii si kigunduzi cha jumla cha handaki.
Soma sehemu kwa wasifu wenye jina, na uongeze -AllUserConnection wakati wasifu ni wa watumiaji wote:
Get-VpnConnection -Name "Fabrikam" | Select-Object Name, ConnectionStatus, ServerAddress
Wateja wa wahusika wengine mara nyingi hubaki bila kuonekana kwa cmdlet hii hata handaki yao ikiwa hai, kwa hiyo matokeo tupu yanamaanisha haijulikani, si imekatwa. Orodha za adapta zinapotosha vile vile: adapta ya muuzaji inaweza kudumu ikiwa haifanyi kazi, na baadhi ya adapta zipo tu wakati wa kipindi. Kwa wasifu unaomilikiwa na Windows, rasdial huripoti msimbo wa kutoka ambao unaweza kuutawanisha. Yote haya yanaelezea imani ya ndani, si ufikivu wa mwenzake.
Hali pamoja na njia: ukaguzi wa sehemu mbili
Wasifu uliounganishwa hausemi chochote kuhusu pakiti zinaenda wapi. Handaki lililogawanywa linaweza kuweka handaki hai huku likiondoa lengo unalolijali. Wasifu wa always-on hubaki umeunganishwa na seva iliyokufa, na kill switch huzuia trafiki kwa makusudi handaki linapoanguka.
Jaribu tabaka zote mbili: thibitisha kwamba usafirishaji wa VPN au wasifu unaotumika, kisha thibitisha kwamba lengo linatatuliwa na linajibu kwa njia hiyo. Kwenye Linux, uliza kerneli ni kiolesura gani kingetumia:
ip route get 192.0.2.10
resolvectl query intranet.example.test
Wakati mteja yuko nje ya udhibiti wako, rekodi matokeo yote mawili na uache muundo uonyeshe tabaka. Umeunganishwa pamoja na jaribio la njia lililoshindwa linapendekeza handaki lililogawanywa, DNS au sera. Umetenganishwa pamoja na jaribio la njia linalofanya kazi linamaanisha njia nyingine inabeba trafiki.
Jaribio unaloweza kuendesha kwa mpangilio
Rekodi hali ya jukwaa kwanza, kabla ya kubadilisha hali yoyote ya mtandao. Tatua jina la mwenyeji na uangalie familia ya anwani, kwa sababu rekodi ya AAAA inaweza kuchukua njia tofauti na rekodi ya A. Fungua bandari ya huduma na dai jibu la programu badala ya kupeana mikono tu. Weka kila uchunguzi katika sehemu yake ya kumbukumbu.
Kwenye mashine ya Linux yenye dig na curl, amri tatu hufunika utatuzi, njia na huduma yenyewe. Zifanye handaki ikiwa juu na tena ikiwa chini:
dig +short intranet.example.test
ip route get 198.51.100.20
curl -sS -o /dev/null -w "%{http_code}" --max-time 8 https://intranet.example.test/health
Sehemu nne tofauti hushinda boolean moja, kwa sababu hali, DNS, njia na sera hushindwa kwa kujitegemea na huishia kwa timu tofauti. Ping kwenye terminali bado ni ukaguzi mzuri wa mikono. Ni ufafanuzi mbovu wa muunganisho kwa uendeshaji wa kiotomatiki, ambapo API ya jukwaa na jaribio la njia hujibu swali halisi.