2013-08-20 2 views
2

Windows 7-8에서 Java를 사용하여 wifi 핫스팟과 DHCP 서버를 만들어야합니다. 나는 사용자가 덜 관입적이고 단순 할 수있는 소프트웨어를 개발 중입니다.Java Windows 8에서 wifi 핫스팟 만들기

제 작품의 첫 번째 부분에서는 netsh를 사용하여 호스트 된 네트워크를 만들고 정적 IP를 설정하는 것으로 생각했습니다.

내 현재 코드는 이것이다 :

String[] command = { "cmd", }; 
Process p = Runtime.getRuntime().exec(command); 
new Thread(new SyncPipe(p.getErrorStream(), System.err)).start(); 
new Thread(new SyncPipe(p.getInputStream(), System.out)).start(); 
PrintWriter stdin = new PrintWriter(p.getOutputStream()); 

//now I use the stdin.println for my shell commands 

stdin.println("netsh wlan set hostednetwork mode=allow ssid=mynetwork key=mypassword"); 
stdin.println("netsh wlan start hostednetwork"); 
stdin.println("netsh interface ipv4 set address \"Wi-Fi\" static 192.168.1.2 255.255.255.0 192.168.1.254"); 

문제 : 내가 관리자에게 권한을 상승 할 필요가

1). "elevate.exe"http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/ (다른 stackoverflow 질문에서 발견)을 사용해 보았습니다. 작동이 잘되었지만, 세 번 전화를하면 관리자 권한으로 명령을 실행하는 데 세 번 부탁합니다. 이것은 매우 사용자가 아닙니다 친한. 그렇지 않으면 내가 모든 활성 사용자를 검색하는 방법을 발견해야하는 관리자 사용자가 활성화 할 필요가 :

runas /noprofile /user:administrator netsh ...... 

그러나이 경우

문제가 있습니다 :

나는 "에서 runas"를 사용하는 것도 시도 관리 권한. 중독에서 runas 후에 나는 프롬프트와 상호 작용해야하며 비밀 번호를 써주세요.

2) 마지막 netsh 명령에 대한 모든 wifi 인터페이스를 검사하는 방법이 있습니까?

+4

을이 자바 5 이상이면,'Runtime.getRuntime()를 사용하지 말라 .exec()'; 'ProcessBuilder'를 사용하십시오. – gparyani

답변

0

나는 약 elevate 도구에 대해 조금 연구했고 몇 가지 테스트를했다. 여기가 (문서에서) 작동하게하는 열쇠 :

Usage: Elevate [-?|-wait|-k] prog [args] 

-k - Starts the the %comspec% environment variable value and 
     executes prog in it (CMD.EXE, 4NT.EXE, etc.) 

prog - The program to execute 

나는 elevate.exe 실행 파일을 다운로드하여 내 넷빈즈 프로젝트 폴더에 넣어. 그런 다음 실행하려는 각 netsh 명령에 대해 하나의 프로세스를 만듭니다 (테스트 목적으로 만 조금 수정했습니다). 8.

마지막으로 윈도우 7 홈에서 테스트가 아닌 윈도우, 다음과 같이 @damryfbfnetsi 자신의 의견에 pointed out, 당신은 대신 RuntimeProcessBuilder를 사용해야합니다 같이 :

면책 조항

public static void main(String[] args) {   
    try { 

     System.out.println("-- Setting up WLAN --"); 
     String netshCommand = "netsh wlan set hostednetwork mode=allow ssid=\"YourSSID\" key=\"YourPassword\" & exit"; 
     String[] elevateCommand = new String[]{"./Release/elevate.exe", "-wait", "-k", "prog", netshCommand}; 
     ProcessBuilder pb1 = new ProcessBuilder(elevateCommand); 
     Process p1 = pb1.start(); 
     p1.waitFor(); 

     System.out.println("-- Starting WLAN --"); 
     netshCommand = "netsh wlan start hostednetwork & exit"; 
     elevateCommand = new String[]{"./Release/elevate.exe", "-wait", "-k", "prog", netshCommand}; 
     ProcessBuilder pb2 = new ProcessBuilder(elevateCommand); 
     Process p2 = pb2.start(); 
     p2.waitFor(); 

     System.out.println("-- Setting up IPv4 interface --"); 
     netshCommand = "netsh interface ipv4 set address \"Conexión de red inalámbrica\" static 192.168.0.102 255.255.255.0 192.168.0.254 & exit"; 
     elevateCommand = new String[]{"./Release/elevate.exe", "-wait", "-k", "prog", netshCommand}; 
     ProcessBuilder pb3 = new ProcessBuilder(elevateCommand); 
     Process p3 = pb3.start(); 
     p3.waitFor(); 

     System.out.println("-- Getting IPv4 interface dump --"); 
     netshCommand = "netsh interface ipv4 dump"; 
     ProcessBuilder pb4 = new ProcessBuilder("cmd.exe", "/c", netshCommand); 
     Process p4 = pb4.start(); 

     System.out.println("-- Printing IPv4 interface dump --"); 
     BufferedReader bfr = new BufferedReader(new InputStreamReader(p4.getInputStream(),"ISO-8859-1")); 
     String output; 
     while((output = bfr.readLine()) != null){ 
      System.out.println(output); 
     } 

    } catch (IOException | InterruptedException ex) { 
     ex.printStackTrace(); 
    } 

} 

참고 : netshCommand& exit로 끝납니다. 그럴 수 없으면 cmd 콘솔을 열고 elevate.exe을 열어 둘 수 있기 때문입니다.

출력 (스페인 단어 미안하지만 난 그 언어에 내 Windows가) 다음과 같아야합니다

-- Setting up WLAN -- 
-- Starting WLAN -- 
-- Setting up IPv4 interface -- 
-- Getting IPv4 interface dump -- 
-- Printing IPv4 interface dump -- 

#---------------------------------- 
# Configuración de IPv4 
#---------------------------------- 
pushd interface ipv4 

reset set global icmpredirects=enabled 
add route prefix=0.0.0.0/0 
interface="Conexión de red inalámbrica" nexthop=192.168.0.254 metric=1 publish=Sí 
add address name="Conexión de red inalámbrica" address=192.168.0.102 mask=255.255.255.0 

popd 
# Fin de la configuración de IPv4 
+0

@ Danil 그래서, 작동 했나요? – dic19

관련 문제