![]() |
|
Spaces home TheOnly Visual SpacePhotosProfileFriendsMore ![]() | ![]() |
|
TheOnly Visual Space
February 21 春节电影春节电影目录:
<<落叶归根>>
<<加勒比海盗2>>
<<搏击俱乐部>>
<< 博物馆奇妙之夜>>
<<爱情呼叫转移>>:
//www.tudou.com/search/playlist/?posto=%2Fsearch%2Fplaylist%2F&kw=%B0%AE%C7%E9%BA%F4%BD%D0%D7%AA%D2%C6&nav_search_target=0&comefrom=1&x=38&y=15
在上海过春节 又到除夕了.
今年过年没有回家,在上海过亲戚家过的年.
以前小时候,最开心的时候就是拿红包了,今年应该是我拿红包了.看到小朋友们拿红包的开心样子,就想到了我小时候,心里还是蛮开心的.不过已经没有了小时侯对过年的那种向往,更多的是一种对亲情的依恋.也许只有人有了一定的社会责任感以后,才会更明白亲情的意义和家的意义.以前也许会说哪哪儿的年夜饭做得最好吃,不过现在觉得一家人吃饭的感觉是最重要的.
两个弟弟在部队里面,或许更加想家.曾浩刚刚过了考核,张俊已经做了班长.听他们电话的时候发现已经成熟了很多.以前在拿压岁钱打游戏,放鞭炮的日子已经一回了,男孩子都慢慢变成男人.
January 06 Tracert 的代码Source code of Tracert.
More information about ICMP protocol, please refer to the document of RFC.
--------------------------------------------------------------------------------------------------
General.h
#include <windows.h>
#ifdef __GENERAL_H__
#define __GENERAL_H__ // CRC Check Sum
extern USHORT ip_checksum(USHORT* buffer, int size); // Read IP Address from Integer to String
void ReadIPAddress(unsigned long IPAddress); #endif // GENERAL_H
----------------------------------------------------------------------------------------------------
General.cpp
#include "General.h" USHORT ip_checksum(USHORT* buffer, int size) // Do a little shuffling void ReadIPAddress(unsigned long IPAddress) ---------------------------------------------------------------------------------------------------------- ICMP.h #include <windows.h> #define ICMP_ECHO 8 // Echo ICMP Packet #pragma pack(1) #pragma pack(1) #endif // ICMP_H ------------------------------------------------------------------------------------------------------- Tracert.h #include "ICMP.H" #ifndef __TRACERT_H__ #define TRACERT_DATA_PART_SIZE (DEFAULT_ICMP_SIZE - sizeof(ICMPHeader)) class Tracert private: private: #endif // TRACERT_H -------------------------------------------------------------------------------------------------------
Tracert.cpp
#define WIN32_LEAN_AND_MEAN #include <winsock2.h> //Need the support of WinSock2 #include <ws2tcpip.h> //When setting the level of IPPROTO_IP #include "Tracert.h" #define TRANSFER_OVER 0x05
static const TCHAR* DEFAULT_ADDRESS = TEXT("220.181.18.155"); // BaiDu Address static const int TIMEOUT = 1000; // 1 second Tracert::Tracert()
{ InitializeConnection(); } Tracert::~Tracert()
{ UnitializeConnection(); } int Tracert::Configuration()
{ int ttl = TIMEOUT; if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (const char*)&ttl, sizeof(ttl)) == SOCKET_ERROR) { cout << "Error in Configuration, error code:" << GetLastError() << endl; return GetLastError(); } memset(&dest, 0, sizeof(dest));
dest.sin_family = AF_INET; dest.sin_addr.s_addr = inet_addr(DEFAULT_ADDRESS); return 0; } int Tracert::SendPacket()
{ static int livetime = 1; int retValue=setsockopt(sock,IPPROTO_IP,IP_TTL,(char *)&livetime,sizeof(int)); if (retValue < 0) { cout << "Error in Set Tracert Packet Time, error code" << GetLastError() << endl; return GetLastError(); } else { livetime++; } TracertPacket tracert_packet; PackTracertPacket(tracert_packet); retValue = sendto(sock, // Socket (const char*)&tracert_packet, // Buffer sizeof(tracert_packet) 0, // Flag (const sockaddr*)&dest, // The Pointer to Socket Address sizeof(dest)); // Size of Socket Address if (retValue < 0) { cout << "Error in send Packet, error code" << GetLastError() << endl; return GetLastError(); } return 0; } int Tracert::ReceivePacket()
{ // effetive will be worse? IPHeader* recv_buf = (IPHeader*)new TCHAR[MAX_DATA_SIZE]; if (recv_buf == NULL) { return GetLastError(); } int fromlen = sizeof(source); int retValue = recvfrom(sock, (char*)recv_buf, MAX_DATA_SIZE, 0, (sockaddr*)&source, &fromlen); if (retValue < 0) { cout << "Error in receive packet, error code" << GetLastError() << endl; return GetLastError(); } else { // Decode ping packet retValue = DecodeTracertPacket(*recv_buf, retValue); } delete []recv_buf; recv_buf = NULL; return retValue; } void Tracert::PackTracertPacket(TracertPacket &tracert_packet)
{ //static USHORT ID = 1; static USHORT SeqNumber = 1; tracert_packet.icmp_header.type = ICMP_ECHO; tracert_packet.icmp_header.code = 0; tracert_packet.icmp_header.checkSum = 0; tracert_packet.icmp_header.ID = (USHORT)GetCurrentProcessId(); tracert_packet.icmp_header.SeqNumber = SeqNumber++; memset(tracert_packet.data_part, 'E', TRACERT_DATA_PART_SIZE); tracert_packet.icmp_header.checkSum = ip_checksum((USHORT*)&tracert_packet, sizeof(tracert_packet)); } int Tracert::DecodeTracertPacket(const IPHeader &ip_header, const int recvPacketLen)
{ USHORT ipheader_len = ip_header.h_len * 4; if (recvPacketLen < ipheader_len + ICMP_MIN) { // Packet is too small cout << "Receive packet is too small" << endl; return -1; } TracertPacket *tracertpacket = (TracertPacket*)((char*)&ip_header + ipheader_len); if (tracertpacket == NULL) { cout << "ICMP Header is NULL" << endl; return -1; } if (tracertpacket->icmp_header.type == ICMP_TIMEOUT && tracertpacket->icmp_header.code == 0) { //cout << "Reply Packet" << endl; //cout << "time:" << int (GetTickCount() - pingpacket->dwTime) << endl; cout << "Route Address:"; ReadIPAddress(ip_header.source_ip); } if(tracertpacket->icmp_header.type==ICMP_REPLAY && tracertpacket->icmp_header.ID==GetCurrentProcessId()) { //printf("%2d: %-15s %4dms\n",icmpcount++, // inet_ntoa(from->sin_addr),tick-cStartTickCount); cout << "Route Address:"; ReadIPAddress(ip_header.source_ip); printf("Trace complete!\n"); return TRANSFER_OVER; } return 0;
} BOOL Tracert::StartClient()
{ int flag = 0; while(true) { if (SendPacket()) { return FALSE; } flag = ReceivePacket(); if (flag == TRANSFER_OVER) { return TRUE; } else if (flag) { return FALSE; } Sleep(1000); } return TRUE; } DWORD Tracert::InitializeConnection()
{ cout << "+Initialize Connection!" << endl; WSAData wsaData; if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) { cout << "Startup error!" << endl; return GetLastError(); } sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if (sock < 0) { cout << "Create socket error!" << endl; return GetLastError(); } if (Configuration())
{ return GetLastError(); } cout << "-Initialize Connection!" << endl; return 0; } int Tracert::UnitializeConnection()
{ WSACleanup(); closesocket(sock); cout << "Unitialize Connection!" << endl; return 0; } int Tracert::UnPackTracertPacketPacket()
{ return 0; } -------------------------------------------------------------------------------------------------------------
main.cpp
#include "Tracert.h"
int main() { Tracert tracert_Program; tracert_Program.StartClient(); return 0; } Ping的代码Source code of Ping Program.
Have not test complete yet, more information about Ping and ICMP protocol, please refer to
related website.
Please link library WS2_32.LIB at first.
// ICMP.h
#include <windows.h>
#ifndef __ICMP_H__ #define __ICMP_H__ #define ICMP_ECHO 8 #define ICMP_REPLAY 0 #define MAX_DATA_SIZE 32 #define ICMP_MIN 8 #pragma pack(1)
typedef struct tagICMPHeader { UCHAR type; UCHAR code; USHORT checkSum; USHORT ID; USHORT SeqNumber; }ICMPHeader, *PICMPHeader; #pragma pack() #pragma pack(1)
typedef struct tagIPHeader { BYTE h_len:4; BYTE version:4; BYTE tos; USHORT total_len; USHORT ID; USHORT flags; BYTE ttl; BYTE proto; USHORT checksum; ULONG source_ip; ULONG dest_ip; }IPHeader, *PIPHeader; #pragma pack() #endif // ICMP_H
// Ping.h
#include "ICMP.H" #include <iostream> using namespace std; #ifndef __PING_H__
#define __PING_H__ #pragma pack(1)
typedef struct tagPingPacket { ICMPHeader icmp_header; DWORD dwTime; }PingPacket, *PPingPacket; #pragma pack() class Ping
{ public: Ping(); ~Ping(); BOOL StartClient(); private:
void PackPingPacket(PingPacket& ping_packet); int UnPackPingPacket(); int Configuration(); int ReceivePacket(); int SendPacket(); DWORD InitializeConnection(); int UnitializeConnection(); DecodePingPacket(const IPHeader& ip_header, const int recvPacketLen); friend USHORT ip_checksum(USHORT* buffer, int size); friend void ReadIPAddress(unsigned long IPAddress); private:
SOCKET sock; sockaddr_in dest; sockaddr_in source; }; #endif // PING_H
PING.cpp
#include "PING.H"
const TCHAR* DEFAULT_ADDRESS = TEXT("220.181.27.48"); // LocalHost
const int TIMEOUT = 1000; // 1 second Ping::Ping()
{ InitializeConnection(); } Ping::~Ping()
{ UnitializeConnection(); } BOOL Ping::StartClient()
{ while(true) { if (SendPacket()) { return FALSE; } if (ReceivePacket()) { return FALSE; } Sleep(1000); } return TRUE; } DWORD Ping::InitializeConnection()
{ cout << "Initialize Connection!" << endl; WSAData wsaData; if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) { cout << "Startup error!" << endl; return GetLastError(); } sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if (sock < 0) { cout << "Create socket error!" << endl; return GetLastError(); } if (Configuration()) { return GetLastError(); } return 0; } int Ping::Configuration()
{ int ttl = TIMEOUT; if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (const char*)&ttl, sizeof(ttl)) == SOCKET_ERROR) { cout << "Error in Configuration, error code:" << GetLastError() << endl; return GetLastError(); } memset(&dest, 0, sizeof(dest)); dest.sin_family = AF_INET; dest.sin_addr.s_addr = inet_addr(DEFAULT_ADDRESS); return 0; } int Ping::UnitializeConnection()
{ WSACleanup(); closesocket(sock); cout << "Unitialize Connection!" << endl; return 0; } void Ping::PackPingPacket(PingPacket& ping_packet)
{ static USHORT ID = 1; static USHORT SeqNumber = 1; ping_packet.icmp_header.type = ICMP_ECHO; ping_packet.icmp_header.code = 0; ping_packet.icmp_header.checkSum = 0; ping_packet.icmp_header.ID = ID++; ping_packet.icmp_header.SeqNumber = SeqNumber++; ping_packet.dwTime = GetTickCount(); ping_packet.icmp_header.checkSum = ip_checksum((USHORT*)&ping_packet, sizeof(ping_packet)); } int Ping::UnPackPingPacket()
{ return 0; } int Ping::SendPacket()
{ PingPacket ping_packet; PackPingPacket(ping_packet); int retValue = sendto(sock, // Socket (const char*)&ping_packet, // Buffer sizeof(ping_packet), 0, // Flag (const sockaddr*)&dest, // The Pointer to Socket Address sizeof(dest)); // Size of Socket Address if (retValue < 0) { cout << "Error in send Packet, error code" << GetLastError() << endl; return GetLastError(); } return 0; } int Ping::ReceivePacket()
{ // effetive will be worse? IPHeader* recv_buf = (IPHeader*)new TCHAR[MAX_DATA_SIZE]; if (recv_buf == NULL) { return GetLastError(); } int fromlen = sizeof(source); int retValue = recvfrom(sock, (char*)recv_buf, MAX_DATA_SIZE, 0, (sockaddr*)&source, &fromlen); if (retValue < 0) { cout << "Error in receive packet, error code" << GetLastError() << endl; return GetLastError(); } else { // Decode ping packet DecodePingPacket(*recv_buf, retValue); } delete []recv_buf; recv_buf = NULL; return 0; } USHORT ip_checksum(USHORT* buffer, int size)
{ unsigned long cksum = 0; // Sum all the words together, adding the final byte if size is odd while (size > 1) { cksum += *buffer++; size -= sizeof(USHORT); } if (size) { cksum += *(UCHAR*)buffer; } // Do a little shuffling cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >> 16); // Return the bitwise complement of the resulting mishmash return (USHORT)(~cksum); } void ReadIPAddress(unsigned long IPAddress)
{ printf("%d.%d.%d.%d\n", UCHAR(IPAddress), UCHAR(IPAddress >> 8), UCHAR(IPAddress >> 16), UCHAR(IPAddress >> 24)); } int Ping::DecodePingPacket(const IPHeader& ip_header, const int recvPacketLen)
{ cout << "IPHeader->source_ip:"; ReadIPAddress(ip_header.source_ip); printf("IPHeader->total_len: %d\r\n", ip_header.total_len); printf("IPHeader->tos: %d\r\n", ip_header.tos); printf("IPHeader->ID:%d\r\n", ip_header.ID); printf("IPheader->ttl:%d\r\n", ip_header.ttl); USHORT ipheader_len = ip_header.h_len * 4; if (recvPacketLen < ipheader_len + ICMP_MIN) { // Packet is too small cout << "Receive packet is too small" << endl; return -1; } PingPacket *pingpacket = (PingPacket*)((char*)&ip_header + ipheader_len); if (pingpacket == NULL) { cout << "ICMP Header is NULL" << endl; return -1; } if (pingpacket->icmp_header.type == ICMP_REPLAY) { cout << "Reply Packet" << endl; cout << "time:" << int (GetTickCount() - pingpacket->dwTime) << endl; } return 0; } main.cpp
#include "PING.H" int main() { Ping myping; if (myping.StartClient()) { cout << "Ping Machine Successfully!" << endl; } else { cout << "Ping Machine Error!" << endl; } return 0; } 篮球 岁月如梭.
已经半年没有碰篮球了, 想想当年在软件学院也是打组织后卫的. 现在一上球场已经两腿发麻了, 多蹦几下就有抽筋的感觉.
皑皑, 以前偶尔也能小飞一下,现在纯粹是擦着地板打球. 估计跳得就只有一块肥皂那么高.
不过理论倒是一点没拉下, 周末必看NBA. 看看孙伟平指导那解说,真叫一专业,每次都能说到点子上: miss match, side-in-out.
真很过瘾.
呵呵,祝大家有个愉快的周末.
November 29 百度音乐怎么做的啊 以前没觉得, 突然发现百度音乐真是做得牛B啊.
不知道大家注意到这个细节没有, 百度音乐的歌词和音乐是同步的. 歌手每唱一句,就会显示相应的歌词.
有谁知道大概原理,赐教. November 27 浮躁的人啊 卖盗版光盘的就是搞IT的,
写点BLOG的就是文艺青年,
...
用记事本连个hello,world都写不出来,还在谈什么struts, JVM.
连个三步上篮就不会,就笑人家邓肯的罚球,妈妈的.
摆脱,我已经是菜鸟了,你丫撑死就一菜虫.
November 20 怀念下以前的时光小时侯其实蛮喜欢画画的, 不过现在估计连最最基本的铅笔素描也不会了. 不过小时候喜欢和隔壁邻居玩一种游戏,就是拿出一大张纸,然后每个人半小时画各种各样的太空军舰啊什么的.然后开始"石头,剪子,布", 用自己的"战舰"把对方的毁掉.类似于"太平天国"那种玩法吧,但最富激情的是"构造"自己的舰队的时候.而最伤心的时刻是自己的舰队被人家毁掉.皑皑, 真怀念童年的那段时光啊.
后来上了小学, 就是在动画片中度过的. "圣斗士"估计影响了一代人, 呵呵,我最喜欢一辉了.其实,现在的漫画有很难超越它的了,至少从叙事模式上来说很难突破了.
再后来就是初中了, 就是在"灌篮高手"和"ps足球"当中度过了. 嘿嘿,ps足球到现在我已经玩了十年了. 不知道ps3的足球是什么样子的呢?而"灌篮高手"也造就了一帮爱耍cool的小男生, 自从那部动画片播出以后, 我猛然发现很多男生背个包,留着"流川枫"式发型,一脸没表情的样子.
最后就是高中了, 每天都在疯打篮球,不过水平和身高没见长. 对了,从那时候开始喜欢听周杰伦的歌.
October 29 到目前为止见过的牛儿们 一. 老牛在初学c++时候, 一晚上写出Othell.
二. 一师哥写的汇编语言IDE,不过编译器是用别人的.
三. 一天实现一个网络协议.(保密)
四. 用c写设计模式.(保密)
五. 朱朱写的英语智能输入法.
六. 老张web中的"我的电脑"
|
||||||
|
|