рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдореИрдХрдмреБрдХ рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯрд╢реЗрдпрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдпрд╣ рдЖрд▓реЗрдЦ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ InternetSharing рдХреЛ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореИрдХрдмреБрдХ рдХреЛ рд╕реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдпрд╛ рд▓реИрдкрдЯреЙрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрдЧрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ euthanize рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕

рдореИрдВ рдореИрдХрдмреБрдХ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдХрдорд░реЗ рдореЗрдВ 3 рдЬреА рдирд╣реАрдВ рд╣реИред рдЖрд░рдЬреЗ -45 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реИрдкрдЯреЙрдк рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рдЗрдВрдЯрд░рдиреЗрдЯрд╢реЗрдпрд░рд┐рдВрдЧ (рдЗрд╕рдХреЗ рдмрд╛рдж рдЖрдИрдПрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдХрд╛рдо рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдЖрдИрдПрд╕ рд╕реЗрдЯ рдХрд┐рдпрд╛ рддреЛ рдореИрдВ рдлреЛрди рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдзреНрдпрд╛рди рджреЗрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдЬрдм рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд▓реИрдкрдЯреЙрдк рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реА рдмрд╛рд░ рдорд╣рддреНрд╡ рдирд╣реАрдВ рджрд┐рдпрд╛ред рджреВрд╕рд░реА рдмрд╛рд░ рдореИрдВрдиреЗ рд▓реЙрдЧ рдореЗрдВ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬрдм рд╡рд╣ рдЪрд╛рд▓реВ рд╣реБрдЖред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡рд╣ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рдмрд╛рдж рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд╕реЗ рд╕реНрд▓реАрдк рдореЛрдб рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдЖрдИрдПрд╕ рд╕рдХреНрд░рд┐рдп рд╣реЛрдиреЗ рдкрд░ рдиреАрдВрдж рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред
рдЯреАрдо
pmset -g assertions 
рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдИрдПрд╕ рджреЛрд╖реА рд╣реИ:
pid 70000: [0x000 ... 000] PreventSystemSleep рдирд╛рдо: "com.apple.InternetSharing"ред

рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рд▓реЛрдЧ рдХрд┐рд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЗрд╡рд▓ "рд╕реЗрд╡рд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛" рдЖрдпрд╛ред
рдореБрдЭреЗ рдЦреБрдж рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдерд╛ред

рдХреНрдпрд╛ рдХрд░реЗрдВ?

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ IS рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреА рд╣реИ:
/System/Library/LaunchDaemons/com.apple.InternetSharing.plist

рд╕рдорд╛рдзрд╛рди рдпрд╣ рдирд┐рдХрд▓рд╛: рд╕реЛрддреЗ рд╕рдордп рдЬрд╛рдЧрдиреЗ рдкрд░ рдФрд░ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рд╕реЗрд╡рд╛ рдЪрд╛рд▓реВ рдХрд░рдирд╛, рдЕрд░реНрдерд╛рдд, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


рд▓реЗрдХрд┐рди рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдХрд┐ "рдЬрд╛рдЧрдиреЗ рдкрд░ рдФрд░ рд╕реЛрддреЗ рд╕рдордп рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ" рдФрд░ рдЙрд╕реА рд╕рдордп рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдирд┐рд░реНрдгрдп

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╕реЗрд╡рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдЕрд░реНрдерд╛рдд, рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рджреВрд╕рд░рд╛ - рдЬрд╛рдЧрдиреЗ рдФрд░ рд╕реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд╢рдГ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЛ рдХрдорд╛рдВрдб рднреЗрдЬреЗрдЧрд╛, рдХреНрд░рдорд╢рдГ, рд╢реБрд░реВ рдФрд░ рд░реЛрдХ рджреЗрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рд╕реЗрд╡рд╛ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ рд╕реБрдиреЗрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 10001 рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯ рдФрд░ рд╕реНрдЯреЙрдк рдХрдорд╛рдВрдб рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред
рд╣рдо рдЖрдИрдПрд╕ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд╢рдГ PHP (рдиреАрдЪреЗ рдкреВрд░реНрдг рдХреЛрдб) рдореЗрдВ рд╕реЗрд╡рд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреА рдЬрд╛рдПрдВрдЧреА:
рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
 shell_exec('launchctl load -F /System/Library/LaunchDaemons/com.apple.InternetSharing.plist'); 

рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП:
 shell_exec('launchctl unload /System/Library/LaunchDaemons/com.apple.InternetSharing.plist'); 


рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдлрд╝реЛрд▓реНрдбрд░ /Library/LaunchDaemons/ рдореЗрдВ com.username.InternetSharing.plist рдлрд╝рд╛рдЗрд▓ com.username.InternetSharing.plist ред
рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдБ:
 sudo launchctl load -F /Library/LaunchDaemons/com.username.InternetSharing.plist 


рдиреАрдВрдж рдХреЗ рд▓рд┐рдП рдЬрд╛рдЧреГрддрд┐ рдФрд░ рд╕рдВрдХреНрд░рдордг рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Scenario рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо AppleScripts рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо (рдиреАрдЪреЗ рдкреВрд░реНрдг рдХреЛрдб) рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯ рдпрд╛ рд╕реНрдЯреЙрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╣реЗрдВрдЧреЗред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
do shell script "/usr/bin/php /Users/username/CheckMac/client.php start"
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдВрдж рдХрд░реЛ
do shell script "/usr/bin/php /Users/username/CheckMac/client.php stop"

рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦреЗрдВ:
"~/Library/Scenario/Wake Scripts" рдФрд░ "~/Library/Scenario/Sleep Scripts" ред

рдкрд░рд┐рдгрд╛рдо

рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдкрд░, рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо " Wake Scripts " рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдИрдПрд╕ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВред
рд╕реНрд▓реАрдк рдореЛрдб рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рд╕рдорд╛рди рдСрдкрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ " Sleep Scripts " рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рдФрд░ рд╕реНрдЯреЙрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рдеред

рдХреЛрдб

рджрдлреНрддрд░

/Users/username/CheckMac/listen.php
 <?php // PHP 5.3.10 //   error_reporting(E_ALL ^ E_WARNING); set_time_limit(0); ob_implicit_flush(); $port = 10001; $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_bind($sock, "127.0.0.1", $port) or die('Port listened'."\n"); socket_set_option($sock, SOL_SOCKET, SO_KEEPALIVE, 1); socket_set_nonblock($sock); socket_listen($sock, 1000); $clients = array($sock); $tarr = array(); $iparr = array(); $current = 0; while (true) { $read = $clients; if (count($tarr) > 0) foreach ($tarr as $ind => $tim) { //      10  -  if ((time() - $tim) > 10) { socket_close($read[$ind + 1]); unset($clients[$ind+1]); unset($iparr[$ind]); unset($tarr[$ind]); echo "Disconnect client.\n"; continue; } } //    -  if (socket_select($read, $write = NULL, $except = NULL, 1) < 1) continue; //   if (in_array($sock, $read)) { $current ++; $clients[$current] = $newsock = socket_accept($sock); socket_write($newsock, "<OK>\n"); socket_getpeername($newsock, $ip); echo "New connection from ip: {$ip}\n"; $key = array_search($sock, $read); $iparr[$current-1] = $ip; $tarr[$current-1] = time(); unset($read[$key]); $read[$current] = $newsock; continue; } //   foreach ($read as $index => $read_sock) { $data = socket_read($read_sock, 1024); if ($data === false) { $key = array_search($read_sock, $clients); unset($clients[$key]); unset($iparr[$key - 1]); echo "Disconnect client.\n"; unset($tarr[$key - 1]); continue; } $data = trim($data); //    if (!empty($data)) { echo $iparr[$index - 1] . "[$index] - $data\n"; $tarr[$index - 1] = time(); switch ($data) { case "quit": socket_close($read_sock); $key = array_search($read_sock, $clients); unset($clients[$key]); unset($iparr[$key - 1]); echo "Disconnect client.\n"; unset($tarr[$key - 1]); break; case "ping": socket_write($read_sock, "<PONG> " . time() . "\n"); break; //     IS case 'start': $s = shell_exec('launchctl list'); if(strpos($s, 'com.apple.InternetSharing') === false){ shell_exec('launchctl load -F /System/Library/LaunchDaemons/com.apple.InternetSharing.plist'); } break; //     IS case 'stop': $s = shell_exec('launchctl list'); if(strpos($s, 'com.apple.InternetSharing') !== false){ shell_exec('launchctl unload /System/Library/LaunchDaemons/com.apple.InternetSharing.plist'); } break; } if ($data === "close") { socket_close($sock); break(2); } } } } socket_close($sock); 

com.username.InternetSharing.plist

/Library/LaunchDaemons/com.username.InternetSharing.plist
 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.username.InternetSharing</string> <key>ProgramArguments</key> <array> <string>/usr/bin/php</string> <string>/Users/username/CheckMac/listen.php</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist> 

рдЧреНрд░рд╛рд╣рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо

/Users/username/CheckMac/client.php
 <?php $fp = fsockopen("127.0.0.1", 10001, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = @$argv[1]."\r\n"; fwrite($fp, $out); fgets($fp, 128); sleep(1); //       $out = "quit\r\n"; fwrite($fp, $out); fgets($fp, 128); fclose($fp); } 

IS рд╕реНтАНрдХреНрд░рд┐рдкреНтАНрдЯ рд╕реНтАНрдХреНрд░рд┐рдкреНтАНрдЯ (рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ - AppleScripts рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ)

~ / рдкреБрд╕реНрддрдХрд╛рд▓рдп / рдкрд░рд┐рджреГрд╢реНрдп / рд╡реЗрдХ рд▓рд┐рдкрд┐рдпреЛрдВ / рд╡реЗрдХред рд╕реЗрдкреНрдЯ
do shell script "/usr/bin/php /Users/username/CheckMac/client.php start"

рдУрд╕рдиреЛрд╡ рд▓рд┐рдкрд┐ рдЖрдИ.рдПрд╕.

~ / рдкреБрд╕реНрддрдХрд╛рд▓рдп / рдкрд░рд┐рджреГрд╢реНрдп / рдиреАрдВрдж рд▓рд┐рдкрд┐рдпреЛрдВ / рд╕реНрд▓реАрдкред рдЧреБрдкреНрдд
do shell script "/usr/bin/php /Users/username/CheckMac/client.php stop"

Source: https://habr.com/ru/post/In150617/


All Articles