谁有java本地监听与远程端口扫描 源程序
本地端口监听
import javaioIOException;import javanetServerSocket;
import javanetSocket;
import javautilconcurrentExecutorService;
import javautilconcurrentExecutors;
public class SocketServer
{
private ServerSocket serverSocket;
private ExecutorService executorService;// 线程池
private final int POOL_SIZE = 600;// 单个CPU线程池大小
public SocketServer() throws IOException
{
serverSocket = new ServerSocket(9888);//监听的端口号
// Runtime的availableProcessor()方法返回当前系统的CPU数目
executorService = ExecutorsnewFixedThreadPool(RuntimegetRuntime()availableProcessors() POOL_SIZE);
Systemoutprintln("服务器启动");
}
public void service()
{
while (true)
{
Socket socket = null;
try
{
// 接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
socket = serverSocketaccept();
executorServiceexecute(new Handlers(socket));
//这里就是放业务逻辑的地方例如获取数据等等
} catch (Exception e)
{
eprintStackTrace();
Systemoutprintln("socket Exception:" + e);
}
}
}
public static void main(String[] args) throws IOException
{
//Thread thread = new Thread(new PringtThread());
//threadstart();
new SocketServer()service();
}
}
端口扫描代码
import javaioIOException;
import javanetSocket;public class SearchPort implements Runnable
{
public static void main(String[] args)
{
SearchPort searchPort = new SearchPort();
Thread thread = new Thread(searchPort);
threadstart();
}
@Override
public void run()
{
searchPort("19216812", 0, 9999);
}
public void searchPort(String ip,int begin, int end) {
// 1-65535
Socket s = null;
for (int i = begin; i < end; i++) {
boolean flag = false;
try {
s = new Socket(ip, i);
flag = sisConnected();
} catch (IOException e) {
// TODO Auto-generated catch block
// eprintStackTrace();
}
if (flag) {
Systemoutprintln("port " + i + " is open");
try {
sclose();
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
} else {
// Systemoutprintln("port " + i + " is close");
}
}
//Systemoutprintln("seach port :" + begin + " to " + end + " ok");
}
}
第一个端口监听的采用了线程池的技术,当大数据来的时候也不怕(某大型企业的部分源码),第二个例子是端口扫描器,采用了多线程扫描,代码直接复制就可以用的,从10点50分打代码11点半,不容易,望楼主采纳,有什么问题可以问我
目标: 使用JDK自带的JVM监测工具调试内存使用情况及堆栈问题排查
简要说明: 在实际项目开发过程中,如果使用多线程,但是没有控制好线程数量的情况下,就会出现堆内存溢出问题,导致功能服务宕机,如果严重很可能导致服务器宕机问题。当出现内存溢出时,只能看到简单的内存溢出日志,排查问题毫无头绪,不知道哪里线程出现问题,这样就很难解决问题;
这时我们就可以通过JDK自带的JVM监控工具查看每个线程的生命周期以及相关源码追溯,这样就可以清楚明了的看清问题出现在哪里,然后根据实际情况解决问题;
通过上图可以看到本地服务中所有的线程及相关状态,如果线程出现问题需要排查时,需要查看具体执行的方法,那么就需要快照方式查看,具体方式如下:
点击抽样器,然后选择CPU抽样,点击停止,在点击下面的快照按钮,就可以获取所有所有线程的一次快照,然后就可以看到每个线程执行的源码,具体操作如下图:
通过上述的操作即可查看线程具体涉及的源码,从而排查问题!
上面说的是本地服务监测,但是有很多情况本地服务是排查不到问题的,只有在服务器上面才能看出问题,那么我们就需要远程连接服务器上面服务,进行监控,查看具体线程的运行情况及源码分析
远程配置需要在启动Java服务的时候,在启动命令上面添加指定启动参数,这里提供的命令是正常情况下完整的启动jar包的命令,具体命令参数也很清楚,命令如下:
ps:port是监控所需的端口,也就是启动服务指定的端口,但是端口要对外开放,一般的普通服务端口是不会对完开放的,这一点需要注意
hostname是对应监控的ip,我这里用的就是服务器ip,如果连接不上的情况下,可以尝试使用 hostname -i 获取的对应ip,具体情况具体分析
然后启动服务之后,选中远程右键添加远程主机,输入远程主机ip后确定即可,然后选择主机ip,右键添加JMX连接,输入设定的端口号,点击确定即可,然后就可以监控远程服务器了,接下来的查看线程的情况、监控服务情况及排查问题使用快照,就和上面本地的操作一样了!
经过上述操作就可以通过JDK自带的监控软件,进行监控Java程序的运行情况以及服务器的运行情况啦!
本人原著,如有问题欢迎大家指正,共同进步!
你得明白,启动远程的服务,首先得连接到服务器上去。
下面有两种方法:1、通过自定义程序;
2、使用现成的telnet或ssh(推荐)
方法1、首先得看linux服务器的限制,如果服务器允许自定义的登录,
并且你在服务器上运行了一个监听某端口(如1234)的程序,
写一个client端,用socket连接上去,就可以执行了。
方法2、如果服务器支持ssh或者telnet登录,且
允许远程执行脚本的话,可以直接登录进去(当然这算是
使用现成的程序吧,ssh更安全,不过或许不是你想要的。)
有现成的ssh服务,直接使用就是了,自己写的肯定没这个安全~~
要用java的话,应该也有现成的ssh客户端---
视频服务器好! 电脑没有什么特别的要求 一般就够用(当然高了更好) 电源和风扇要好一些 因为要长时间工作 硬盘根据你要保存录象天数来定 显卡建议独立的 其实监控那里卖的硬盘录象机就是一台电脑只不过机箱换成服务器的那种了 再有一点就是多了片视频采集卡 这个卡很关键 是连接摄像机和电脑的设备 最多接几个是由视频采集卡来定的 视频采集卡有1路的 4路的 8路的等 1路的就是可以接一个摄像机 4路的4个 8路的8个 视频采集卡建议你买海康威视 软件你买卡就带了 摄像机也分很多种 要根据自己的需要来购买QQ3882970 摄象枪就是我们监控系统中说到的枪机,枪机一般是不包含镜头长形的摄象机,但也有一体化摄象机也叫枪机,一体化一般都包含电动镜头,可以变倍。 云台是一个可以转动的机器,云台分球型云台,重型云台,全方位云台,水平云台,室内外云台。它的主要功能是带动摄象机实现各方位的监控。 云台解码器:当你用DVR或键盘控制云台转动的时候,他们发出的是数字信号,也就是协议。不同厂家的云台和控制设备他们的协议都是不同的。为了让云台读懂控制端发出的数字信号,中间必须要解码器来中转了。 视频服务器:就是把监控的视频图象资料通过视频服务器把视频全实时的传输外很远的地方。一般用这个的是不方便布线或在外地监控的 联系是,你说的这些东西差不多可以组成一个监控网络
0条评论