高手坐镇(27)
编程学堂
VC 如何进行网络嗅探
题目难度:★★★★★
读者求助:电脑报的各位高手好,我是一名高二的学生。在高一的时候,我迷上了黑客工具,用过上百款黑客工具。如今对别人的黑客工具不感兴趣了,想学一些真东西,想开发属于自己的黑客工具,让别人羡慕我。
所以我准备在这个暑假好好学习编程知识(以前断断续续自学了很久),现在有一个问题想请教电脑报的各位高手,如何捕获并分析局域网中传输的数据包?最好附加上源代码,希望我的这个要求不过分!
程序员 故乡的云:你想开发的是不是网络嗅探器?网络嗅探器是黑客工具的一种,原理是通过网卡监听网络中的数据包。在这里,我提醒你一下,网络嗅探器用不好会带来法律问题,建议你不要外传给他人使用,自己玩玩就可以。
至于源代码不能给你,不过我可以给你介绍一种简单方法。通过setsockopt函数、bind函数、ioctlsocket函数和recv函数捕获数据包,关键代码如下(完整代码下载地址:http://www.icpcw.com/bzsoft):
typedef struct _TCP{ WORD SrcPort; // 源端口
WORD DstPort; // 目的端口
DWORD SeqNum; // 顺序号
DWORD AckNum; // 确认号
BYTE DataOff; // TCP头长
BYTE Flags; // 标志(URG、ACK等)
WORD Window; // 窗口大小
WORD Chksum; // 校验和
WORD UrgPtr; // 紧急指针
// 检查 Winsock 版本号,WSAData为WSADATA结构对象
WSAStartup(MAKEWORD(2, 2), &WSAData);
// 创建原始套接字
sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW));
// 设置IP头操作选项,其中flag 设置为ture,亲自对IP头进行处理
setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag));
// 获取本机名
gethostname((char*)LocalName, sizeof(LocalName)-1);
// 获取本地 IP 地址
pHost = gethostbyname((char*)LocalName));
// 填充SOCKADDR_IN结构
addr_in.sin_addr = *(in_addr *)pHost->h_addr_list[0]; //IP
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(57274);
// 把原始套接字sock 绑定到本地网卡地址上
bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in));
// dwValue为输入输出参数,为1时执行,0时取消
DWORD dwValue = 1;
// 设置 SOCK_RAW 为SIO_RCVALL,以便接收所有的IP包。其中SIO_RCVALL的定义为: #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
ioctlsocket(sock, SIO_RCVALL, &dwValue);
Python制作手机游戏
题目难度:★★
读者求助:最近我想要用Python编写一个类似于《涂鸦跳跃》的手机游戏,却不知道从何入手。听人说手机只能用Python编写程序,是不是真的?就两个问题,期待答案!
编辑 陈邓新:适合开发手机游戏的编程语言不少,绝不止Python一种,例如很多手机游戏都是用Java开发的,所以传言有误。开发手机游戏,首先考虑的是游戏逻辑,如何跳跃、如何定格等,然后才是界面。开发过程中,要注意游戏界面不要超出屏幕;游戏程序不要占用过多的内存,要及时释放不用的内存资源;代码尽量精简。
VB 清空回收站
题目难度:★★★
读者求助:我是VB的初学者,才学VB不到一个月,我在编写一个清空回收站的程序,程序无法正常运行,不知道是什么原因,希望得到电脑报高手的指点。
程序员 赵哥:代码的编写思路是正确的,但是有一些细节出了错误,编写代码后要记得检查,不要犯一些低级的错误。我给你一份正确的代码,你仔细对一对,关键代码如下(完整代码下载地址:http://www.icpcw.com/bzsoft):
Private Sub Command1_Click()
Dim retval As Long ' return value
' 清空回收站, 确认
retval = SHEmptyRecycleBin(RecycleBin.hwnd, "", SHERB_NOPROGRESSUI)
' 若有错误出现,则返回
If retval <> 0 Then ' error
retval = SHUpdateRecycleBinIcon()
End If
End Sub
Private Sub Command2_Click()
Dim retval As Long ' return value