Java程序的问题

我下载了一段Java程序,是一个简单的防火墙,但是代码看不懂,哪位高手可以给我做个注释?万分感谢~ 代码太长,拷不过来,大家去我博客看吧~
http://blog.csdn.net/zw19880919/archive/2010/01/22/5224566.aspx
这段代码可以在Eclipse上运行,进程里边也有javaw的显示,其实我做这个毕业设计,不用做那么全面,只做出监测注册表,可以修改;另外可以通过窗口的操作实现屏蔽一些网站、禁止其他用户访问就可以了。我对java不是那么精通,所以不知道怎么入手才好。各位的回答很感谢,就是有些不懂的,希望能给点直白的解释~

首先,你要知道一点,linux/unix服务器的防火墙是通过维护iptables表进行的。其次,这个代码的大概意思是通过java启动netstart -nt命令进程去维护iptables表。具体的后面我会解释
netstart -nt命令就是远程启动命令行,然后在客户端输入的命令将会在服务器端运行。那么下面的问题就是使用java在客户端运行这个命令,使用java接受输入,输出到服务器配置iptable防火墙表了。
Runtime runtime = Runtime.getRuntime();
java中要运行操作系统中的命令,都必须从Runtime对象中获取一个实例,然后调用其exec方法去运行系统的某个进程。这个进程,在java中使用Process表示,也就是说,你使用Runtime实例运行一个操作系统命令,并获得Process进程:
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec("netstart -nt");
这样,p就代表了你客户端启动的netstart进程。而这个进程是向服务器端输入命令的,所以,从Process中能够获取输入流:
InputStream input = process.getInputStream();
最后,dynamicBanIP方法中的一个while循环,就是从这个输入流中读取信息,分解成iptable格式的信息返回一个集合
最后在ban方法中再次使用runtime运行“iptables -D INPUT -i eth0 -j DROP -p tcp --dport 80 -s”这个命令去修改iptables表
希望对你有帮助
看了你补充 那么我会告诉你这段代码对你没有任何左右 因为他是基于linux系统的 而且进程里面javaw那个是java虚拟机在运行 你找错方向拉 这个线程方面的编程 调用注册表的代码我有的
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-01-22
这个程序主要功能是调用外部程序来实现,Java部分的代码主要是做一些数据的解析和设置的功能.
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(NETSTAT);
这两句是执行外部程序,然后通过
InputStream input = process.getInputStream();
InputStreamReader inputReader = new InputStreamReader(input);
BufferedReader reader = new BufferedReader(inputReader);
reader.readLine();
reader.readLine();
来获取外部程序输出到stdin上的数据,接着对数据进行解析.
而数据的格式,需要去看外部程序的相关信息.

这个程序的通用性不强,你要在哪个版本的linux上运行,需要在这个linux上运行以下这个外部程序,看看它们的输出数据是什么格式,然后再进行处理.

建议你看看netstat和iptables,在linux中执行下面三个命令看看.
public static final String NETSTAT = "netstat -nt"; //$NON-NLS-1$

public static final String IP_INSERT = "iptables -I INPUT -i eth0 -j DROP -p tcp --dport 80 -s "; //$NON-NLS-1$

public static final String IP_DEL = "iptables -D INPUT -i eth0 -j DROP -p tcp --dport 80 -s "; //$NON-NLS-1$
第2个回答  2010-01-22
很感兴趣,但看不懂.没想到JAVA还有这本事.
帮顶一个,呵呵!
但是我的执行没显示.在dynamicBanIP的这个地方:
InputStream input = process.getInputStream();
InputStreamReader inputReader = new InputStreamReader(input);
BufferedReader reader = new BufferedReader(inputReader);
reader.readLine();
readLine一句被阻塞住了.
第3个回答  2010-01-22
这个代码好像运行不了哦

为什么这个JAVA程序提示错误:需要class,interface或enum
这是Java文件的编码导致的问题,通常使用javacFirstSample.java编译UTF-8编码的.java源文件。没有指定编码参数encoding的情况下,默认使用的是GBK编码 当编译器用GBK编码来编译UTF-8文件时,就会把UTF-8编码文件的3个字节的文件头,按照GBK中汉字占2字节、英文占1字节的特性解码成了“乱码”的两个汉字。

