使用WireShark检查localhost上的WCF TCP服务器和客户端流量

时间:2016-02-25 16:32:46

标签: wcf tcp wireshark

我使用WCF在Visual Studio中创建了一个简单的TCP客户端和TCP服务器。我在服务器上有一个简单的操作,它接收一个整数,递增并发送回去。它按预期工作。

我想使用Wireshark来监控在localhost上运行的客户端和服务器之间的流量。显然,在Windows上使用Wireshark标准安装是不可能的,因为它无法监视环回适配器。有一个名为Npcap的库旨在解决这个问题,所以我安装了这个:

Npcap on GitHub

当我运行Wireshark时,选择

的捕获
  

Npcap环回适配器

我没有看到任何TCP流量(仅限某些UDP和DHCP)。我想知道我期待看到什么?

服务器的C#代码在这里(我已经以编程方式创建它,以便您可以看到所有细节,App.Config中没有配置任何内容)

using System;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace TcpServer
{
    // Defining the service
    [ServiceContract]
    public interface ITcpService
    {
        [OperationContract]
        int GetNumber(int num);
    }

    // Implementing the service
    public class TcpService : ITcpService
    {
        public int GetNumber(int num)
        {
            return num + 1;
        }
    }

    class TcpServerConsole
    {
        static void Main(string[] args)
        {
            ServiceHost host;

            // Attempt to open the service
            try
            {
                // Create the service host with a Uri address and service description
                host = new ServiceHost(typeof(TcpService), new Uri("net.tcp://127.0.0.1:9000/MyService"));

                // Create the metadata that describes our service, add it to the service host
                var metadataBehavior = new ServiceMetadataBehavior() { HttpGetEnabled = false };
                host.Description.Behaviors.Add(metadataBehavior);

                // Add a tcp endpoint for our service, using tcp
                host.AddServiceEndpoint(typeof(ITcpService), new NetTcpBinding(), "");

                // Add the meta data service endpoint for describing the service
                var mexBinding = MetadataExchangeBindings.CreateMexTcpBinding();
                host.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, "net.tcp://127.0.0.1:9000/MyService/mex");

                // Open our service 
                host.Open();
            }
            catch (Exception e)
            {
                // Catch any problem with creating the service and report
                Console.WriteLine("Failed to open the server: {0}", e.Message);
                Console.WriteLine("Press [Return] to close");
                Console.ReadKey(true);
                return;
            }

            // Halt the program to keep the service open
            Console.WriteLine("Press [Return] to close server");
            Console.ReadKey(true);
            host.Close();
        }
    }
}

1 个答案:

答案 0 :(得分:3)

我是Npcap的作者。首先感谢你的报告!

首先我想提一下,获得Npcap帮助的最佳方法是使用邮件列表:dev@nmap.org或在https://github.com/nmap/nmap/issues解决问题。我每天检查这些地方。我主要使用Stackoverflow来提问,但不会搜索和回答有关Npcap的问题。

我不是C#的专家。我在VS2015中创建了一个WCF Service Application项目。将您的代码复制到我的Service1.svc.cs。将其构建为WcfService1.dll。但我不知道如何使用它?

您介意提供所有服务器和客户端代码(包括解决方案文件)吗?所以我可以用它们来测试Npcap(不需要掌握有关C#和WCF的知识)。您可以压缩代码并将邮件附加到dev@nmap.org。我会回复。谢谢!