【问题标题】:Sending UDP Packets over Verizon Aircard通过 Verizon Aircard 发送 UDP 数据包
【发布时间】:2011-12-07 23:15:08
【问题描述】:

如果在其他地方有人问过并回答了这个问题,我深表歉意。我搜索并阅读了所有关闭的主题,但没有找到一个热门...

这是我的情况。我的客户端有发送和接收 UDP 数据包的软件。最终用户软件在通过 Verizon aircard 连接的笔记本电脑上运行。 (我稍后会解释为什么这很重要......)他们希望我以设定的时间间隔从服务器请求报告,因此他们不必记住从服务器请求它。为此,我必须诱使服务器认为我是它的客户端软件,并尊重我的请求。它并不像听起来那么糟糕。

我的程序通过 UDP 数据包将其请求发送到服务器。服务器认为请求来自它自己的客户端软件,并将结果发送回客户端。他们的移动客户端处理信息,我的程序空闲到下一个间隔。每个人都很高兴。我通过在系统上安装wireshark并观察来回的数据包,然后剖析UDP数据包来完成这项工作。

根据wireshark的说法,客户端在端口6767上发送它的数据包,服务器在端口6868上接收它。当我直接连接到他们的网络时(作为测试),我能够让它工作。但是,当我将我的软件移到他们的移动设备上时,它在 verizon aircard 上运行,它不起作用。据我所知,数据包仍在上升,但服务器无法识别它们。问题是 Wireshark 不会捕获 Verizon 空中卡上的数据包,所以我无法比较字节——就像我在网络上所做的那样。我的客户 - 在讨论网络问题时似乎有点头晕 - 告诉我端口保持不变,无论它们是在网络上还是在空中卡上。

我正在运行的简单代码如下所示:

public void transmitUDPDataPacket(string IP, string portStr)
 {
    Int32 port = 0;
    try
     {
          port = Convert.ToInt32(portStr);
      }
    catch (Exception ex)
      {
         resultFailed("FAILED: transmitDataPacket " + ex.Message);
         return;
      }
    Socket sending_socket = new Socket(AddressFamily.InterNetwork, 
                          SocketType.Dgram, ProtocolType.Udp);
    IPAddress send_to_address = IPAddress.Parse(IP);
    IPEndPoint sending_end_point = new IPEndPoint(send_to_address, port);
     try
      {
        sending_socket.SendTo(data, data.Length, SocketFlags.None, sending_end_point);
      }
etc.

所以,一些问题:

  1. 我知道如何在 UDP 命令中指定端点(即 6868)。但我不 看看我在哪里指定它从我的一端发出的端口(即 6767)。有没有 这样的事情?
  2. 少买专用软件,反正有吗 捕获 Verizon Aircard 的数据包?
  3. 我应该使用哪种 SocketType 枚举?目前,我 我正在使用 Dgram,但我想切换到 RDM——尽管我没有 认为这在这里会有什么不同,无论如何,这是一个想法。

【问题讨论】:

  • Wireshark 是最好的网络嗅探器之一,尝试捕获 Verizon Aircard 数据包,我认为你应该使用 Dgram
  • Wireshark 无法从 aircard 中捕获数据包。 (请参阅常见问题解答中的问题 #5 [链接]winpcap.org/misc/faq.htm#Q-5[/link]

标签: c# .net udp


【解决方案1】:

对于第 1 点:您正在寻找 Bind() 方法。

对于第 3 点:坚持使用Dgram,这将大致转换为 UDP。还有其他可用的数据报方法:RUDPUDP-liteDCCPRDS,但普通的旧 UDP 在公共 Internet 上传输比任何其他替代方案都容易得多。

【讨论】:

  • 我见过绑定,但从未真正用于 UDP...您是否碰巧有一个在 UDP 传输中使用它的示例,您可以指点我吗?
  • 这是我得到的最接近答案的事情......我确实想出了如何绑定()。谢谢。
  • @Mark:伙计,很抱歉我忽略了之前的评论。我不记得被警告过。立即想到的例子是PowerDNS,它使用连接的 UDP 套接字来防止缓存中毒并在主机关闭时收到错误消息。
  • 谢谢,我去看看。顺便说一句,我发现似乎能够捕获调制解调器数据包的唯一包是tamos.com/products/commview。它适用于一些蜂窝调制解调器……不过,还没有经过测试来真正用 Verizon 测试它。再次感谢 PowerDNS,我去看看!
  • @Mark:哇,这并不便宜,但如果它完成了工作......感谢链接,我相信它会派上用场。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
相关资源
最近更新 更多