其他分享
首页 > 其他分享> > 第十三章学习笔记

第十三章学习笔记

作者:互联网

第13章学习笔记

一、概述

本章论述了TCP/IP和网络编程,分为两个部分。第一部分论述了TCP/IP协议及其应用,具体包括TCP/IP栈、IP地址、主机名、DNS、IP数据包和路由器;介绍了TCP/P网络中的UDP和TCP协议、端口号和数据流;阐述了服务器-客户机计算模型和套接字编程接口;通过使用UDP和TCP套接字的示例演示了网络编程。第一个编程项目可实现一对通过互联网执行文件操作的TCP服务器–客户机,可让用户定义其他通信协议来可靠地传输文件内容。
本章的第二部分介绍了Web和CGI编程,解释了HTTP编程模型、Web页面和Web浏览器;展示了如何配置Linux HTTPD服务器来支持用户Web页面、PHP和CGI编程;阐释了客户机和服务器端动态Web页面;演示了如何使用PHP和CGI创建服务器端动态Web页面。

二、TCP/IP协议

TCP/IP(Comer 1988,2001;RFC1180 1991)是互联网的基础。TCP代表传输控制协议。IP 代表互联网协议。目前有两个版本的IP,即IPv4和IPv6。IPv4使用32位地址,IPv6则使用128位地址。本节围绕IPv4 进行讨论,它仍然是目前使用最多的IP版本。TCP/IP 的组织结构分为几个层级,通常称为TCP/IP堆栈。如图所示为 TCP/IP 的各个层级以及每一层级的代表性组件及其功能。

进程与主机之间的传输层或其上方的数据传输只是逻辑传输。实际数据传输发生在互联网(IP)和链路层,这些层将数据包分成数据帧,以便在物理网络之间传输。下图所示为 TCP/IP 网络中的数据流路径。

三、IP主机和IP地址

四、IP协议

IP协议用于在 IP主机之间发送/接收数据包。IP尽最大努力运行。IP 主机只向接收主机发送数据包,但它不能保证数据包会被发送到它们的目的地,也不能保证按顺序发送。这意味着IP 并非可靠的协议。必要时,必须在IP 层的上面实现可靠性。下图所示是IP头格式:

五、UDP/TCP

六、网络编程

int socket(int domain, int type, int protocol);       // domain:采取的协议族,一般为 PF_INET;type:数据传输方式,一般为 SOCK_STREAM;protocol:使用的协议,一般设为 0 即可。
                //成功时返回文件描述符,失败时返回 -1

int tcp_socket = socket(PF_INET, SOCK_STREAM, 0);

int udp_socket = socket(PF_INET, SOCK_DGRAM, 0);
struct sockaddr_in {
sa_family_t sin_family; // AF_INET for TCP/IP // port number
in_port_t sin_port; struct in_addr sin_addr;// IP address ); // internet address struct in_addr { // IP address in network byte order
s_addr;
uint32_t
);

在套接字地址结构中,
● TCP/IP 网络的 sin_family 始终设置为 AF_INET。

● sin_port包含按网络字节顺序排列的端口号。

●sin addr是按网络字节顺序排列的主机IP地址。

通用套接字地址结构:sockaddr

struct sockaddr
{
uint8_t           sa_len;
sa_family_t       sa_family; char              sa_data[14];
};
IPv6套接字地址结构

IPv6套接字地址结构在<netinet/in.h>头文件中定义 struct in6_addr
{
unit8_t s6_add[16];
 
};
#define SIN6_LEN
struct sockaddr_in6
{ 
uint8_t           sin6_len;
sa_family_t       sin6_family;
in_port_t         sin6_port;
uint32_t          sin6_flowinfo; struct in6_addr   sin6_addr;
uint32_t          sin6_scope_id;
};

新的struct sockaddr_storage足以容纳系统所支持的任何套接字地址结构。sockaddr_storage结构在<netinet/in.h>头文件中定义

struct sockaddr_storage
{
uint8_t       ss_len;
sa_family_t   ss_family;
};

openeuler实践

代码

运行截图

码云链接https://gitee.com/hai_wen_xu/ls/blob/master/test1.c

问题与解决思路

如何防止SQL注入攻击?

答:
1、使用参数化筛选语句

为了防止SQL注入,用户输入不能直接嵌入到SQL语句中。相反,用户输入必须被过滤或参数化。参数语句使用参数,而不是将用户输入嵌入语句中。在大多数情况下,SQL语句是正确的。然后,用户输入仅限于一个参数。

一般来说,有两种方法可以确保应用程序不易受到SQL注入攻击。一种是使用代码审查,另一种是强制使用参数化语句。强制使用参数化语句意味着在运行时将拒绝嵌入用户输入中的SQL语句。但是,目前对此功能的支持不多。

2、避免使用解释程序,这是黑客用来执行非法命令的手段。

3、防止SQL注入,但也避免一些详细的错误消息,因为黑客可以使用这些消息。标准的输入验证机制用于验证所有输入数据的长度、类型、语句和企业规则。

4、使用专业的漏洞扫描工具。

但是,防范SQL注入攻击是不够的。攻击者现在自动搜索和攻击目标。它的技术甚至可以很容易地应用于其他Web体系结构中的漏洞。企业应该投资于专业的漏洞扫描工具,如著名的Accunetix网络漏洞扫描程序。完美的漏洞扫描器不同于网络扫描器,它专门在网站上查找SQL注入漏洞。最新的漏洞扫描程序可以找到最新发现的漏洞。

标签:UDP,IP,笔记,学习,主机,TCP,第十三章,IP地址,接字
来源: https://www.cnblogs.com/kevin-hw/p/15603290.html