当前位置: 首页 > news >正文

Linux网络操作命令与函数全面总结

c8a09c625b002bfc04605dc407775605.jpeg

1. 引言

Linux作为服务器和开发平台,网络操作是其核心功能之一。本文旨在全面总结Linux系统中的网络操作方法,包括命令行工具和编程接口,帮助读者深入理解Linux网络管理的机制。

2. 命令行工具

2.1 ping 命令

ping 命令用于测试网络连接和延迟。

  • 基本使用ping [选项] 目标IP或域名
  • 常用选项
    • -c:指定发送报文的次数

2.2 ifconfig 或 ip 命令

ifconfig(较老版本)和 ip 命令用于配置和显示网络接口参数。

  • ip 基本使用
    • 显示接口:ip link show
    • 启用接口:ip link set dev 接口名 up
    • 配置IP:ip addr add IP地址/子网掩码 dev 接口名

2.3 netstat 或 ss 命令

netstat(较老版本)和 ss 命令用于显示网络连接、路由表、接口统计等网络信息。

  • ss 基本使用
    • 显示所有连接:ss -a
    • 显示监听端口:ss -l

2.4 traceroute 或 tracepath 命令

traceroute(较老版本)和 tracepath 命令用于跟踪数据包到达目的地的路径。

  • traceroute 基本使用traceroute [选项] 目标IP或域名
  • tracepath 基本使用tracepath 目标IP或域名

2.5 arp 命令

arp 命令用于操作系统的ARP缓存,显示或修改地址解析协议缓存。

  • 基本使用arp [选项]
  • 常用选项
    • -a:显示ARP缓存表

3. 编程接口

3.1 套接字编程

3.1.1 socket() 函数

socket() 函数用于创建套接字。

  • 函数原型int socket(int domain, int type, int protocol);
  • 示例代码
    #include <sys/socket.h>int main() {int sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0) {perror("Error creating socket");return 1;}close(sockfd);return 0;
    }
    

3.1.2 bind() 函数

bind() 函数用于绑定套接字到地址和端口。

  • 函数原型int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 示例代码
    #include <sys/socket.h>
    #include <netinet/in.h>int main() {int sockfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in serv_addr;serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = INADDR_ANY;serv_addr.sin_port = htons(8080);if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {perror("Error binding");return 1;}close(sockfd);return 0;
    }
    

3.1.3 listen() 和 accept() 函数

listen() 函数用于监听套接字上的连接,而 accept() 函数用于接受连接。

  • 函数原型
    • int listen(int sockfd, int backlog);
    • int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
  • 示例代码
    #include <sys/socket.h>
    #include <netinet/in.h>int main() {int sockfd = socket(AF_INET, SOCK_STREAM, 0);// 绑定套接字...listen(sockfd, 5);int newsockfd = accept(sockfd, NULL, NULL);if (newsockfd < 0) {perror("Error accepting");return 1;}close(newsockfd);close(sockfd);return 0;
    }
    

3.2 网络信息API

3.2.1 getaddrinfo() 函数

getaddrinfo() 函数用于获取与主机名或IP地址相关的网络信息。

  • 函数原型
    int getaddrinfo(const char *node, const char *service,const struct addrinfo *hints,struct addrinfo **res);
    
  • 示例代码
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>
    #include <stdio.h>int main() {struct addrinfo hints, *res;memset(&hints, 0, sizeof hints);hints.ai_family = AF_UNSPEC; // AF_INET or AF_INET6hints.ai_socktype = SOCK_STREAM;int status = getaddrinfo("www.example.com", "80", &hints, &res);if (status != 0) {fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));return 1;}// 使用获取到的地址信息...freeaddrinfo(res);return 0;
    }
    

3.2.2 getnameinfo() 函数

getnameinfo() 函数用于从网络地址结构中获取主机名和服务名。

  • 函数原型
    int getnameinfo(const struct sockaddr *sa, socklen_t salen,char *host, size_t hostlen,char *serv, size_t servlen, int flags);
    
  • 示例代码
    #include <sys/socket.h>
    #include <netdb.h>
    #include <stdio.h>int main() {struct sockaddr_in sa;char host[NI_MAXHOST], serv[NI_MAXSERV];// 假设sa已被填充正确的地址信息int status = getnameinfo((struct sockaddr *)&sa, sizeof(sa),host, sizeof(host),serv, sizeof(serv),NI_NUMERICHOST | NI_NUMERICSERV);if (status != 0) {fprintf(stderr, "getnameinfo: %s\n", gai_strerror(status));return 1;}printf("Host: %s\n", host);printf("Service: %s\n", serv);return 0;
    }
    

4. 网络监控和调试工具

4.1 tcpdump 命令

tcpdump 是一个强大的命令行工具,用于捕获和分析网络流量。

  • 基本使用tcpdump [选项]
  • 常用选项
    • -i:指定网络接口
    • -nn:不解析域名和服务名
    • port:指定端口

4.2 netcat 或 nc 命令

netcat(通常简称为 nc)是一个用于读写网络连接的实用工具。

  • 基本使用nc [选项] 目标IP或域名 目标端口
  • 常用选项
    • -l:监听模式
    • -p:指定源端口

5. 总结

Linux提供了丰富的网络操作工具和编程接口,使得网络管理变得灵活而强大。从基本的网络配置和监控到复杂的套接字编程和网络信息获取,Linux都能轻松应对。了解和掌握这些工具和接口,对于Linux系统管理和开发都是非常有价值的。在实际应用中,应根据具体需求选择合适的方法。

 


http://www.mrgr.cn/news/40343.html

相关文章:

  • 【老生常谈、查漏补缺】SpringBoot接收参数的几种方式图文详解
  • PCL 点云索引提取器
  • 创建视图提示:View‘s SELECT contains a subquery in the FROM clause.
  • 华为OD机试真题-荒岛逃生游戏-2024年OD统一考试(E卷)
  • 025.Oracle_DBMS_job定时任务
  • Java之线程篇七
  • 问:JAVA阻塞队列实现类及最佳实践?
  • 数据库 - Redis数据库
  • 如何实现多套环境的自动化测试?
  • 使用Jmeter进行http接口性能测试
  • 2024年9月总结及随笔之丢卡
  • Divide Rows and Conquer Cells: Towards Structure Recognition for Large Table
  • Debezium日常分享系列之:Debezium 3.0.0.CR2发布
  • JMeter 性能测试基本过程及示例
  • 开发平台 开放平台 集成平台 配置平台的区别
  • Java服务端数据库连接:连接池的资源优化
  • python itertools模块介绍
  • lambda表达式底层实现:反编译LambdaMetafactory + 转储dump + 运行过程 + 反汇编 + 动态指令invokedynamic
  • ICM20948 DMP代码详解(53)
  • 前端规范工程-5:Git提交信息规范(commitlint + czg)