资源简介
发送TCP数据包
设计题目
本设计的目的是填充一个TCP数据包,并发送给目的主机。
1) 以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port Data
其中SendTCP为程序名,source_ip、source_port、dest_ip和dest_port分别为源IP地址、目的IP地址、源端口和目的端口, Data为数据字段。
2)其他的TCP头部参数请自行设定。
3)数据字段为“This is my homework of network,I am very happy!”。
4)成功发送后在屏幕上输出“send OK”。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(lib“ws2_32.lib“)
#define IPVER 4 //IP协议预定
#define MAX_BUFF_LEN 65500 //发送缓冲区最大值
typedef struct ip_hdr //定义IP首部
{
UCHAR h_verlen; //4位首部长度4位IP版本号
UCHAR tos; //8位服务类型TOS
USHORT total_len; //16位总长度(字节)
USHORT ident; //16位标识
USHORT frag_and_flags; //3位标志位
UCHAR ttl; //8位生存时间 TTL
UCHAR proto; //8位协议 (TCP UDP 或其他)
USHORT checksum; //16位IP首部校验和
ULONG sourceIP; //32位源IP地址
ULONG destIP; //32位目的IP地址
}IP_HEADER;
typedef struct tsd_hdr //定义TCP伪首部
{
ULONG saddr; //源地址
ULONG daddr; //目的地址
UCHAR mbz; //没用
UCHAR ptcl; //协议类型
USHORT tcpl; //TCP长度
}PSD_HEADER;
typedef struct tcp_hdr //定义TCP首部
{
USHORT th_sport; //16位源端口
USHORT th_dport; //16位目的端口
ULONG th_seq; //32位序列号
ULONG th_ack; //32位确认号
UCHAR th_lenres; //4位首部长度/6位保留字
UCHAR th_flag; //6位标志位
USHORT th_win; //16位窗口大小
USHORT th_sum; //16位校验和
USHORT th_urp; //16位紧急数据偏移量
}TCP_HEADER;
//CheckSum:计算校验和的子函数
USHORT checksum(USHORT *buffer int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size)
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
int main(int argc char* argv[])
{
WSADATA WSAData;
SOCKET sock;
IP_HEADER ipHeader;
TCP_HEADER tcpHeader;
PSD_HEADER psdHeader;
char Sendto_Buff[MAX_BUFF_LEN]; //发送缓冲区
unsigned short check_Buff[MAX_BUFF_LEN]; //检验和缓冲区
const char tcp_send_data[]={“This is my homework of networtI am happy!“};
BOOL flag;
int rectnTimeOver;
if (argc!= 5)
{
printf(“Useage: SendTcp soruce_ip source_port dest_ip dest_port \n“);
return false;
}
if (WSAStartup(MAKEWORD(22) &WSAData)!=0)
{
printf(“WSAStartup Error!\n“);
return false;
}
if((sock=WSASocket(AF_INETSOCK_RAWIPPROTO_RAWNULL0
WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)
{
printf(“Socket Setup Error!\n“);
return false;
}
flag=true;
if(setsockopt(sockIPPROTO_IPIP_HDRINCL(char*)&flagsizeof(flag))==SOCKET_ERROR)
{
printf(“setsockopt IP_HDRINCL error!\n“);
return false;
}
nTimeOver=1000;
if (setsockopt(sock SOL_SOCKET SO_SNDTIMEO (char*)&nTimeOver sizeof(nTimeOver))==SOCKET_ERROR)
{
printf(“setsockopt SO_SNDTIMEO error!\n“);
return fal
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 77312 2004-01-01 01:42 SendTcp\SendTcp.doc
目录 0 2015-06-01 10:30 SendTcp\SendTcp\
目录 0 2015-06-01 10:30 SendTcp\SendTcp\Debug\
文件 176187 2010-12-22 12:33 SendTcp\SendTcp\Debug\SendTcp.exe
文件 184524 2010-12-22 12:33 SendTcp\SendTcp\Debug\SendTcp.ilk
文件 17290 2010-12-22 12:33 SendTcp\SendTcp\Debug\sendTcp.obj
文件 3727052 2010-12-22 12:33 SendTcp\SendTcp\Debug\SendTcp.pch
文件 353280 2010-12-22 12:33 SendTcp\SendTcp\Debug\SendTcp.pdb
文件 164864 2010-12-22 13:02 SendTcp\SendTcp\Debug\vc60.idb
文件 94208 2010-12-22 12:33 SendTcp\SendTcp\Debug\vc60.pdb
文件 6114 2010-12-22 12:32 SendTcp\SendTcp\sendTcp.cpp
文件 4296 2010-12-22 12:33 SendTcp\SendTcp\SendTcp.dsp
文件 522 2010-12-22 12:32 SendTcp\SendTcp\SendTcp.dsw
文件 41984 2010-12-22 13:02 SendTcp\SendTcp\SendTcp.ncb
文件 48640 2010-12-22 13:02 SendTcp\SendTcp\SendTcp.opt
文件 248 2010-12-22 13:02 SendTcp\SendTcp\SendTcp.plg
相关资源
- 斗地主算法的设计与实现-FansUnion-Do
- QT5下实现基于TCP发送和接接收文件
- 女鬼程序源码胆小者勿下
- CC3200 UDP TCP透传
- 微信小程序 小游戏跳一跳源码
- 拼车网源码
- 挂机源码完整版
- ESP8266 post源码 post.zip
- Qt 用TCP和UDP传图片
- ssh实现的科技项目申报(文档+源码
- 校友录全网站源码
- 仿www.toomics.xyz韩国漫画站源码
- TCP文件传输Demo
- qtribbon源码
- dwm1000 UWB 定位 测距 上位机源码
- andengine开发源码和API
- Qt实现的连连看游戏含源码
- delphi 邮件收发系统源码(仿FOXMAIL )
- swt/jface in action +中文版+英文版+源码
- unix v6和v7的源码
- xcap_1_0_5 最强大的以太网发包工具
- SURF论文及源码
- Qt基于tcp和udp局域网聊天工具
- 西门子PLC与PC通信与控制应用编程
- Flash 上传多张图片和裁剪图片源码
- 用电管理系统
- Intel汇编语言程序设计第五版源码 含
- 基于TCP的简单一对一聊天程序设计
- 主动防御 源码
- TMS320F2812串口烧写及源码.rar
评论
共有 条评论