sherlock.py的命令与linux命令行和java进程api的解释不同
听起来有点奇怪,不是吗? 我正在从事一个项目- 我需要使用Java进程API运行这个程序 下面是程序的用法sherlock.py的命令与linux命令行和java进程api的解释不同,java,Java,听起来有点奇怪,不是吗? 我正在从事一个项目- 我需要使用Java进程API运行这个程序 下面是程序的用法 $ python3 sherlock.py --help usage: sherlock.py [-h] [--version] [--verbose] [--rank] [--folderoutput FOLDEROUTPUT] [--output OUTPUT] [--tor] [--unique-tor] [--csv] [
$ python3 sherlock.py --help
usage: sherlock.py [-h] [--version] [--verbose] [--rank]
[--folderoutput FOLDEROUTPUT] [--output OUTPUT] [--tor]
[--unique-tor] [--csv] [--site SITE_NAME]
[--proxy PROXY_URL] [--json JSON_FILE]
[--proxy_list PROXY_LIST] [--check_proxies CHECK_PROXY]
[--timeout TIMEOUT] [--print-found]
USERNAMES [USERNAMES ...]
我在使用用户名方面有问题。
当我在命令行中指定一个有空白的用户名时,它工作得很好(空白解释得很好)。注意属性检查用户名
// command to be executed
python3 ${SHERLOCK_HOME}/sherlock.py --print-found --timeout 10 "skoriy serhii"
[*] Checking username skoriy serhii on:
[+] 500px: https://500px.com/skoriy serhii
[-] Error Connecting: Aptoide
[-] Error Connecting: Basecamp
[+] CapFriendly: https://www.capfriendly.com/users/skoriy serhii
但是,当我使用Java Process API时,我得到以下信息:
// command to be executed
python3 /home/gorilla/sherlock/sherlock.py --print-found --timeout 10 "skoriy serhii"
[*] Checking username "skoriy on:
[+] 500px: https://500px.com/"skoriy
[-] Error Connecting: Aptoide
[-] Error Connecting: Basecamp
[+] Bookcrossing: https://www.bookcrossing.com/mybookshelf/"skoriy/
[+] CapFriendly: https://www.capfriendly.com/users/"skoriy
[-] Error Connecting: Carbonmade
[+] CashMe: https://cash.me/$"skoriy
[+] Chatujme.cz: https://profil.chatujme.cz/"skoriy
[+] Cloob: https://www.cloob.com/name/"skoriy
[-] Error Connecting: Crevado
正如您所看到的,username参数的解释存在一些问题。
下面是java代码
public class Main {
public static void main(String[] args) {
try {
CommandBuilder commandBuilder = new CommandBuilder();
String command = commandBuilder.user("skoriy serhii").build();
System.out.println(command);
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
System.out.println(line);
process.destroy();
if (process.isAlive())
process.destroyForcibly();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//CommandBuilder.java
public class CommandBuilder {
private final static String BASE = "python3 /home/gorilla/sherlock/sherlock.py --print-found --timeout 10";
private StringBuffer buffer = new StringBuffer();
public CommandBuilder user(String user) {
buffer.append(" \"" + user + "\" ");
return this;
}
public String build() {
return BASE + new String(buffer);
}
}使用
ProcessBuilder
,除非您怀念传统API(并创建自己的非工作CommandBuilder)。@Kayaman,罗杰it@Kayaman:另外,ProcessBuilder
有许多改进的功能,在这种情况下,另一个重载Runtime.exec(String[])
可以工作。只有exec(String)
完成的标记化几乎与shell完全不同。