Вы можете рассмотреть NativeProcess API как потенциальное решение вашей проблемы.
Откройте эту страницу и прокрутите вниз; обратите внимание, что они вызывают скрипт Python. Вы можете вызвать любое терминальное / консольное приложение через API-интерфейс NativeProcess и передать процессу любое количество аргументов как Vector.<string>()
. По сути, я предлагаю вам попробовать позвонить cmd.exe
и передать его ping www.your_unique_server.com
. Затем вы можете поймать ответы, возвращаемые через nativeProcess.standardOutput
, и у вашего приложения Flex / AIR будет разрешенный IP-адрес для работы. Вот простое приложение AIR, которое я написал для этого:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<s:layout>
<s:VerticalLayout paddingTop="20" paddingLeft="20"
paddingRight="20" paddingBottom="20"/>
</s:layout>
<s:Label text="Enter a Domain Name:"/>
<s:TextInput id="domainTI" width="100%" text="www.google.com"/>
<s:Spacer height="20"/>
<s:TextArea id="pingsTA" width="100%" height="100%"
text="Provide a domain name and click 'Ping!'"/>
<s:Button label="Ping!" click="initializeAndPing();"/>
<fx:Script>
<![CDATA[
private var nativeProcess:NativeProcess;
// called by the button.
private function initializeAndPing():void
{
if(NativeProcess.isSupported)
{
// make NativeProcess ready for use.
nativeProcess = new NativeProcess();
nativeProcess.addEventListener(
ProgressEvent.STANDARD_OUTPUT_DATA, onPingResult);
nativeProcess.addEventListener(
ProgressEvent.STANDARD_ERROR_DATA, onStdError);
nativeProcess.addEventListener(
IOErrorEvent.STANDARD_INPUT_IO_ERROR, onStdInError);
pingTheHost();
}
}
private function pingTheHost():void
{
pingsTA.text="";
var cmdFile:File = new File("C:\\Windows\\System32\\cmd.exe");
var startInfo:NativeProcessStartupInfo;
startInfo = new NativeProcessStartupInfo();
startInfo.executable = cmdFile;
// The \n special chars are necessary
// for the command to be executed.
var ping:String = "ping " + domainTI.text + "\n" ;
nativeProcess.start(startInfo);
nativeProcess.standardInput.writeUTFBytes(ping);
}
private function onPingResult(e:ProgressEvent):void
{
// you would need to parse the IP from the text string
// captured here to make it available as a variable.
pingsTA.text +=
nativeProcess.standardOutput.readUTFBytes(
nativeProcess.standardOutput.bytesAvailable);
}
private function onStdError(e:ProgressEvent):void
{
trace("StdError: " +
nativeProcess.standardError.readUTFBytes(
nativeProcess.standardError.bytesAvailable));
}
private function onStdInError(e:IOErrorEvent):void
{
trace("StdInError: " + e.toString());
}
]]>
</fx:Script>
</s:WindowedApplication>
Чтобы использовать NativeProcess, например, в приведенном выше приложении, вам потребуется AIR v2 + SDK (вы можете наложить новый AIR SDK , если у вас <2 SDK), а также вам потребуется чтобы включить профиль <code>extendedDesktop в файле app-descriptor.xml:
<!-- uncomment this node and remove all but "extendedDesktop" -->
<supportedProfiles>extendedDesktop</supportedProfiles>
Еще одна мысль: я полагаю, что NativeProcess API требует, чтобы ваше приложение AIR было установлено как собственное приложение (т. Е. Установлено с помощью файла .exe). Но, как вы видите на скриншоте, это легко сделать с помощью Flash Builder 4+.

Однако, если у вас нет Flash Builder 4, вы всегда можете написать сценарий сборки для ADT , который поставляется с AIR SDK. Этот пост Рича Третолы отлично справляется с инкапсулированием основ.
Наконец, вот как выглядит мое маленькое приложение:
