5

Web ブラウザまたは IPMIview ツールを使用せずに、IPMI リモート接続 (KVM) に接続しようとしています。しかし、これまでのところ運がありません。

私が最初にしたことは、「jviewer.jnlp」をjavawsで起動することです。このファイルは、[リモート接続] ボタンを押すと、IPMI Web サイトによって作成されます。このソリューションは、Web セッションが閉じられるまで機能します。暗号化された引数をユーザー名とパスワードに置き換えようとしました。しかし、どういうわけかセッションIDが埋め込まれています。

jviewer.jnpl ファイル:

<?xml version="1.0" encoding="UTF-8"?>

<jnlp spec="1.0+" codebase="https://192.168.99.201/Java">
 <information>
    <title>JViewer</title>
    <vendor>American Megatrends, Inc.</vendor>
    <description kind="one-line">JViewer Console Redirection Application</description>
    <description kind="tooltip">JViewer Console Redirection Application</description>
    <description kind="short">
        JViewer enables a user to view the video display of managed server via KVM.  
        It also enables the user to redirect his local keyboard, mouse for managing the server remotely.
    </description>
</information>
<security>
    <all-permissions/>
</security>
<resources>
    <j2se version="1.5+"/>
    <jar href="release/JViewer.jar"/>
</resources>
<resources os="Windows" arch="x86">
    <j2se version="1.5+"/>
    <nativelib href="release/Win32.jar"/>
</resources>    
<resources os="Windows" arch="amd64">
       <j2se version="1.5+"/>
       <nativelib href="release/Win64.jar"/>
</resources>
<resources os="Linux"  arch="x86">
    <j2se version="1.5+"/>
        <nativelib href="release/Linux_x86_32.jar"/>
</resources>
<resources os="Linux"  arch="i386">
    <j2se version="1.5+"/>
        <nativelib href="release/Linux_x86_32.jar"/>
</resources>
<resources os="Linux" arch="x86_64">
    <j2se version="1.5+"/>
        <nativelib href="release/Linux_x86_64.jar"/>
</resources>    
<resources os="Linux" arch="amd64">
    <j2se version="1.5+"/>
        <nativelib href="release/Linux_x86_64.jar"/>
</resources>
<resources os="Mac OS X" arch="i386">
    <j2se version="1.5+"/>
        <nativelib href="release/Mac32.jar"/>
</resources>
<application-desc>
    <argument>192.168.99.201</argument>
    <argument>5901</argument>
    <argument>Hnda9A159AwMjwnF</argument>
    <argument>0</argument>
    <argument>0</argument>
    <argument>5120</argument>
    <argument>5123</argument>
    <argument>511</argument>
    <argument>5900</argument>
    <argument>1</argument>
    <argument>EN</argument>
    <argument>HEWKovXQO2Fp7FEMho6LrM4kzTPFHPyB000</argument>

</application-desc>
</jnlp>

jnlp の名前が「launch.jnlp」の場合、引数のユーザー名とパスワードの置換は機能します。一部の Supermicro IPMI バージョンでは、異なる構造が使用されます。

次に、IPMIview ツール バージョン 2.9.32 で接続を試みます。これで動作するので、接続は問題ありません。IPMIview の jar を使用して接続を試みることを知っています。ホストを IPMI IP に置き換えます

java -Djava.library.path=. -jar iKVM.jar host ADMIN ADMIN null 5900 2623 2 0

これによりリモート接続が開きますが、「接続に失敗しました」というエラーが表示されます。

java -Djava.library.path=. -jar JViewerX9.jar host ADMIN ADMIN

また、同じ結果: 接続に失敗しました 接続に失敗すると、警告ボックスが表示されます。OK でアプリケーションを閉じます

いくつかの IPMI 情報:

# ipmitool mc info
Device ID                 : 32
Device Revision           : 1
Firmware Revision         : 2.4
IPMI Version              : 2.0
Manufacturer ID           : 47488
Manufacturer Name         : Unknown (0xB980)
Product ID                : 43707 (0xaabb)
Product Name              : Unknown (0xAABB)
Device Available          : yes
Provides Device SDRs      : no
Additional Device Support :
    Sensor Device
    SDR Repository Device
    SEL Device
    FRU Inventory Device
    IPMB Event Receiver
    IPMB Event Generator
    Chassis Device
Aux Firmware Rev Info     : 
    0x01
    0x00
    0x00
    0x00

コールド リセット「ipmitool mc reset cold」も機能しません。

jnlpファイルの引数の意味を誰かが知っているか、誰かがこの問題の有効な解決策を持っていることを願っています

編集: Maxim Akristiniy の答えを試して、次のコードを思いつきました:

package com.thalesgroup.nl.perftools;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.util.List;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.ScriptResult;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebResponse;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
import com.gargoylesoftware.htmlunit.util.Cookie;

public class IpmiRemoteViewer {

    public static void main(String[] args)
            throws FailingHttpStatusCodeException, MalformedURLException,
            IOException {

        String username = "ADMIN";
    String password = "ADMIN";
    String ip = "192.168.99.150";

    final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);

    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getCookieManager().setCookiesEnabled(true);

    webClient.getOptions().setUseInsecureSSL(true);
    webClient.getOptions().setJavaScriptEnabled(true);

    webClient.getCookieManager().addCookie(
            new Cookie(ip, "WEBVAR_USERNAME", username));
    webClient.getCookieManager().addCookie(
            new Cookie(ip, "WEBVAR_PASSWORD", password));

    HtmlPage page1 = webClient.getPage("http://" + ip);

    List<HtmlForm> forms = page1.getForms();

    if (!forms.isEmpty()) {

        HtmlForm form = forms.get(0);
        HtmlSubmitInput button = (HtmlSubmitInput) form.getInputsByValue(
                "Login").get(0);

        // username
        HtmlTextInput textField = form.getInputByName("T1");
        textField.setValueAttribute(username);

        // password
        HtmlPasswordInput textField2 = form.getInputByName("T2");
        textField2.setValueAttribute(password);

        HtmlPage page2 = button.click();
        webClient.waitForBackgroundJavaScript(500);

        // Do it again
        form = page2.getForms().get(0);

        // username
        textField = form.getInputByName("T1");
        textField.setValueAttribute(username);

        // password
        textField2 = form.getInputByName("T2");
        textField2.setValueAttribute(password);

        ScriptResult scriptResult = page2.executeJavaScript("DoLogin();");

        // Print the index.html page
        System.out.println(scriptResult.getNewPage().toString());

        // Print the session id
        for (Cookie cookie : webClient.getCookieManager().getCookies()) {
            if (cookie.getName().equals("SessionCookie")) {
                String sessionId = cookie.getValue();
                System.out.println("Session id = " + sessionId);
            }
        }

        // Download the jviewer.jnlp file
        Page page5 = webClient.getPage("http://" + ip
                + "/Java/jviewer.jnlp?EXTRNIP=" + ip + "&JNLPSTR=JViewer");
        WebResponse response = page5.getWebResponse();
        InputStream inputStream = response.getContentAsStream();

        writeToFile("viewer.jnlp", inputStream);
    }

}

protected static void writeToFile(String filename, InputStream inputStream) {
    OutputStream outputStream = null;

    try {

        File file = new File(filename);

        // write the inputStream to a FileOutputStream
            outputStream = new FileOutputStream(file);

            int read = 0;
            byte[] bytes = new byte[1024];

            while ((read = inputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, read);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
    }

}

今回は、ログイン ページを viewer.jnlp ファイルに書き込みます。まだ運がありません。ログインページの後ろにあるindex.htmlページをなんとか読むことができました。しかし、セッションは非常に速く終了します。

4

3 に答える 3

9

jviewer.jnlp ファイルをダウンロードしますが、最初にログインします。

#!/bin/sh

USER=ADMIN
PASS=ADMIN
HOST=192.168.99.150

COOKIE=`curl --data "WEBVAR_USERNAME=$USER&WEBVAR_PASSWORD=$PASS" http://$HOST/rpc/WEBSES/create.asp 2> /dev/null | grep SESSION_COOKIE | cut -d\' -f 4`
curl --cookie Cookie=SessionCookie=$COOKIE http://$HOST/Java/jviewer.jnlp -o $HOST.jviewer.jnlp

次に、javaws で jviewer.jnlp ファイルを開始します。

于 2015-01-20T08:27:32.910 に答える
2

Supermicro は American Megatrends の MegaRAC ソフトウェアを使用しており、jviewer はその一部です。MegaRAC は、スタンドアロンの jviewer アプリケーションを提供します。Supermicro からリクエストできるはずです。

于 2017-01-11T12:46:54.607 に答える
0

you need connect to IPMI server and set cookie variables: WEBVAR_USERNAME, WEBVAR_PASSWORD
you will get in response in cookie variable SESSION_COOKIE
next download http://" + IP + "/Java/jviewer.jnlp?EXTRNIP=" + IP + "&JNLPSTR=JViewer
to your jnlp

or use existing jnlp and replace received cookie in it with your cookie :

<argument>-webcookie</argument>
<argument>zIoAlbnWxQtHTIutR8wyeKxeo9nAVJF5000</argument>
于 2014-12-04T16:05:21.220 に答える