请教大神,怎么使用java实现UDP端口扫描
给你个UDP服务端与客户端的示例:
服务端代码:
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class UDPMulticastServer {
final static int RECEIVE_LENGTH = 1024;
static String multicastHost = "224.0.0.1";
static int localPort = 9998;
public static void main(String[] args) throws Exception {
InetAddress receiveAddress = InetAddress.getByName(multicastHost);
if (!receiveAddress.isMulticastAddress()) {// 测试是否为多播地址
throw new Exception("请使用多播地址");
}
int port = localPort;
MulticastSocket receiveMulticast = new MulticastSocket(port);
receiveMulticast.joinGroup(receiveAddress);
boolean isStop = false;
while(!isStop){
DatagramPacket dp = new DatagramPacket(new byte[RECEIVE_LENGTH], RECEIVE_LENGTH);
receiveMulticast.receive(dp);
String data = new String(dp.getData()).trim();
System.out.println(data);
if("exit".equals(data)){
System.out.println("程序退出");
isStop = true;
}
}
receiveMulticast.close();
}
}
客户端代码:
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class UDPMulticastClient {
static String destAddressStr = "224.0.0.1";
static int destPortInt = 9998;
static int TTLTime = 4;
public static void main(String[] args) throws Exception {
InetAddress destAddress = InetAddress.getByName(destAddressStr);
if(!destAddress.isMulticastAddress()){//检测该地址是否是多播地址
throw new Exception("地址不是多播地址");
}
int destPort = destPortInt;
MulticastSocket multiSocket =new MulticastSocket();
// int TTL = TTLTime;
// multiSocket.setTimeToLive(TTL);
byte[] sendMSG = "exit".getBytes();
DatagramPacket dp = new DatagramPacket(sendMSG, sendMSG.length, destAddress , destPort);
multiSocket.send(dp);
multiSocket.close();
}
}
端口扫描器的用法?
扫描器使用方法大家好很高兴你能进如我们的第四课!由先在起所有的课将由我来主讲,由于课程涉及
的是网络最高安全问题,所以我不得不警告各位,你要清楚的认识到你在干什么,其实
第四课的内容我们换了又换,有很多是一些攻击性很强的,我不得不CUT,所以次文才迟
迟出来!!同时我也希望进入这一课时的学友能多多的帮助其它人!
在INTERNET安全领域,扫描器可以说是黑客的基本武器,
一个好的TCP端口扫描器相当与几百个合法用户的口令及
密码是等同的,这样说一点也不过分!
1,什么是扫描器
扫描器是一种自动检测远程或本地主机安全性弱点的程序,
通过使用扫描器你可一不留痕迹的发现远程服务器的各种TCP
端口的分配及提供的服务!和它们的软件版本!这就能让我们
间接的或直观的了解到远程主机所存在的安全问题。
2,工作原理
扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标
给予的回答,通过这种方法,可以搜集到很多关于目标主机的
各种有用的信息(比如:是否能用匿名登陆!是否有可写的FTP
目录,是否能用TELNET,HTTPD是用ROOT还是nobady在跑!)
3,扫描器的运行平台!
尽管大多数的工作站是用UNIX的,由于UNIX的应用软件的可移殖
性,如今的扫描器以有了支持各种平台,这一点大大方便了许多
单机的用户!但同时也带来了更多的网络安全问题,这句老话我想
大家一定是听到过很多次!------网络安全刻不容缓!!!
4,扫描器能干什么?
扫描器并不是一个直接的攻击网络漏洞的程序,它不同于第二课中
的许多NUCK程序!它仅仅能帮助我们发现目标机的某些内在的弱点
而这些现存的弱点可能是(请看清楚可能是,并非一定)破坏目标
机安全关键,但是我想说明的是对于一个刚刚入们的黑客人来说
这些数据对他来说无疑是一个毫无价值的数据集合!,而对一个
掌握和精通各种网络应用程序的漏洞的黑客来说这就不仅仅是一个简单
的数据集合!他的价值远超过几百个有用的帐号!-------知识需要
积累!!!
5,种类
1。NNS(网络安全扫描器)
用PERL编写,工作在Sunos4.1.3
进行下面的常规的扫描
Sendmail ,TFTP,匿名FTP,Hosts.equive,Xhost
增强扫描
Apple Talk,
Novell
LAN管理员网络
取得指定域的列表或报告!
用PING命令确定指定主机是否是活性的,
扫描目标机端口
报告指定地址的漏洞
你可以到这个地址下载
2.STROBE(超级优化TCP端口检测程序)
它是一个TCP端口的扫描器,能快速的识别指定机器上正运行
什么服务,
用于扫描网络漏洞
SATAN(安全管理员的网络分析工具)
扫描远程主机的许多已知的漏洞
FTPD中可写的目录
NFS
NIS
PSH
SENDMAIL
X服务
Jakal(秘密扫描器)
可以不留痕迹的扫描
IdenTCPscan
CONNECT 扫描TFTP服务器子网
ESPScan 扫描FSP服务器
XSCAN
实例扫描
或用关键字搜寻!你能了解到更多的情况!
1,UNIX平台的SAFEsuite
safesuite的组成,INTERNET,WEB,防火墙扫描!
safesuite的攻击,sendmail,FTP,NNTP,TELNET,RPC,NFS.
ISS的开发小组在最新的版本里还增设了IP欺骗和拒绝服务的攻击,用以支持对主机安全
性的分析。
可以运行的平台:Sun OS 4.1.3 up,SoLaris 2.0 up,HP/UX9.05 up,IBM AIIX 3.2.5 u
p
Linux 1.2.x,Linux1.3.x,Linux 1.3.76+
安装:
解压后拷贝到指定的目录,你可用下面的命令来解!
tar -xvf ISS_XXX.tar
运行ISS.install开始安装!
由于扫描的结果太长我就不一一写出来了!!大家可以多试试!很多有用的安全信息都
在这些扫描结果里!!通过MIT的X窗口系统标准配置运行如SAVEsuite,X窗口的管理程
序是FVWM。
Network Toolbox
用于WINDOWS 95上的TCP/IP的应用程序,
默认扫描端口是!14个TCP/IP端口,
port 9,13,21,25,,37,79,80,110,111,512,513,514,
你可以通过设置属性来改变默认的配置!!
我不知道我上述的下载地址是否还有效!但我想你可一到一些国外著名的黑客站找到你
想要的一切!!
课后作业,请把你扫描的信息告诉我们,我们将在下一课拿出一些信息来加以分析,安
全漏洞出在哪里!并对各种可能发生的漏洞加以分析!!
什么是端口扫描器?它有什么作用?
s 扫描器是一款命令行下高速扫描利器,通过最新的瑞星杀毒软件测试
命令: s.exe syn ip1 ip2 端口号 /save
s.exe tcp ip1 ip2 端口号 线程数 /save
s.exe扫描器的使用说明
首先我解释下什么是S扫描器,S扫描器是针对微软ms04045漏洞出的一个扫描,原来作者出这东西
的目的是为了扫描这个漏洞,但现在已经变成我们黑客手中的兵器了,大家也许看过很多如何找肉鸡的
动画或刷QB的动画,那些动画里面很多都是用S扫描器来扫描肉鸡或别人电脑所开放的端口及一些漏洞,
都用这工具的好处是它的扫描速度实在是一个字---强! 今天我就来教下大家如何使用S扫描器。
简单说明下它的用处:
S扫描器是一个简单的使用两种常用的扫描方式进行端口扫描的端口扫描器程序.
可实现的功能是:
1.两种不同的扫描方式(SYN扫描和一般的connect扫描)
2.可以扫描单个IP或IP段所有端口
3.可以扫描单个IP或IP段单个端口
4.可以扫描单个IP或IP段用户定义的端口
5.可以显示打开端口的banner
6.可将结果写入文件
7.TCP扫描可自定义线程数
用法:scanner TCP/SYN StartIP [EndIP] Ports [Threads] [/Banner] [/Save]
参数说明:
TCP/SYN - TCP方式扫描或SYN方式扫描(SYN扫描需要在win 2k或以上系统才行),SYN扫描对本机无效
StartIP - 起始扫描的IP
EndIP - 结束扫描的IP,可选项,如果这一项没有,就只是对单个IP扫描
Ports - 可以是单个端口,连续的一段端口或非连续的端口
Threads - 使用最大线程数去扫描(SYN扫描不需要加这一项),不能超过1024线程
/Banner - 扫描端口时一并将Banner显示出来,这一选项只对TCP扫描有效
/Save - 将结果写入当前目录的Result.txt文件中去
打开S扫描器,下面我举几个例子演示下S扫描器的主要几个作用。
例子一:
S TCP 218.80.12.1 218.80.12.123 80 512
TCP扫描218.80.12.1到218.80.12.123这IP段中的80端口,最大并发线程是512
例子二:
S TCP 218.80.12.1 218.80.12.123 21,5631 512 /Banner
TCP扫描218.80.12.1到218.80.12.123这IP段中的21和5631端口,最大并发线程是512,并显示Banner
例子三:
S TCP 218.80.12.1 218.80.12.12 1-200 512
TCP扫描218.80.12.1到218.80.12.12这IP段中的1到200端口,最大并发线程是512
例子四:
S TCP 218.80.12.7 1-200 512
TCP扫描218.80.12.7这IP中的1到200端口,最大并发线程是512
例子五:
S SYN 218.80.12.7 1-65535 /Save
SYN扫描218.80.12.7这IP中的1到65535端口,将结果写入Result.txt
扫描结束后Result.txt就存放在你的S扫描器所在的目录里。刚才扫描的东西都在里面。
例子六:
S SYN 218.80.12.1 218.80.12.255 21 /Save
SYN扫描218.80.12.1到218.80.12.255这IP段中的21端口,将结果写入Result.txt
这个我重点说明一下,因为这条命令就是专门用来找肉鸡的,扫描一个IP段有没有开3389的或1433的
我示范下:S SYN 218.80.1.1 218.80.255.255 3389 /Save
注意:
1.SYN扫描是很依赖于扫描者和被扫描者的网速的,如果你是内网的系统,那你不一定可以使用SYN扫描的
,因为你的网关的类型会决定内网系统是否能进行SYN扫描.如果你的配置较低的话,我也不推荐使用
SYN扫描.SYN扫描速度是比TCP扫描的速度快很多的,但在稳定性方面却不是太好,所以自己决定使用
哪种模式进行扫描。
2.SYN扫描不需要线程那个参数,请看上面例子5和6
3.TCP扫描的最大并发线程不能超过1024.
4.使用SYN模式扫描,不能扫描Banner,具体为什么不能,请查看有关SYN的资料
5.内网用户的朋友可以用tcp扫描
关于S.exe 的用法和错误解释
S扫描器扫描命令是:
文件名 参数 起始IP 结束IP 要扫描的端口 保存
s SYN 61.0.0.0 61.255.255.255 1433 save
1433是SQL server 服务器端口
8080是代理服务器端口
如何用java语言实现端口扫描器
使用 DatagramSocket(int port) 建立socket(套间字)服务。
将数据打包到DatagramPacket中去
通过socket服务发送 (send()方法)
关闭资源
public static void main(String[] args) {
DatagramSocket ds = null; //建立套间字udpsocket服务
try {
ds = new DatagramSocket(8999); //实例化套间字,指定自己的port
} catch (SocketException e) {
System.out.println("Cannot open port!");
System.exit(1);
}
byte[] buf= "Hello, I am sender!".getBytes(); //数据
InetAddress destination = null ;
try {
destination = InetAddress.getByName("192.168.1.5"); //需要发送的地址
} catch (UnknownHostException e) {
System.out.println("Cannot open findhost!");
System.exit(1);
}
DatagramPacket dp =
new DatagramPacket(buf, buf.length, destination , 10000);
//打包到DatagramPacket类型中(DatagramSocket的send()方法接受此类,注意10000是接受地址的端口,不同于自己的端口!)
try {
ds.send(dp); //发送数据
} catch (IOException e) {
}
ds.close();
}
}
接收步骤:
使用 DatagramSocket(int port) 建立socket(套间字)服务。(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。
定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容
通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中
使用DatagramPacket的方法,提取数据。
关闭资源。
import java.net.*;
public class Rec {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(10000); //定义服务,监视端口上面的发送端口,注意不是send本身端口
byte[] buf = new byte[1024];//接受内容的大小,注意不要溢出
DatagramPacket dp = new DatagramPacket(buf,0,buf.length);//定义一个接收的包
ds.receive(dp);//将接受内容封装到包中
String data = new String(dp.getData(), 0, dp.getLength());//利用getData()方法取出内容
System.out.println(data);//打印内容
ds.close();//关闭资源
}
}
如何用java实现tcp connect,tcp syn端口扫描
connect比较简单,就是用Socket+多线程,每个端口创建一次连接,没连上是不会往下执行的,会抛出异常,网上有源码,都是这个方法。
syn和FIN还不知道咋实现,可以考虑用本地方法。
java扫描局域网的端口
直接上代码:
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PortScanner extends Thread {
private int[] p;
Socket ss = null;
public PortScanner(int[] p) {
this.p = p;
}
public static void main(String[] args) {
for (int i = 0; i 65535; i = i + 100) {
new PortScanner(new int[] { i + 1, i + 100 }).start();
}
}
@Override
public void run() {
for (int i = p[0]; i p[1]; i++) {
try {
ss = new Socket("8.8.8.8", i);
System.out.println("扫描到端口: " + i);
} catch (Exception e) {
// System.out.println("关闭端口: " + i);
}
}
}
}
0条大神的评论