
本地端口监听
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点半,不容易,望楼主采纳,有什么问题可以问我
下面是一个解决方案 , 用到 Morena 60 Framework 框架 里的 javaTwain功能 , 貌似搜了一下
好像要收费的,不过你可以找找是否有破解版的,没有的话,那就只有走偏门了 看是否能通过反编译 ,看改源代码了
RE:
javatwain may be a powerful solution,you can go to >
1得到局域网网段,可由自己机器的IP来确定 (也可以手动获取主机IP-CMD-ipconfig /all)
2根据IP类型,一次遍历局域网内IP地址
JAVA类,编译之后直接运行便可以得到局域网内所有IP,具体怎样使用你自己编写相应代码调用便可
代码如下::
package bean;
import javaio;
import javautil;
public class Ip{
static public HashMap ping; //ping 后的结果集
public HashMap getPing(){ //用来得到ping后的结果集
return ping;
}
//当前线程的数量, 防止过多线程摧毁电脑
static int threadCount = 0;
public Ip() {
ping = new HashMap();
}
public void Ping(String ip) throws Exception{
//最多30个线程
while(threadCount>30)
Threadsleep(50);
threadCount +=1;
PingIp p = new PingIp(ip);
pstart();
}
public void PingAll() throws Exception{
//首先得到本机的IP,得到网段
InetAddress host = InetAddressgetLocalHost();
String hostAddress = hostgetHostAddress();
int k=0;
k=hostAddresslastIndexOf("");
String ss = hostAddresssubstring(0,k+1);
for(int i=1;i <=255;i++){ //对所有局域网Ip
String iip=ss+i;
Ping(iip);
}
//等着所有Ping结束
while(threadCount>0)
Threadsleep(50);
}
public static void main(String[] args) throws Exception{
Ip ip= new Ip();
ipPingAll();
javautilSet entries = pingentrySet();
Iterator iter=entriesiterator();
String k;
while(iterhasNext()){
MapEntry entry=(MapEntry)iternext();
String key=(String)entrygetKey();
String value=(String)entrygetValue();
if(valueequals("true"))
Systemoutprintln(key+"-->"+value);
}
}
class PingIp extends Thread{
public String ip; // IP
public PingIp(String ip){
thisip=ip;
}
public void run(){
try{
Process p= RuntimegetRuntime()exec ("ping "+ip+ " -w 300 -n 1");
InputStreamReader ir = new InputStreamReader(pgetInputStream());
LineNumberReader input = new LineNumberReader (ir);
//读取结果行
for (int i=1 ; i <7; i++)
inputreadLine();
String line= inputreadLine();
if (linelength() <17 || linesubstring(8,17)equals("timed out"))
pingput(ip,"false");
else
pingput(ip,"true");
//线程结束
threadCount -= 1;
}catch (IOException e){}
}
}
}
代码都不舍得贴上了?
你那代码逻辑错误了,你传入文件后
public void foundJavaFile(File fileSrc)
{
if(fileSrcisDirectory){ //是文件夹类型就遍历文件夹
File[] files = fileSrclistFiles();
for (File f : files) {
if (fisDirectory()) {
list(fgetPath());
} else {
if(fgetNameendWith(java)){
Systemoutprintln(fgetName());
count++;
}
}
else{ //传入的是普通文件就直接判断是否是java文件
if(fgetNameendWith(java)){
Systemoutprintln(fgetName());
count++;
}
}
}
我这没java开发环境,是文本里改的,自己测试下吧。
import javaio;
public class Demo {
public static void main(String[] args) throws Exception {
Systemoutprintln(ThreadcurrentThread()getName()+"抓取的内容:");
getFiles(new File("E:\\aa"));
}
private static void getFiles(File pathName){
File[] files = pathNamelistFiles();
for(File file : files){
if(!fileisHidden() && fileisDirectory()){
new Thread(){
public void run(){
getFiles(file);
Systemoutprintln(ThreadcurrentThread()getName()+"抓取到的内容:");
}
}start();
}else{
new FileFilter() {
public boolean accept(File pathname) {
//如果要抓取别的,可以修改xx,我这里测试使用txt
boolean flag = pathnamegetName()endsWith("txt");
if(flag){
Systemoutprintln("\t"+pathname);
}
return flag;
}
}accept(file);
}
}
}
}
提示:我这程序一个文件夹一个线程,本身main方法是一个线程。
//测试结果:
main抓取的内容:
E:\aa\aa1txt
E:\aa\复件 aa1txt
E:\aa\bb\复件 (2) bb2txt
E:\aa\bb\复件 (3) bb2txt
E:\aa\bb\复件 (4) bb2txt
Thread-0抓取到的内容:
E:\aa\复件 bb\bb1txt
E:\aa\复件 bb\bb2txt
E:\aa\复件 bb\复件 bb2txt
Thread-1抓取到的内容:
以上就是关于谁有java本地监听与远程端口扫描 源程序全部的内容,包括:谁有java本地监听与远程端口扫描 源程序、用java程序来获取扫描仪里面的数据、java怎样扫描局域网内的设备信息,并将信息写入到数据库。比如:IP、MAC地址、Hostname等。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)