資源簡介
發送tcp數據包
C++程序實現。。。。。。
代碼片段和文件信息
#include??
#include??
#include??
#include?
#include?
#include?
#include?
//#pragma?comment(lib“wsock32.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_IPNULL0WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)?
????{?
????????printf(“Socket?Setup?Error!\n“);?
????????return?false;?
????}?
????flag=true;?
????if?(setsockopt(sockIPPROTO_IP?IP_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?false;?
????}?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????17011??2008-06-24?20:27??發送tcp數據包\tcp\Debug\net.obj
?????文件??????25600??2008-06-24?20:27??發送tcp數據包\tcp\Debug\tcp.pdb
?????文件?????148480??2008-06-24?20:27??發送tcp數據包\tcp\Debug\vc60.idb
?????文件??????77824??2008-06-24?20:27??發送tcp數據包\tcp\Debug\vc60.pdb
?????文件???????6080??2008-06-24?20:27??發送tcp數據包\tcp\net.cpp
?????文件???????3922??2008-06-24?22:30??發送tcp數據包\tcp\tcp.dsp
?????文件????????531??2008-06-24?15:27??發送tcp數據包\tcp\tcp.dsw
?????文件??????33792??2008-06-24?22:30??發送tcp數據包\tcp\tcp.ncb
?????文件??????48640??2008-06-24?22:30??發送tcp數據包\tcp\tcp.opt
?????文件????????913??2008-06-24?20:27??發送tcp數據包\tcp\tcp.plg
?????文件?????108032??2008-07-04?09:20??發送tcp數據包\發送tcp數據包.doc
?????目錄??????????0??2009-05-16?09:09??發送tcp數據包\tcp\Debug
?????目錄??????????0??2009-05-16?09:09??發送tcp數據包\tcp
?????目錄??????????0??2009-06-24?18:21??發送tcp數據包
-----------?---------??----------?-----??----
???????????????470825????????????????????14
- 上一篇:c++ builder實現文件粉碎機的源碼
- 下一篇:易語言D3D模塊源碼
評論
共有 條評論