广播比特定端口的随机SYN / ACK扫描更快?

时间:2009-03-02 03:00:36

标签: c# .net networking sockets

我正在研究的项目使用P2P在对等体之间传输数据,这与Bittorrent不同。该组件在每个接口上执行随机扫描,以查看网络上的设备。到目前为止,它已被实现为Socket连接,它通过尝试连接到程序的侦听端口来检查它是否已成功连接。我想知道是否会更快地将其删除并在每个界面上进行广播。这会更快/更可靠吗?

当前连接代码如下:

Socket testSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
testSock.BeginConnect(iep, new AsyncCallback(ConnectedAsync), testSock);
for (int i = 0; i <= iterations && Thread.CurrentThread.IsAlive; i++)
{
     if (testSock.Connected)
         break;
     Thread.Sleep(25); 
}
testSock.Close(0);

'随机'组件是一个简单的

Random r = new Random();
每个接口的子网

根据我的广播经验(Wireshark,DHCP等),我的印象是广播的载货量会更快,而且使用更少的资源。我问的原因是写这篇文章的人很聪明,我想知道他为什么不使用广播。

值得努力吗?

2 个答案:

答案 0 :(得分:3)

某些设备可能会过滤广播。在一个网段之后它将是不可靠的 - 如果你正在做的事情局限于局域网(或单个网段),那么广播确实应该快得多。

话虽如此,随机搜索永远不会有效或最佳。您可能会错过节点,扫描时间超过预期等问题等等。由于您可以访问子网掩码,因此您应该能够轻松地计算该段上可能有效的节点列表,但是再次 - 如果您被限制在一个网络段(或它们的集合)中,然后广播是要走的路。

如果您要搜索有效WAN节点列表(即不仅仅是一个段),那么您可能会发送大量不需要的流量。我的建议是让每个节点都能够相互发送其他节点的缓存,然后需要一个节点的地址作为用户输入来引导到网络上。

答案 1 :(得分:0)

我怀疑你是对的,但怀疑是你应该开始研究,而不是你应该停止的地方。既然你没有大量的努力来测试这个理论,你为什么不试试看呢?

- MarkusQ