Инструмент ZAP застрял в середине при запуске
Я пытаюсь интегрировать селен с ZAP.
Чтобы добиться этого, я использовал приведенный ниже код, чтобы автоматически открывать инструмент ZAP перед запуском браузера с использованием селена.
Проблема, с которой я сталкиваюсь, заключается в том, что инструмент ZAP не открывается должным образом, он застрял в середине.
Приведенный ниже код, который я использовал, чтобы открыть инструмент ZAP.
Код:
public void triggerZAP() throws IOException, InterruptedException, ClientApiException
{
String[] command = { "CMD", "/C",zapLocation + "ZAP.exe" };
ProcessBuilder build = new ProcessBuilder(command);
build.directory(new File(zapLocation));
Process p = build.start();
p.waitFor();
Thread.sleep(5000);
ClientApi api = new ClientApi(zapAddress, zapPort);
currentURL = controls.getCurrentUrl();
System.out.println("Spider : " + currentURL);
ApiResponse resp = api.spider.scan(currentURL, null, null, null, null);
scanId = ((ApiResponseElement) resp).getValue();
while (true)
{
Thread.sleep(1000);
progress = Integer.parseInt(((ApiResponseElement) api.spider.status(scanId)).getValue());
System.out.println("Spider progress : " + progress + "%");
if (progress >= 100)
{
break;
}
}
System.out.println("Spider complete");
System.out.println(new String(api.core.xmlreport()));
}
Ошибка:
org.zaproxy.clientapi.core.ClientApiException: java.net.ConnectException: Connection refused: connect
at org.zaproxy.clientapi.core.ClientApi.callApiDom(ClientApi.java:329)
at org.zaproxy.clientapi.core.ClientApi.callApi(ClientApi.java:311)
at org.zaproxy.clientapi.gen.Spider.scan(Spider.java:220)
at com.exterro.fusion.selenium.controls.ZAPConfigurations.triggerZAP(ZAPConfigurations.java:61)
at com.exterro.fusion.selenium.core.FusionSignin.config(FusionSignin.java:54)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient$1.run(Unknown Source)
at sun.net.www.http.HttpClient$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.http.HttpClient.privilegedOpenServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at org.zaproxy.clientapi.core.ClientApi.getConnectionInputStream(ClientApi.java:338)
at org.zaproxy.clientapi.core.ClientApi.callApiDom(ClientApi.java:327)
... 31 more
... Removed 27 stack frames
1 ответ
Похоже, вы не указываете ключ API при запуске ZAP. Если это так, то ZAP создаст его для вас, но вы не будете знать, что это такое, поэтому не сможете его использовать, и ZAP будет игнорировать ваши вызовы API.
Чтобы установить ключ API через командную строку, используйте параметр, например: -config api.key=change-me-9203935709
Вы также можете отключить ключ API в безопасной среде - подробнее здесь: https://github.com/zaproxy/zaproxy/wiki/FAQapikey
Это сообщение об ошибке...
org.zaproxy.clientapi.core.ClientApiException: java.net.ConnectException: Connection refused: connect
at org.zaproxy.clientapi.core.ClientApi.callApiDom(ClientApi.java:329)
... означает, что клиент Java не смог инициировать новое соединение с прокси- сервером zap.
Эта ошибка может появиться по нескольким причинам. Вот несколько контрольных точек для решения этой ошибки:
- Убедитесь, что прокси -сервер ZAP запущен и работает, прежде чем клиент Java попытается связаться с прокси-сервером. Вы можете найти соответствующее обсуждение в разделе Как начать использовать API ZAP на основе Java.
- Убедитесь, что настройки API на стороне прокси включены.
Вы можете найти соответствующее обсуждение в Не удается выполнить сканирование паука zap с помощью zap-java-api
Когда вы инициируете соединение Java-клиента, вам необходимо в обязательном порядке указать ключи API, поскольку ZAP требует ключ API по умолчанию для вызова операций API, которые вносят изменения в ZAP. Следовательно, ключ API требуется по умолчанию для вызова любой из операций API. Это функция безопасности, позволяющая предотвратить запуск ZAP API вредоносными сайтами. Параметры безопасности API, включая ключ API, можно найти на экране параметров API.
Блок кода:
private static final int ZAP_PORT = 8080; private static final String ZAP_API_KEY = "abcdefghijklmnop123456789"; private static final String ZAP_ADDRESS = "localhost"; private static final String TARGET = "https://public-firing-range.appspot.com";
Вы можете найти соответствующее обсуждение в разделе "Сканирование с использованием OWASP Zap Api".