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
#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
#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);