发送TCP数据包设计题4(2)

2019-03-11 08:14

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[]={\}; BOOL flag; int rect,nTimeOver; if (argc!= 5) {

printf(\); return false; }

if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0) {

printf(\); return false; }

if((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0, WSA_FLAG_OVERLAPPED))==INVALID_SOCKET) {

printf(\); return false; } flag=true;

if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))== SOCKET_ERROR) {

printf(\);

return false; }

nTimeOver=1000;

if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOver, sizeof(nTimeOver))==SOCKET_ERROR) {

printf(\); return false; }

ipHeader.h_verlen=(IPVER<<4 | sizeof(ipHeader)/sizeof(unsigned long)); ipHeader.tos=(UCHAR)0;

ipHeader.total_len=htons((unsigned short)sizeof(ipHeader)+sizeof(tcpHeader)+sizeof(tcp_send_data)); ipHeader.ident=0;

ipHeader.frag_and_flags=0; ipHeader.ttl=128;

ipHeader.proto=IPPROTO_UDP; ipHeader.checksum=0;

ipHeader.sourceIP=inet_addr(argv[1]); ipHeader.destIP=inet_addr(argv[3]); memset(check_Buff,0,MAX_BUFF_LEN);

memcpy(check_Buff,&ipHeader,sizeof(IP_HEADER));

ipHeader.checksum=checksum(check_Buff,sizeof(IP_HEADER)); psdHeader.saddr=ipHeader.sourceIP; psdHeader.daddr=ipHeader.destIP; psdHeader.mbz=0;

psdHeader.ptcl=ipHeader.proto;

psdHeader.tcpl=htons(sizeof(TCP_HEADER)+sizeof(tcp_send_data)); tcpHeader.th_dport=htons(atoi(argv[4])); tcpHeader.th_sport=htons(atoi(argv[2])); tcpHeader.th_seq=0; tcpHeader.th_ack=0;

tcpHeader.th_lenres=(sizeof(tcpHeader)/sizeof(unsigned long)<<4|0); tcpHeader.th_flag=2;

tcpHeader.th_win=htons((unsigned short)16384); tcpHeader.th_urp=0; tcpHeader.th_sum=0;

memset(check_Buff,0,MAX_BUFF_LEN);

memcpy(check_Buff,&psdHeader,sizeof(psdHeader));

memcpy(check_Buff+sizeof(psdHeader),&tcpHeader,sizeof(tcpHeader));

memcpy(check_Buff+sizeof(PSD_HEADER)+sizeof(TCP_HEADER),tcp_send_data,sizeof(tcp_send_data));

tcpHeader.th_sum=checksum(check_Buff,sizeof(PSD_HEADER)+sizeof(TCP_HEADER)+sizeof(tcp_send

_data));

memset(Sendto_Buff,0,MAX_BUFF_LEN);

memcpy(Sendto_Buff,&ipHeader,sizeof(IP_HEADER));

memcpy(Sendto_Buff+sizeof(IP_HEADER),&tcpHeader,sizeof(TCP_HEADER));

memcpy(Sendto_Buff+sizeof(IP_HEADER)+sizeof(TCP_HEADER),tcp_send_data,sizeof(tcp_send_data)); int datasize=sizeof(IP_HEADER)+sizeof(TCP_HEADER)+sizeof(tcp_send_data); SOCKADDR_IN dest; memset(&dest,0,sizeof(dest)); dest.sin_family=AF_INET;

dest.sin_addr.s_addr=inet_addr(argv[3]); dest.sin_port=htons(atoi(argv[4]));

rect=sendto(sock,Sendto_Buff,datasize, 0,(struct sockaddr*)&dest, sizeof(dest)); if (rect==SOCKET_ERROR) {

printf(\,WSAGetLastError()); return false; } else

printf(\); closesocket(sock); WSACleanup(); return 1; }

SER:

#include #include #include using namespace std;

#pragma comment(lib, \) int main() {

WSADATA wsaData;

WORD sockVersion = MAKEWORD(2, 2); SOCKET sListen = 0; sockaddr_in sin = {0}; sockaddr_in remoteAddr = {0}; char szText[] = \; int nAddrLen = 0;

nAddrLen = sizeof(sockaddr_in); sin.sin_port = htons(4567);

sin.sin_family = AF_INET;

sin.sin_addr.S_un.S_addr = INADDR_ANY; if (WSAStartup(sockVersion, &wsaData) != 0) { }

sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR) { }

if (listen(sListen, 2) == SOCKET_ERROR){ }

SOCKET sClient = INADDR_ANY; while (true) { }

closesocket(sListen); WSACleanup();

sClient = accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen); if (sClient == INVALID_SOCKET) { }

send(sClient, szText, strlen(szText), 0); closesocket(sClient);

cout << \ << endl; continue;

cout << \ << endl; return 0;

cout << \ << endl; return 0;

cout << \ << endl; exit(0);

}

TCPCLIENT:

#include #include #include using namespace std;

#pragma comment(lib, \) int main() {

}

WSADATA wsaData;

WORD sockVersion = MAKEWORD(2, 2); SOCKET sock = 0;

if (WSAStartup(sockVersion, &wsaData) != 0) { }

sock = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == INVALID_SOCKET) { }

sockaddr_in sin;

sin.sin_family = AF_INET; sin.sin_port = htons(4567);

sin.sin_addr.S_un.S_addr = inet_addr(\); if (connect(sock, (sockaddr*)&sin, sizeof(sockaddr)) == -1) { }

char buffer[256] = \; int nRecv = 0;

nRecv = recv(sock, buffer, 256, 0); if (nRecv > 0) { }

closesocket(sock); WSACleanup();

buffer[nRecv] = '\\0';

cout << \ << buffer << endl; cout << \ << endl; return 0;

cout << \ << endl; return 0;

cout << \ << endl; exit(0);


发送TCP数据包设计题4(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:管理会计习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: