UDP头部校验和的计算函数,字符串关键字搜索匹

作者: 新金沙平台  发布:2019-08-30

 

 

> 计算IP和TCP、UDP数据包头的校验和,首先补充下ipv4头部的结构图:
 
> ◆当发送IP包时,需要计算IP报头的校验和:
 
1、把校验和字段置为0;
2、对IP头部中的每16bit进行二进制求和;
3、如果和的高16bit不为0,则将和的高16bit和低16bit反复相加,直到和的高16bit为0,从而获得一个16bit的值;
4、将该16bit的值取反,存入校验和字段。
 
> ◆当接收IP包时,需要对报头进行确认,检查IP头是否有误,算法同上2、3步,然后判断取反的结果是否为0,是则正确,否则有错。
 
RFC里面的C源代码
 
//计算校验和 www.2cto.com
USHORT checksum(USHORT *buffer,int size)
{
    unsigned long cksum = 0;
    while(size>1)
    {
        cksum = *buffer ;
        size -= sizeof(USHORT);
    }
    if (size)
    {
        cksum = *(UCHAR *)buffer;
    }
    //将32位数转换成16
    while (cksum>>16)
        cksum=(cksum >> 16) (cksum & 0xffff);
    return (USHORT) (~cksum);
}VB.Net的
 
    ''' <summary>
    ''' 计算校验和
    ''' </summary>
    ''' <param name="arrHeader">要计算校验和的头部字节数组</param>
    ''' <param name="HeaderSize">头部长度,单位:字节</param>
    Private Function CalcCheckSum(ByVal arrHeader() As Byte, ByVal HeaderSize As Integer) As UInt16
        '若包头长度不是2 字节的倍数
        '则用0 比特填充到2 字节的倍数
        Dim CkSum As UInt32, arrTmp() As UInt16
        ReDim arrTmp(IIf(HeaderSize Mod 2, (HeaderSize - 1) / 2, HeaderSize / 2 - 1))
        Dim GCH As GCHandle = GCHandle.Alloc(arrTmp, GCHandleType.Pinned)
        Dim tPtr As IntPtr = GCH.AddrOfPinnedObject
        Marshal.Copy(arrHeader, 0, tPtr, HeaderSize)
        For i As Integer = 0 To arrTmp.GetUpperBound(0)
            CkSum = arrTmp(i)
        Next
        While (CkSum >> 16)
            CkSum = (CkSum >> 16) (CkSum And &HFFFF)
        End While
        Return (Not CkSum) And &HFFFF
    End FunctionVB6的
 
Private Function CalcCheckSum(srcIPP() As Byte, ByVal IPSize As Long) As Integer
Dim CkSum As Long, i As Long, IPTmp() As Integer
'若包头长度不是16 比特的倍数
'则用0 比特填充到16 比特的倍数
ReDim IPTmp(IIf(IPSize Mod 2, (IPSize - 1) / 2, IPSize / 2 - 1))
CopyMemory IPTmp(0), srcIPP(0), IPSize
For i = 0 To UBound(IPTmp)
    CkSum = CkSum IPTmp(i) (IPTmp(i) And &H8000&) * 2
Next
While (CkSum And &HFFFF0000)
    CkSum = (CkSum And &HFFFF0000) / &H10000 CkSum And &HFFFF&
Wend
CkSum = (Not CkSum) And &HFFFF&
CalcCheckSum = CkSum - (CkSum And &H8000&) * 2
End Function

名称:字符串关键字匹配提取处理算法

委托三个步骤

摘自 lcx.cc

 

 

◆当发送IP包时,需要计算IP报头的校验和: 1、把校验和字段置为0;...

功能:两个字符串,提取其中重叠的字符串

 1、声明委托   用Delegate 声明一个委托 类型  参数要和 被委托的方法一样  例如  Delegate Function a(byval x as string)  as string

 

 

语言: Basic

2、实例化委托     dim  t as new a(AddressOf      Function Name)

 

 

功能:做字符的匹配,可以用做字符搜索

3.通过t(参数)   或者  t.Invoke(参数调用委托)

 

 

Sub strDeal()

 

    Dim str1, str2, strdata As String

Module module1

    Dim i, j, tempi As Integer

    Delegate Function a(ByVal x As Integer, ByVal y As Integer) As Integer    '声明委托类型 委托可以使一个对象调用另一个对象的方法

   str1 = "中国工人先锋共产党监督委员会"

    Function sum(ByVal x As Integer, ByVal y As Integer) As Integer

   str2 = "工人先锋监督特别委员会"

        Return (x y)

   

    End Function

   

    Sub main()

    i = 1

        Dim d As New a(AddressOf sum)  '实例化委托

    j = 1

        Dim s = 0

本文由新金沙平台发布于新金沙平台,转载请注明出处:UDP头部校验和的计算函数,字符串关键字搜索匹

关键词: 新金沙平台 js56金沙线路

上一篇:Net的知识的一点收获,串口访问之四
下一篇:没有了