Windows sockets 获取 IP,wireshark 使用 - 图文

更新时间:2024-06-21 22:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

网络编程技术实验报告 实验名称 Zuozhe 实验一 网络编程基础训练 Lenglei 实验日期 12/12/2014 实验报告要求: 1.实验目的 2.实验要求 3.实验环境 4.实验作业 5.问题及解决 6.思考问题 7.实验体会 【实验目的】 掌握Wireshark的基本用法,掌握netstat的基本用法,能够使用这些工具对网络应用程序的传输过程进行捕获、观察和状态分析;了解Windows Sockets API的基本函数功能,掌握Windows Sockets的编程环境配置,掌握网络程序设计的基本过程。 【实验要求】 1、下载安装Wireshark,熟悉捕获、查看、过滤、查找等基本方法,对用户飞秋文件传输、文字聊天等行为进行网络通信过程分析。 2、熟悉netstat命令,查看用户使用网络应用程序过程中对系统网络状态的改变。 3、使用Windows Sockets的API函数获得本机的IP地址。 4、使用Windows Sockets的API函数获得给定域名的IP地址。 【实验环境】 Wireshark 【实验作业】 1.安装wireshark: 2.捕获:

3.查看 4.过滤 >> 在filter里输入protocol的类型,如tcp、ip、arp………… >> 这里我输入tcp,过滤后可以看到这样的:

5.飞秋通信分析: 飞秋通信过程: 1.当我在输入时,但还未发送,飞秋会自动向对方发送一个长度为111的包,只要我没发送这个信息,他机会一直发送这个包,估计这个包的作用是让对方确认我方准备给对方发数据, 2.当我方点击发送后,我方会先给对方发一个长度为116的包,这个应该是告知对方已经将数据包发过来了。

然后是一个长度为111的包,

紧接着,对方会回复我一个长度为374的包,估计这个包的作用是对方在向我说明自己已经准备好接收我发的包了。

然后就是我发的包的过程,

然后对方回复我,表示接受到数据:

具体流程如下图:

6.nestat的使用: 1)netstat命令如下: 根据命令行的命令的提示: Netstat –a 显示所有连接和可侦听的端口

netstat -b 显示连接所涉及的程序:

从这里可以看到程序和连接间的关系。

二、windows Sockets 的使用:

1.使用Windows Sockets的API函数获得本机的IP地址

关键函数:gethostname()和gethostbyname(const char * name);

代码: /*

**copy right @ lenglei **

**Windows Sockets API 的基本调用步骤:

**1.调用WSAStartup(), 实现 Windows Sockets DLL的初始化 **2.使用 Windows Sockets API中的函数

**3.调用WSACleanup(),注销程序,释放资源

*/

#include #include #include #include

#pragma comment(lib,%using namespace std;

int main() {

WSADATA wsaData; char* hostName; struct in_addr addr;

//初始化windows Sockets

//WSAStartup调用成功返回0 if(0!=WSAStartup(MAKEWORD(2,2),&wsaData)){ cout<<\ return 1; }

//获取主机信息 char name[256]; hostent* remoteHost;

gethostname(name, sizeof(name)); remoteHost = gethostbyname(name); if (remoteHost != NULL){ int i = 0; while (remoteHost->h_addr_list[i] != 0){ addr.s_addr = *(u_long*)remoteHost->h_addr_list[i++]; cout << \ } }

//释放

WSACleanup();

system(\ return 0; }

2. 使用Windows Sockets的API函数获得给定域名的IP地址 关键函数:gethostbyname(const char * name); /*

**copy right @ lenglei **

**Windows Sockets API 的基本调用步骤:

**1.调用WSAStartup(), 实现 Windows Sockets DLL的初始化 **2.使用 Windows Sockets API中的函数

**3.调用WSACleanup(),注销程序,释放资源 */

#include #include #include #include

#pragma comment(lib,%using namespace std;

int main() {

WSADATA wsaData; char* hostName; struct in_addr addr;

//初始化windows Sockets

//WSAStartup调用成功返回0 if(0!=WSAStartup(MAKEWORD(2,2),&wsaData)){ cout<<\ return 1; }

//获取主机信息 string name;

hostent* remoteHost;

while (cin >> name){ remoteHost = gethostbyname(name.c_str()); if (remoteHost != NULL){ int i = 0; while (remoteHost->h_addr_list[i] != 0){ addr.s_addr = *(u_long*)remoteHost->h_addr_list[i++]; cout << \ } } }

//释放

WSACleanup();

system(\ return 0; }

实验结果:

【实验中出现问题及解决方法】

问题就是实验教材感觉有点过时,我用vs2013编的,里面有的东西用不了,不过我在微软官方论坛上找到了解决方案。

【思考问题】 个人感觉还是用python写网络程序比较方便,windows scokets 感觉好麻烦,不过c语言嘛,很底层的东西,效率很高啦 【实验体会】 实验比较有意思,对网络编程有了浓厚的兴趣,下一步打算更加深入的学习 成绩 优 良 中 及格 不及格 教师签名: 日期:

本文来源:https://www.bwwdw.com/article/kqh3.html

Top