2013-04-06 10 views
8

यह मेरी पहली बार पोस्टिंग है, इसलिए मुझे सच में यकीन नहीं है कि क्या कहना है/पूछना है। वैसे भी, मैं एक साधारण जावा प्रोग्राम बनाने की कोशिश कर रहा हूं जो जावा प्रोग्राम से कमांड प्रॉम्प्ट कमांड चलाता है, मुख्य रूप से पिंग बाढ़ के लिए उपयोग किया जाता है (पिंग बाढ़ स्वयं)।कमांड प्रॉम्प्ट कमांड चलाने के लिए जावा प्रोग्राम का उपयोग कैसे करें?

यहाँ मेरे वर्तमान कोड

public class Core extends JFrame { 

JTextField ipTextField; 

int packets = 0; 

boolean running = false; 

public Core() { 
    super("Fatique"); 

    Container container = getContentPane(); 
    JButton bAttack = new JButton("Start Attack"); 
    JButton bStop = new JButton("Stop Attack"); 
    JPanel jPanel = new JPanel(); 

    container.setLayout(new FlowLayout()); 
    ipTextField = new JTextField("IP Address", 30); 
    container.add(ipTextField); 

    bAttack.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      String input = ipTextField.getText(); 
      String[] value = input.split(":"); 

      int amountOfPackets = Integer.parseInt(value[1]); 

      exec("cmd /c" + input + " -t -n " + amountOfPackets); 
      running = true; 
     } 
    }); 

    bStop.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      stop(); 
     } 
    }); 

    if(!running) { 
     jPanel.add(bAttack); 
    } else { 
     jPanel.add(bStop); 
    } 

    add(jPanel); 
} 

