热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单原始套接字checksum纠缠我很久了就是不知道哪里错了救命啊

u_shortin_cksum(u_short*addr,intlen){intnleftlen;intsum0;u_short*waddr;u_sh

u_short in_cksum(u_short *addr,int len) 

int nleft=len; 
int sum=0; 

u_short *w=addr; 
u_short answer=0; 

while (nleft>1) 

sum+=*w++; 
nleft-=2; 

if (nleft==1) 

*(u_char *)(&answer)=*(u_char *)w; 
sum+=answer; 


sum=(sum>>16)+(sum & 0xffff); 
sum+=(sum>>16); 
answer=~sum; 
return(answer); 

int main(int argc,char *argv[])
{
char *ip = argv[1];
int port =atoi(argv[2]);
int sockRaw;
sockRaw = socket(AF_INET ,SOCK_RAW ,IPPROTO_TCP);
char buffer[40];
struct sockaddr_in target;
struct sockaddr_in source;
target.sin_family=AF_INET;
target.sin_port = htons(port);
inet_aton(ip,&target.sin_addr);
source.sin_family=AF_INET;
source.sin_port = htons(5000);
source.sin_addr.s_addr= htonl(INADDR_ANY);

u_short tcpSize =sizeof(struct tcphdr);
unsigned char netPacket[tcpSize];     
struct tcphdr* tcp;  
u_char *pPseudoHead; 
u_char pseudoHead[12+sizeof(struct tcphdr)]; 

u_short  tcpHeadLen;
memset(netPacket,0,tcpSize);
tcpHeadLen=htons(sizeof(struct tcphdr));     

tcp=(struct tcphdr *)netPacket;     
tcp->source=htons(5000);
  tcp->dest=htons(port);
  tcp->seq=htonl(0);     
tcp->ack_seq=0;     
tcp->doff=5;     
tcp->syn=1;   /*Syn的标志*/   
tcp->window=htons(2048);
  tcp->check=0;
tcp->urg_ptr=0;
 
pPseudoHead=pseudoHead;
memset(pPseudoHead,0,12+sizeof(struct tcphdr));  
memcpy(pPseudoHead,&source.sin_addr,4);
pPseudoHead+=4;
memcpy(pPseudoHead,&target.sin_addr,4);
  pPseudoHead+=5;
  memset(pPseudoHead,6,1);
  pPseudoHead++;
memcpy(pPseudoHead,&tcpHeadLen,2);
pPseudoHead+=2;
  memcpy(pPseudoHead,tcp,sizeof(struct tcphdr));
  tcp->check=in_cksum((u_short *)pseudoHead,sizeof(struct tcphdr)+12);

         sendto(sockRaw,netPacket,tcpSize,0,(struct sockaddr *)&target,sizeof(struct sockaddr_in));
}

参数192.168.1.102 21
本机ip:192.168.1.248


用tcpdump抓包结果如下:
192.168.1.248.5000>192.168.1.102.ftp:flags[s],checksum Oxd237(incorrect->OxOf97),seq 0,win 2048,length 0



9 个解决方案

#1


问题解决了····
伪头部的sourceip地址问题,所以会造成checksum incorret

最开始初始的sourceip不能用any

可以使用ioctl 取得接口地址
再gethostname来得到本地ip

#2


 真是弱智啊  基本功不扎实...

#3


接分可以吗

#4


搞定了,要极时结贴。

#5


搞定了,要极时接分....

#6


我也来接点分

#7


呵呵,分享你的经验

#8


拿分啊。

#9


引用 8 楼 maple_zhj 的回复:
拿分啊。

后面的就没了···

推荐阅读
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 数据输入验证与控件绑定方法
    本文提供了多种数据输入验证函数及控件绑定方法的实现代码,包括电话号码、数字、传真、邮政编码、电子邮件和网址的验证,以及报表绑定和自动编号等功能。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • Java多线程售票案例分析
    本文通过一个售票系统的实例,深入探讨了Java中的多线程技术及其在资源共享和并发控制中的应用。售票过程涉及查询、收款、找零和出票等多个步骤,其中对总票数的管理尤为关键。 ... [详细]
  • 在使用 PyInstaller 将 Python 应用程序打包成独立的可执行文件时,若项目中包含动态加载的库或插件,需要正确配置 --hidden-import 和 --add-binary 参数,以确保所有依赖项均能被正确识别和打包。 ... [详细]
author-avatar
互粉-结局_596
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有