高级编程之网络编程(二)
来源:互联网 发布:唐安琪烧伤真相知乎 编辑:程序博客网 时间:2024/05/16 19:31
常用网络测试工具:
1、telnet
默认的redhat 企业版本 和 win 8 以上系统不再支持该程序。
早期用于远程管理网络设备的系统命令。
格式: telnet ip地址 端口
eg: telnet 192.168.0.1 8888
注意:断开可以不写,默认链接的是23 号端口。
2、netstat 测试网路端口的使用情况。
netstat -lnp |grep 8888===>查看所有链接中端口是8888 的程序。
netstat -n ==》列出当前系统中的网络程序。
netstat -n -t ===>只列出TCP协议的网络程序。
netstat -n -u ===>只列出UDP协议的网络程序
netstat -n -i ===>列出当前物理接口上的数据流量
3、ping
ping ip地址
ping 域名
4、arp 地址解析命令 ===》列出当前系统中所有链接本机的主机ip+mac信息
arp -a ==>列出所有win链接信息
arp -an ===> 列出所有linux的链接信息
arp -d ===>win 全部删除
linux arp -d ip地址
5、抓包工具
5.1 wireshark ===>windows linux
rpm -ivh wireshark-* libsmi-0.4.8-4.el6.i686.rpm
过滤规则:
1、根据ip地址过滤: ip.src == x.x.x.x
ip.dst == x.x.x.x
2、根据端口过滤: tcp.srcport == xx;
tcp.dstport == xx;
udp.srcport == xx;
udp.dstport == xx;
3、根据协议过滤:
tcp udp icmp ....
4、任意组合以上条件进行过滤
与关系: and
或关系: or
练习:同桌之间互相ping对方主机,并抓包查看是否有该数据包存在。
5.2 tcpdump ===>linux ===>默认安装
1、tcpdump -n ===>在默认接口上抓包
2、tcpdump -n -i eth0 ===>在指定的eth0接口上抓包
3、tcpdump -n -p tcp ===>根据TCP协议抓包
4、tcpdump -n src xx.xx.xx.xx ===》根据源地址抓包
dst xx.xx.xx.xx
5、tcpdump -n port xx ===>根据端口来抓包
-n src port xx
-n dst port xx
-n tcp port xx
-n udp port xx
6、tcpdump -n -x src xx.xx.xx.xx
===》将数据包中源地址是 xx.xx.xx.xx 的
数据内容详情显示到屏幕
7、混合抓包
与关系: and
或关系: or
练习:
同桌之间启动TCP程序,用抓包工具抓取三次握手的过程。
并查看数据的来源和去向,同时要分析代码找出服务器
和客户端代码中建立三次握手的函数是哪个?
客户端: connect()
服务器: listen()
四次挥手
================================================================
UDP 编程
服务器端:socket() ==>bind()==>recvfrom()/sendto()==>close()
客户端: socket()===>sendto()/recvfrom()===>close()
0、socket()函数的参数二调整为:SOCK_DGRAM ///用户数据报套接字
1、ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
功能:从buff中获取len长度的数据,用sockfd套接字以flag方式发送数据
给地址是dest_addr的主机。
参数:sockfd 用来发送数据的本地套接子id
buff 要发送的数据
len 要发送的数据长度
flag 发送方式 0 阻塞发送
dest_addr 目标主机的地址信息
addrlen 目标主机地址的长度。
返回值:成功 返回小于等于len的数据长度。
失败 -1;
2、 ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
功能:从sockfd套接字中获取len长度的数据到buff内存中。
数据的来源是src_addr 的地址。
参数:sockfd 要获取数据的套接字id
buff 要存储数据的内存
len 要获取的数据长度
flags 获取数据的方式
src_addr 数据来源,如果是NULL 表示不关心来源
如果要获取源信息,需要事先定义变量
addrlen 源地址长度。
返回值:成功 小于等于len的数据长度
失败 -1;
练习:
1、通过以上函数学习,完成两台主机之间的简单UDP聊天程序。
2、继续完善以上程序,可以完成两台主机之间的文件传送。
3、继续完善,可以完成多人同时在线的UDP聊天室。
UDP聊天室:
server 端:
注册功能,允许任意新用户以IP+port的方式注册一个
账户。
广播功能:所有用户的上线,下线要通知在线用户。
消息转发功能:在线用户的消息要转发给其他用户。
client端:
上线注册,通知服务器上线并注册
接受消息,服务器的消息要用独立的进程来接受显示
下线通知,客户端离开时候要通知服务器。
- 高级编程之网络编程(二)
- python高级编程(二)--网络编程
- 高级编程之网络编程(一)
- 高级编程之网络编程(三)
- 高级编程之网络编程(四)
- UNIX环境高级编程-读书笔记-网络编程(二)
- IOS高级编程(网络编程二)
- 高级编程之目录(二)
- 高级编程之进程(二)
- 高级编程之线程(二)
- 网络编程之二
- 最简洁完整的Java高级教程之二(数据结构、集合、网络编程、多线程)
- Java高级视频_网络编程(二)
- QT分析之网络编程(二)
- QT分析之网络编程(二)
- java网络编程之TFTP(二)
- Android之Http网络编程(二)
- Android开发之网络编程(二)
- 【Jieba】json数据处理-提取与分词
- leetcode81---Search in Rotated Sorted Array II
- linux Futex
- 用PHPExcel从xlsx中获取的时间的处理
- 表空间
- 高级编程之网络编程(二)
- HDU 1024 最大m个子段和滚动数组
- ProGuard 应用Gradle Task
- 哈理工OJ 1580 Tell me the length(模拟+找规律)
- Shell commands
- cmd有关jar的几个命令
- 高效的使用 top
- ADT开发中的一些优化设置:代码自动补全等
- Paint的画Text(drawText)最全解析