小编sip*_*wiz的帖子

在C#中侦听ICMP数据包

我有一个SIP应用程序需要发送UDP数据包来设置SIP呼叫.SIP具有应对传递失败的超时机制.我希望能够做的另一件事是检测UDP套接字是否已关闭,以便必须等待SIP使用的32s重新传输间隔.

我所指的情况是,尝试发送到UDP套接字导致远程主机生成ICMP目标无法访问的数据包.如果我尝试将UDP数据包发送到已启动的主机但端口未侦听,我可以看到ICMP消息通过数据包跟踪器返回,但问题是如何从我的C#代码访问该数据?

我正在玩原始套接字,但尚未能够获得我的程序接收的ICMP数据包.即使ICMP消息到达我的PC,下面的示例也从未收到数据包.

Socket icmpListener = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
icmpListener.Bind(new IPEndPoint(IPAddress.Any, 0));

byte[] buffer = new byte[4096];
EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
int bytesRead = icmpListener.ReceiveFrom(buffer, ref remoteEndPoint);
logger.Debug("ICMPListener received " + bytesRead + " from " + remoteEndPoint.ToString());
Run Code Online (Sandbox Code Playgroud)

下面是一个wireshark跟踪,显示ICMP响应进入我的PC,尝试从我知道它没有收听的端口上发送UDP数据包从10.0.0.100(我的PC)到10.0.0.138(我的路由器).我的问题是如何利用这些ICMP数据包来实现UDP发送失败而不是仅仅等待应用程序在任意时间段后超时?

ICMP响应UDP发送

c# icmp

7
推荐指数
1
解决办法
2万
查看次数

将C数组作为char*函数参数传递

我有一些代码我正在使用以下变量声明:

char tmpry[40];
Run Code Online (Sandbox Code Playgroud)

它正在使用此功能:

char *SomeFunction(char *tmpryP) {
   // Do stuff.
}
Run Code Online (Sandbox Code Playgroud)

函数调用是:

SomeFunction(&tmpry[0]);
Run Code Online (Sandbox Code Playgroud)

我非常确定这与以下相同:

SomeFunction(tmpry);
Run Code Online (Sandbox Code Playgroud)

我甚至检查过SomeFunction中的char*指针最终指向与两种情况下的数组相同的内存位置.

我的问题是检查这两个函数调用是否相同(因此原始程序员只是讨厌)的健全性检查?

c arrays

7
推荐指数
4
解决办法
2万
查看次数

在Windows 2003上生成的GUID是否可以安全地用作会话ID?

我的Web应用程序仅通过SSL运行,并在用户使用用户名和密码成功登录后为每个用户设置限时cookie.系统中最大的弱点是损害现有用户的cookie.并且两个猜测会话ID GUID.

我知道第一个弱点的机制,但我想知道我需要担心攻击者根据他们之前通过登录他们已设置的帐户获得的GUID猜测会话ID GUID的可能性有多大?在这种情况下,Web服务器是Windows 2003,并且使用.Net 3.5生成GUID.

security guid windows-server-2003

7
推荐指数
1
解决办法
753
查看次数

使用XDocument.Parse时保留回车符

我有一个对回车敏感的应用程序是\ r \n或\n.我在XML中传递一个值,当我使用XDocument解析它时,回车符值被转换为\n而我正试图找到一种方法将其保留为\ r \n.

string myVal = "1234\r\nabcd";
string xmlText = "<doc>" + myVal + "</doc>";
XDocument xDoc = XDocument.Parse(xmlText);
Console.WriteLine("result=" + (xDoc.Element("doc").Value == myVal));
Console.WriteLine("result=" + (xDoc.Element("doc").Value == myVal.Replace("\r\n", "\n")));
Run Code Online (Sandbox Code Playgroud)

结果:

result=False
result=True
Run Code Online (Sandbox Code Playgroud)

c# linq-to-xml

7
推荐指数
1
解决办法
1522
查看次数

使用jQuery清除ASP.Net MVC验证消息

在我的asp.net mvc页面中,我需要一个"清除"按钮,它可以重置某些输入字段并清除所有错误消息.清除输入很好但是因为验证消息是由asp.net mvc javascript生成的,所以我不清楚如何清除它们?

更新:这最终对我有用.

$(".field-validation-error").empty();
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc jquery

7
推荐指数
1
解决办法
1万
查看次数

模拟PostSharp属性的最简单方法

