当前位置:  技术问答>linux和unix

关于散列函数问题

    来源: 互联网  发布时间:2016-08-08

    本文导语:  本帖最后由 pengpeng2018 于 2010-02-27 23:35:25 编辑 小弟为了实现linux动态包过滤防火墙状态跟踪,需要建立一张散列状态表,表已实现,但哈希函数总搞不定.我按照下图方法构造哈希函数,但总得出很大的数值(实在对移位操作...

本帖最后由 pengpeng2018 于 2010-02-27 23:35:25 编辑
小弟为了实现linux动态包过滤防火墙状态跟踪,需要建立一张散列状态表,表已实现,但哈希函数总搞不定.我按照下图方法构造哈希函数,但总得出很大的数值(实在对移位操作不熟悉),超出桶的数量,谁能按图上方法写一个标准的hash函数让我参考一下呀,急...关于散列函数问题[图片]
函数形式如下

        char* sa = "192.168.1.1";
        char* da = "10.0.1.1";
        char* sp = "80";
        char* dp = "23";
        __be32 ipsa = inet_addr(sa);
        __be32 ipda = inet_addr(da);
        __be16 portsp = htons(strtoul(sp,NULL,10));
        __be16 portdp = htons(strtoul(dp,NULL,10));
        int no = hash(ipsa,ipda,portsp,portdp);

int hash(__be32 sourceaddr,__be32 destaddr,__be16 sourceport,__be16 destport)
{
//1. ip地址相加
//2. port端口相加
//3. 二者移位,截取成20位(好像没有__be20),并按图上异或
//4. 二进制结果转换成十进制返回
return bucketnumber;
}


上面3和4我做不出来...

|

int hash(__be32 sourceaddr,__be32 destaddr,__be16 sourceport,__be16 destport)
{
//1. ip地址相加
__be64 sumip = (__be64)sourceaddr+(__be64)destaddr;

//2. port端口相加
__be32 sumport = (__be32)sourceport+(__be32)destport;

//3. 二者移位,截取成20位(好像没有__be20),并按图上异或(对地址之和分段)
__be32 addr1 = (__be32)(sumip >> 13);
__be32 addr2 = (__be32)((sumip & 0x1FFF) 

    
 
 

您可能感兴趣的文章:

  • 关于tty函数的read函数的小问题
  • 关于函数内声明函数问题?
  • 一个基本概念问题:静态函数只能调用静态方法,类的成员函数也是静态的吗?
  • 1。 新建目录的函数是那个? 2。Busybox对C的system函数支持没问题?
  • linux c入门问题,大家指教。system函数和exec函数的区别。
  • 使用tcgetattr函数与tcsetattr函数的问题
  • 两个链接库中函数同名的问题
  • 请教一个函数入口处的汇编问题(压栈问题)
  • pthread_create函数执行问题
  • C语言中函数声明与调用问题
  • 有关Java构造函数的问题之一——缺省性
  • Linux 中关于异步函数的问题
  • 关于如何使用内核函数的问题
  • 有关函数隐藏的问题
  • 救急!!linux驱动函数问题!!
  • 关于linux下多线程运行由同一函数指针传入不同函数体的问题
  • 请教套接字中的select()函数问题
  • usb_submit_urb函数的问题
  • statfs 函数问题问题!
  • execl函数问题 fork问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Maps 成员 key_comp():返回比较元素key的函数
  • 请问:定义了2个函数,其中第一个函数要访问另外一个函数的变量,怎么处理阿?谢谢
  • C++ Maps 成员 value_comp():返回比较元素value的函数
  • 如果知道一个函数的地址或函数名,如何得到函数所在的文件名?
  • C++ MultiMaps 成员 key_comp():返回比较key的函数
  • java的数学函数在那个类中,如幂函数、指数、对数、双曲线函数等?
  • C++ MultiMaps 成员 value_comp():返回比较元素value的函数
  • 一个父类的构造函数的参数是(Applet applet),请问它的子类构造函数当中应怎样调用父类构造函数?
  • C++ STL Bitsets构造函数及成员函数解释及代码示例
  • 虚函数被类的构造析构函数和成员函数调用虚函数的执行过程
  • C++ Strings(字符串) 成员 Constructors:构造函数,用于字符串初始化
  • 在内核的某个函数中,如何能知道是哪个用户空间的函数调用了它,以及这个用户空间函数所在的文件?
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • 在dos下访问内存的MK_FP函数在linux下对应什么函数?int86()函数呢?
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • Linux c++虚函数(virtual function)简单用法示例代码
  • Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • js的众多函数令小弟实在搞不清楚!哪有函数速查手册之类的软件或者书籍!谢了!比如,setInterval、clearInterval这两个函数是干什么的?
  • cityhash 32位,64位和128位介绍及函数列表
  • 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3