public void exec(String cmd) { 
    try { 
     Process p = Runtime.getRuntime().exec(cmd); 
     System.out.println(getOutput(p) + " - " + getPacketsSent()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public String getOutput(Process p) { 
    String output = null; 

    try { 
     BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line = null; 
     while ((line = in.readLine()) != null) { 
      output = line; 
      packets++; 
     } 

     return output; 
    } catch (IOException e) { 
     System.err.println(e.getStackTrace()); 
    } 

    return null; 
} 

public int getPacketsSent() { 
    return packets; 
} 

public void stop() { 
    exec("cmd /c break"); 
    running = false; 
} 

public static void main(String[] args) { 
    Core c = new Core(); 
    c.setSize(500, 300); 
    c.setVisible(true); 
    c.setResizable(false); 
    c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    c.setLocationRelativeTo(null); 
} 

मैं, जावा में काफी नया कर रहा हूँ ताकि मैं क्या यह करना चाहते हैं नहीं हो सकता है। ":" क्या मैं इसे क्या करना चाहते हैं मैं पाठ फ़ील्ड में एक आईपी पता दर्ज करें, और साथ इसे विभाजित है, और उसके बाद पैकेट की राशि उदाहरण के लिए

127.0.0.1:100 

अब जब मैं उपयोग करने के लिए कि कोशिश हालांकि आईपी ​​और पैकेट राशि, यह "शून्य - 0" (निष्पादन विधि से) लौटाती है, और मुझे यह भी यकीन नहीं है कि यह पिंग से संबंधित कुछ भी करता है।

जो मैं पूरा करने की कोशिश कर रहा हूं वह है जैसा कि मैंने पहले ही कहा है, खुद को बाढ़ पिंग कर रहा है, और उसके बाद जो कुछ भी मुझे प्रतिक्रिया के रूप में मिलता है, हालांकि मुझे नहीं पता कि यह कोड उससे संबंधित कुछ भी करता है, तो मैं ज्यादातर कोडिंग करते समय तर्क का उपयोग करता हूं जावा।

public String getOutput(Process p) { 
    String output = null; 

    try { 
     BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line = null; 
     while ((line = in.readLine()) != null) { 
      output = line; 
      packets++; 
     } 

     return output; 
    } catch (IOException e) { 
     System.err.println(e.getStackTrace()); 
    } 

    return null; 
} 

क्या कोई मुझे समझा सकता है कि मेरा कोड कोड क्यों काम नहीं कर रहा है कि मैं इसे कैसे काम करना चाहता हूं? कृपया न्याय न करें, जैसा कि मैंने पहले ही कहा है, मैं जावा प्रोग्रामिंग के लिए काफी नया हूं।

संपादित करें: यहां जो कुछ मैं पूरा करने की कोशिश कर रहा हूं उसका त्वरित "जानकारीपूर्ण" स्पष्टीकरण यहां दिया गया है।

  1. मैं एक आईपी पता टाइप करता हूं और कितने पैकेट भेजना चाहता हूं। इस स्पष्टीकरण में, मैं लोकलहोस्ट आईपी और 5 पैकेट का उपयोग कर रहा हूं। About to send 5 packets to localhost ip
  2. मैं हमला शुरू करता हूं। इस भाग में, मैं कार्यक्रम cmd शीघ्र आदेश

    पिंग 127.0.0.1 आयकर -n 5

    127.0.0.1 आईपी है कि मैं अपने कार्यक्रम में पाठ फ़ील्ड में डाल जा रहा है चलाना चाहते हैं, और 5 है मैंने टेक्स्टफील्ड में रखे पैकेट की मात्रा।

  3. मैं हमले शुरू कर दिया है, तो यह क्या कमांड प्रॉम्प्ट में होने चाहिए: 5 packets sent to locahost

    भाषा फिनिश है, लेकिन अभी भी एक ही बात।

    यह जो मैं पूरा करने की कोशिश कर रहा हूं, उसका मूल स्पष्टीकरण है, उम्मीद है कि कोई समझता है और बता सकता है कि मेरा कोड क्यों काम नहीं कर रहा है, या काम कर रहा है लेकिन ग्रहण कंसोल में उचित लाइनों को प्रिंट नहीं कर रहा है।

+0

प्रक्रिया 'इनपुट स्ट्रीम के कच्चे आउटपुट को प्रिंट करने का प्रयास करें। – Zyerah

+0

अभी भी शून्य, हालांकि मैंने शायद ऐसा नहीं किया जो आपने मुझे करने के लिए कहा था। Println (in.readLine()); मैंने यही कोशिश की, अब यह "शून्य शून्य - 1" – Woobie

उत्तर

4

कुछ इस तरह का प्रयास करें:

try { 
     Runtime rt = Runtime.getRuntime(); 
     Process p = rt.exec("ping 192.168.16.67"); 
     InputStream in = p.getInputStream(); 
     OutputStream out = p.getOutputStream(); 
     InputStream err = p.getErrorStream(); 
     p.destroy(); 
} catch(Exception exc) {} 

उसके बाद, आप लगातार ping आदेश उत्पादन पार्स करने के लिए out चर पढ़ने के लिए होगा।

+0

लौटाता है यह उन्हें यह जानने में मदद नहीं करता कि उन्होंने क्या किया है। ध्यान दें, उनका सवाल यह नहीं था कि 'मैं यह कैसे कर सकता हूं?' बल्कि "यह क्यों काम नहीं कर रहा है?" इस प्रकार, यह वास्तव में सवाल का जवाब नहीं देता है। – Zyerah

+0

^बिल्कुल, धन्यवाद। मैंने अभी देखा है कि मैं इसे भूलना भूल गया कमांड में "पिंग" .. अब जब भी मैं स्टार्ट बटन दबाता हूं तो पैकेट int 1 ऊपर जा रहा है, जो मैं नहीं जा रहा था। आउटपुट अभी भी शून्य है। – Woobie

4

आपके getOutput विधि में कोई समस्या है। ऐसा लगता है कि आप आउटपुट की हर पंक्ति को इकट्ठा करना चाहते हैं। लेकिन वास्तव में, चूंकि आप lineoutput पर असाइन कर रहे हैं, तो आप केवल स्ट्रीम के अंत से पहले अंतिम पंक्ति वापस कर देंगे।

इसे ठीक करने के बदलने

output = line; 

को

output += line + "\n"; 

या अधिक सही होने के लिए:

final String LINE_SEPARATOR = System.getProperty("line.separator"); 
:

output += line + LINE_SEPARATOR; 

जहां पहले से घोषित रूप में उत्तरार्द्ध


कि सीधे व्याख्या नहीं करता है तुम क्यों null हो रही है, लेकिन यह हो सकता है क्योंकि आदेश आप चल रहे हैं 'त्रुटि' के बजाय 'उत्पादन' धारा धारा के उत्पादन लेखन है।

+0

अभी भी शून्य वापस आ रहा है। अगर मैं बस System.out का उपयोग करता हूं। println (लाइन), यह काम करता है, लेकिन यह नहीं कि मैं इसे कैसे चाहता हूं। मैं इसे प्रिंट करना चाहता हूं, उदाहरण के लिए, जब मैं "पिंग 127.0.0.1 -t -n 1" टाइप करता हूं, तो यह जा रहा है जवाब देने के लिए "127.0.0.1 से जवाब: बाइट्स = 32 समय <1ms टीटीएल = 128", और यही वह है जिसे मैं हर बार प्रिंट करना चाहता हूं। मेरे प्रोग्राम में, यदि मैं "127.0.0.1otic" टाइप करता हूं, तो यह है हर बार प्रतिक्रिया प्रिंट करने जा रहा है, जो इस मामले में 5 होगा, क्योंकि यह मेरे द्वारा भेजे गए पैकेट की मात्रा है। मेरे वर्तमान कोड के साथ, कोई फर्क नहीं पड़ता कि मैं कितने पैकेट भेजता हूं, यह प्रिंट करता है -> – Woobie

+0

"पिंग -pyynt ": tuntematon है" nt "127.0.0.1।" – Woobie

0
bAttack.addActionListener(new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     String input = ipTextField.getText(); 
     String[] value = input.split(":"); 

     int amountOfPackets = Integer.parseInt(value[1]); 

     try { 
      p=Runtime.getRuntime().exec("ping -n "+amountOfPackets+" "+value[0]); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     running = true; 


    } 

बस आपके कोड का एक छोटा सा संशोधन। आउटपुट प्राप्त करें:

public String getOutput(Process p) { 
String output = null; 

try { 
    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line = null; 
    while ((line = in.readLine()) != null) { 
     output =output+ line+"\n"; 
     packets++; 
    } 

    return output; 
} catch (IOException e) { 
    System.err.println(e.getStackTrace()); 
} 

return null; 
} 

यहां आउटपुट JTextArea है जिसे मैंने पिंग प्रक्रिया के आउटपुट को प्रदर्शित करने के लिए लिया है। मैं आपको आउटपुट नहीं दिखा सकता क्योंकि मुझे प्रतिष्ठा नहीं है।

मुझे नहीं पता कि पहली पंक्ति शून्य क्यों है। वैसे भी, यह काम करता है।

आशा है कि यह आपकी मदद करेगा। अच्छा समय कोडिंग है।

संबंधित मुद्दे