我正在使用PostSharp方法属性对我的WCF服务进行授权和审核.它工作正常,但现在我正在尝试使用属性进行单元测试,并且正在努力寻找一种方法来模拟和注入属性上的属性.

我的属性如下.

[Serializable]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class AuthoriseAndAuditAttribute : OnMethodBoundaryAspect
{
    private static ILog logger = AppState.logger;

    private static Ninject.IKernel _kernel = MyKernel.Kernel;

    private UserRoleTypesEnum _requiredRole = UserRoleTypesEnum.None;

    [Inject]
    public IServiceAuthToken _serviceAuthToken { get; set; }

    [Inject]
    public UserSessionDataLayer _userSessionDataLayer { get; set; }

    public AuthoriseAndAuditAttribute(UserRoleTypesEnum role = UserRoleTypesEnum.None)
    {
        _requiredRole = role;
        _kernel.Inject(this);
    }

    public override void OnEntry(MethodExecutionArgs args)
    {
        // Get the user's session from cookie.
        UserSession userSession = GetUserSession();

        // Check that …
Run Code Online (Sandbox Code Playgroud)

wcf unit-testing rhino-mocks ninject postsharp

7
推荐指数
1
解决办法
525
查看次数

软件重写与运行成本分析

我作为程序员工作的IT部门围绕着一个有30多年历史的代码库(Fortran和C).代码处于不良状态,部分原因在于30多年来特别缺乏深思熟虑的变化,但我也怀疑很多代码与进行更改的程序员的能力有关(顺便说一下,他们仍然是周围).

依赖于该软件的业务每年运行363天,每天运行20小时.不幸的是,有很多次中断.这是我工作的第一个地方,有开发人员随叫随到将操作代码修复程序应用于生产系统.当我第一次出现时,生产服务器上实际上有一个源代码和开发工具的副本,以便可以实时应用更改; 谢天谢地,这种做法现在已经停止了.

我已经暗示了几次管理,该停工的成本,具有呼叫,额外的业务人员,unsatisifed客户等开发商都花费了业务多了很多在中期,甚至可能是短期的,会比以推出全心努力,重新写/重构/替换整个事情(代码底座约30万线).

理想情况下,它们可能是一些外部咨询,可以进入并运行规则的质量规则以及保持运行与重写/重构/替换它所涉及的成本.我的问题是企业应该如何对软件进行这种成本分析,并且能够对该分析有信心?街头的第一批IT顾问可能会声称能够进行分析,但管理层如何能够对内部员工告诉他们的内容感到满意?

refactoring

6
推荐指数
3
解决办法
746
查看次数

WCF REST列出传入请求的HTTP标头

我已经启动了WCF REST入门套件,并尝试访问传入请求的HTTP标头.我查看了OperationContext.Current.IncomingMessageHeaders,但要么它不能保存它们,要么我错误地访问它.

如何列出HTTP标头?

rest wcf

6
推荐指数
1
解决办法
4702
查看次数

SQL Server选择datetimeoffset大于1小时的位置

我知道这应该很简单,我在mySQL和Postgresql中没有问题,但我正在努力使用SQL Server.我想选择datetimeoffset字段超过一小时的行.

select * from table where mydatetime < getdate() - 1 hour
Run Code Online (Sandbox Code Playgroud)

我已经尝试过dateadd和datediff,但无法做到正确.

sql sql-server

6
推荐指数
2
解决办法
2万
查看次数

CSS规则来设置第一个列表项的样式

我正在尝试将CS​​S样式应用于顶部列表项,但无法以所需方式应用规则.在下面的示例中,我正在尝试删除第一个li项目的顶部边框.如果我将style="border-top: none;"内联放在locationMenuTopItem元素上,但是我需要使用样式块来实现它.

为什么#locationMenu li区块覆盖了#locationMenuTopItem区块?

<html>
<head>
 <style>
 #locationMenu li {
    border-top: 1px solid #e1e1e1;    
}

#locationMenuTopItem {
   border-top: none;
}
</style>
</head>
<body>
<ul id="locationMenu">
     <li id="locationMenuTopItem"><a href="#">Top Menu</a>
         <ul>
           <li><a href="#">Sub Menu 1</a></li>
           <li><a href="#">Sub Menu 2</a></li>
           <li><a href="#">Sub Menu 3</a></li>
         </ul>
     </li>
     <li><a href="#">Top Menu 2</a></li>
     <li><a href="#">Top Menu 3</a></li>
   </ul>
</body>
Run Code Online (Sandbox Code Playgroud)

css

5
推荐指数
3
解决办法
3万
查看次数