使用udp端口扫描得到的结果准确吗_连接udp端口扫描

hacker|
187

求助高手vb6.0用winsock的TCP/UDP进行端口扫描和一对多通讯的问题怎么解决

Private Sub Form_Load()

'将 LocalPort 属性设置为一个整数。然后调用 Listen 方法。

tcpServer.LocalPort = 1001

tcpServer.Listen

frmClient.Show '显示客户端的窗体。

End Sub

Private Sub tcpServer_ConnectionRequest _

(ByVal requestID As Long)

'检查控件的 State 属性是否为关闭的。如果不是,在接受新的连接之前先关闭此连接。

If tcpServer.State sckClosed Then

tcpServer.Close

End If

'接受具有 requestID 参数的连接。

tcpServer.Accept requestID

End Sub

Private Sub txtSendData_Change()

'名为 txtSendData 的 TextBox 控件中

'包含了要发送的数据。当用户往文本框中键入数据时,使用 SendData 方法发送输入的字符串。

tcpServer.SendData txtSendData.Text

End Sub

Private Sub tcpServer_DataArrival _

(ByVal bytesTotal As Long)

'为进入的数据声明一个变量。

'调用 GetData 方法,并将数据赋予名为 txtOutput的 TextBox 的 Text 属性。

Dim strData As String

tcpServer.GetData strData

txtOutPut.Text = strData

End Sub

frmClient:

Private Sub Form_Load()

'Winsock 控件的名字为 tcpClient。

'注意:要指定远程主机,可以使用

' IP 地址(例如:"121.111.1.1"),也可以使用

'计算机的“好听的名字”如下所示。

tcpClient.RemoteHost = "127.0.0.1"

tcpClient.RemotePort = 1001

End Sub

Private Sub cmdConnect_Click()

'调用 Connect 方法,初始化连接。

tcpClient.Connect

End Sub

Private Sub txtSend_Change()

tcpClient.SendData txtSend.Text

End Sub

Private Sub tcpClient_DataArrival _

(ByVal bytesTotal As Long)

Dim strData As String

tcpClient.GetData strData

txtOutPut.Text = strData

End Sub

请教大神,怎么使用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();  

}  

}

fscan支持udp的扫描嘛

支持。fscan的是支持udp扫描软件的,fscan是一个内网综合扫描工具,方便一键自动化、全方位漏洞扫描,它支持主机存活探测、端口扫描、常见服务的爆破。

采用tcp syn扫描的方法进行端口扫描,存在哪些优点和缺点

呵呵,我来简单回答一下吧!

首先你搞错了一个问题,就是没有syn扫描这种东西,只有tcp扫描和udp扫描。而tcp扫描一般是使用tcp的syn数据包来进行的,也就是不严格地说,你说的这两个是同一个东西,呵呵!

所以我在这里详细地解释一下tcp扫描和udp扫描以及它们的区别,希望能对你有所帮助。

tcp端口扫描是通过syn数据包进行的,用于扫描目标机器的端口上是否存在程序监听,通常意义上,普通个人机器上的某个端口如果有程序监听的话,那么它一般是系统漏洞。由于tcp是一个有连接的可靠协议,所以要使用三次握手来建立连接,三次握手的报文分别是(syn)、(ack

syn)和(ack)。进行端口扫描时,首先向对方主机的某一端口发送(syn)报文,如果对方这一端口上有程序在监听(或者说存在漏洞),则回复(syn

ack)报文,否则回复(rst)报文。据此就可以判断对方端口上是否有程序在监听了,或者是否存在漏洞了。

udp端口扫描是通过普通数据包进行的,也是用于扫描对方端口上是否有程序在运行,就像上面所说的,如果普通个人机器上存在这样的端口,那一般也是系统漏洞。但对于udp来说,不存在监听这个概念,因为它是无连接不可靠的协议,发送数据包过去以后,通常也不会有任何的对等回应。因此,udp端口扫描主要是检测是否存在icmp端口不可达数据包。若该数据包出现,则说明对方这一端口上没有程序在监听,或者说该端口不存在漏洞,否则就说明该端口上有程序在监听,或者说存在漏洞。

呵呵,现在可以总结一下他们的区别了,主要是以下几点:

1.

tcp是有连接的协议,而udp是无连接的;

2.

tcp扫描检测(ack

syn)或者是(rst)报文,而udp检测icmp端口不可达报文;

3.

tcp协议是可靠但低效的,可以有效进行端口扫描,范围广,效率低,可以应用于任何网络中;udp协议时不可靠但高效的,范围小,效率高,一般应用于局域网内部,随着网络规模的增大,udp端口扫描的结果准确度会越来越差,极端情况是,如果对internet使用udp端口扫描,所得到的结果一定不准确。

呵呵,回答完毕,希望能对你有所帮助!

端口扫描原理及工具 - 安全工具篇

"端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部端口,不可见。例如计算机中的80端口、21端口、23端口等。

一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。

因此,一个开放的端口代表一个提供的服务,不同的服务具有不同的端口号, 因此要对服务进行测试,首先要确定是否开放对应端口号 。

TCP端口和UDP端口。由于TCP和UDP 两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也 可以有235端口,两者并不冲突。

1、周知端口

周知端口是众所周知的端口号,范围从0到1023,其中80端口分配给WWW服务,21端口分配给FTP服务等。我们在IE的地址栏里输入一个网址的时候是不必指定端口号的,因为在默认情况下WWW服务的端口是“80”。

2、动态端口

动态端口的范围是从49152到65535。之所以称为动态端口,是因为它 一般不固定分配某种服务,而是动态分配。

3、注册端口

端口1024到49151,分配给用户进程或应用程序。这些进程主要是用户安装的程序。

1、使用Nmap工具查找ip的tcp端口

-O :获取操作系统版本信息

2、使用Nmap工具查找udp端口

-sU :表示udp scan , udp端口扫描

-Pn :不对目标进行ping探测(不判断主机是否在线)(直接扫描端口)

对于udp端口扫描比较慢,扫描完6万多个端口需要20分钟左右

3、使用Nmap工具获取端口Banner

只会返回有Banner信息的,没有则不会返回。

4、使用Nmap嗅探服务版本信息

如果没有返回banner信息的,也可以使用该方法尝试嗅探服务版本信息。

5、利用nmap对目标进行完整测试

在针对内容测试时,有授权的情况下,可以利用nmap对目标进行完整测试

用JAVA如何实现UDP端口扫描器?

使用 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();//关闭资源

}

}

希望能够帮助到你,望采纳!

0条大神的评论

发表评论