java无法运行原因
编译错误可能包括语法错误、缺少依赖库、未定义的变量等。在编译阶段,编译器会生成错误信息,你可以仔细查看错误信息并解决问题。4. 依赖库错误:Java程序可能依赖一些外部库或框架。如果依赖库或框架未正确安装或配置,那么Java程序可能无法正常运行。你可以检查程序的依赖关系,并确保所需的库和框架已正确...

编写JAVA程序遇到的问题汇总(二)
在处理JAVA编程中,遇到的一个典型问题是关于Elasticsearch的Bean冲突,当你试图创建'discussPostRepository'时,收到了如下的错误信息:Caused by: org.springframework.beans.factory.support.BeanDefinitionOverrideException。问题在于,由于第三方Spring库,可能出现了名为'discussPostRepository'的Bean定义冲突,...

java运行显示“找不到或无法加载主类”怎么回事?
3. 编译问题:如果你的Java程序没有被正确编译,或者编译后的类文件在运行时被破坏,也可能出现这个错误。确保你的Java程序已经成功编译,并且类文件在磁盘上是完整且未损坏的。4. Java环境配置问题:在某些情况下,Java环境变量配置不正确也可能导致这个问题。检查你的JAVA_HOME环境变量是否设置正确,以及...

java程序包有问题dll不能运行解决方式是什么_java程序包有问题dll不...
为了解决这类问题,首先需要确认您的DLL文件与Java程序是否兼容。若DLL文件由其他编程语言编写,必须通过Java Native Interface (JNI) 确保两者可以交互。其次,需检查DLL文件的路径是否正确。可以使用System.loadLibrary()方法加载DLL文件,并确保路径无误,无论是绝对路径还是相对路径。同时,需确保Java程序...

编写JAVA程序遇到的问题汇总(二)
bound. 这种情况通常是由于第三方Spring支持的库的Bean引起的名称冲突。遇到这种情况时,我们需要确定哪个冲突的Bean属于我们的应用程序,以确定是否可以使用上述任何解决方案。如果我们无法更改任何Bean定义,那么将Spring Boot配置为允许Bean覆盖可能是一种解决方法。要启用Bean覆盖,我们会在application.properties...

java中文乱码问题要怎么解决?
解决Java中文乱码问题,先从其根源原因出发。乱码出现的原因是Java代码使用的是UTF-8编码,然而在某些情况下,如CMD环境,其默认编码为gbk,编码格式不一致导致了乱码现象。为避免此类问题,建议采取如下措施:首先,避免在类名中使用中文,这是避免乱码问题的根本所在。其次,在进行Java程序调试时,尽量使用...

java 程序的内存溢出问题如何解决?
Java程序的内存溢出问题可以通过以下几种方式来解决:1. 增加JVM堆内存大小:可以通过在启动JVM时设置-Xmx和-Xms参数来调整堆内存的大小。例如,"-Xms256m -Xmx1024m"表示最小堆内存为256MB,最大堆内存为1024MB。2. 优化代码:检查代码中是否存在内存泄漏或者不必要的大对象创建。例如,使用完的大...

为什么这个JAVA程序提示错误:需要class,interface或enum
当你在编写Java程序时遇到“需要class,interface或enum”的错误,问题往往源于源文件的编码问题。默认情况下,Java编译器(javac)假设文件是用GBK编码的,但如果你的源文件实际上是UTF-8编码的,这就会导致编译器无法正确解析文件开头的字节,从而引发错误。解决这个问题的关键在于正确指定编码。对于UTF-8...

在做java程序的时候大家都遇到什么问题
1、开发环境,Java的开发环境五花八门,开发环境本身的bug对你的开发就会造成影响。我比较中意的是eclipse,更新快(虽然bug也多,但是解决方法在网上一般都找得到),用的人多。2、各种框架,由于java是开源的,sun鼓励大家自主创新,于是java就有各种不同的开源解决方案。如持久化有:hibernate、spring mvc ...

相似回答