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

news2024/11/19 16:30:02

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_INET6
        hints.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.coloradmin.cn/o/2181875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验OSPF路由协议(课内实验)

实验1&#xff1a;OSPF路由协议 实验目的及要求&#xff1a; 通过实验&#xff0c;能够理解链路状态型路由协议OSPF协议的工作原理&#xff0c;掌握如何实现单区域 OSPFv2配置指令&#xff0c;能够熟练的应用各种OSPF协议相关的配置指令完善网络设计。掌握验证OSPFv2网络连接…

软件开发人员绩效考核方案(参考)

1、产品&运营绩效考核表 2、开发绩效考核表 3、测试绩效考核表 4、CPI指标库 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查…

像AI一样思考

我感觉每个人都应该通过Coze平台 https://www.coze.cn/ 创建一个属于自己的Bot。 为什么要创建Bot&#xff1f; 很多时候我们的思维会受各种因素的影响&#xff0c;如感情、知识盲区、心态等&#xff0c;最终导致我们做的决定缺乏逻辑或者考虑不全面。但AI不一样&#xff0c;…

armbian安装docker

最近又搞了台瑞莎Radxa 3E &#xff0c;从零开始部署unbuntu环境&#xff0c;发现是真曲折啊&#xff0c;虽然有点前车之鉴了 在Armbian上安装Docker&#xff0c;可以按照以下步骤操作&#xff1a; 1、更新软件包列表&#xff1a; sudo apt-get update 2、安装必要的软件包…

leetcode|刷算法 线段树原理以及模板

线段树出现的题目特征 线段树使用的题目。每次操作都要得到返回结果的。 比如 699. 掉落的方块 - 力扣&#xff08;LeetCode&#xff09; 2286. 以组为单位订音乐会的门票 - 力扣&#xff08;LeetCode&#xff09; 1845. 座位预约管理系统 - 力扣&#xff08;LeetCode&#…

【韩顺平Java笔记】第4章:运算符

文章目录 61. 上一章总结62. 算术运算符介绍62.1 运算符介绍62.2 算术运算符介绍62.3 算术运算符一览 63. 算术运算符使用64. 算术运算符练习165. 算术运算符练习266. 67. 算术运算符练习3,468. 关系运算符介绍68.1 关系运算符介绍68.2 关系运算符一览 69. 关系运算符使用70. 逻…

2024暄桐“静定的滋养”|静坐篇之林曦老师聊静坐

我们都喜爱“静”&#xff0c;它是一种因能量充足而带来的稳定放松的状态。 正在报名中的暄桐《2024书法课程 第五阶“静定的滋养” | 从书法之美到生活之美——林曦老师的线上直播书法课》&#xff0c;除了书法进阶部分的内容之外&#xff0c;读书部分正是帮助我们加强对静定的…

Windows应急响应-PcShare远控木马

文章目录 应急背景木马查杀1.查看异常连接2.查看进程3.查看服务定位到注册表 开始查杀 入侵排查1.账户排查2.开机自启3.服务4.计划任务5.网络情况6.进程排查重启再排查一遍 应急背景 曲某今天想要装一款软件&#xff0c;通过网上搜索看到非官方网站进入后直接下载下来后进行安…

毕业设计选题:基于ssm+vue+uniapp的购物系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

DSPy101

DSPy 介绍 DSPy&#xff08;Declarative Self-improved Language Programs in Python&#xff09; 是一个用于系统化和增强在流水线内使用语言模型的框架&#xff0c;它通过数据驱动和意图驱动的系统来优化大型语言模型&#xff08;LLM&#xff09;的使用。 DSPy 的核心是模块…

我的笔记本电脑之前可以直接用音量键调节音量,后来需要fn键加音量键才能调节,这是为什么?

我的笔记本电脑之前可以直接用音量键调节音量&#xff0c;后来需要fn键加音量键才能调节&#xff0c;这是为什么&#xff1f; 直接按 FnEsc就能解除Fn的锁定

信息安全数学基础(24)模为奇数的平方剩余与平方非剩余

前言 在信息安全数学基础中&#xff0c;模为奇数的平方剩余与平方非剩余是数论中的一个重要概念&#xff0c;特别是在密码学和安全协议中扮演着关键角色。当模数为奇数时&#xff0c;我们通常关注的是模为奇素数的平方剩余与平方非剩余&#xff0c;因为奇合数的情况更为复杂且…

【数学分析笔记】第4章第2节 导数的意义和性质(2)

4. 微分 4.2 导数的意义与性质 4.2.3 单侧导数 f ′ ( x ) lim ⁡ Δ x → 0 f ( x Δ x ) − f ( x ) Δ x lim ⁡ x → x 0 f ( x ) − f ( x 0 ) x − x 0 f(x)\lim\limits_{\Delta x\to 0}\frac{f(x\Delta x)-f(x)}{\Delta x}\lim\limits_{x\to x_0}\frac{f(x)-f(x_0)…

Golang | Leetcode Golang题解之第448题找到所有数组中消失的数字

题目&#xff1a; 题解&#xff1a; func findDisappearedNumbers(nums []int) (ans []int) {n : len(nums)for _, v : range nums {v (v - 1) % nnums[v] n}for i, v : range nums {if v < n {ans append(ans, i1)}}return }

OceanBase企业级分布式关系数据库

简介 OceanBase 数据库是阿里巴巴和蚂蚁集团不基于任何开源产品&#xff0c;完全自研的原生分布式关系数据库软件&#xff0c;在普通硬件上实现金融级高可用&#xff0c;首创“三地五中心”城市级故障自动无损容灾新标准&#xff0c;具备卓越的水平扩展能力&#xff0c;全球首…

使用微服务Spring Cloud集成Kafka实现异步通信(消费者)

1、本文架构 本文目标是使用微服务Spring Cloud集成Kafka实现异步通信。其中Kafka Server部署在Ubuntu虚拟机上&#xff0c;微服务部署在Windows 11系统上&#xff0c;Kafka Producer微服务和Kafka Consumer微服务分别注册到Eureka注册中心。Kafka Producer和Kafka Consumer之…

Ajax ( 是什么、URL、axios、HTTP、快速收集表单 )Day01

AJAX 一、Ajax是什么1.1名词解释1.1.1 服务器1.1.2 同步与异步1. 同步&#xff08;Synchronous&#xff09;2. 异步&#xff08;Asynchronous&#xff09;3. 异步 vs 同步 场景4. 异步在 Web 开发中的常见应用&#xff1a; 1.2 URL 统一资源定位符1.2.1 URL - 查询参数1.2.2 ax…

经典RCU锁原理及Linux内核实现

经典RCU锁原理及Linux内核实现 RCU锁原理 RCU锁第一个特点就是适用于读很多写很少的场景&#xff0c;那它和读写锁有什么区别呢&#xff1f;区别就是RCU锁读者完全不用加锁&#xff08;多个写者之间仍需要竞争锁&#xff09;&#xff0c;而读写锁&#xff08;不管是读优先、写…

https://www.aitoolpath.com/ 一个工具数据库,目前储存了有2000+各种工具。每日更新

AI 工具爆炸&#xff1f;别怕&#xff0c;这个网站帮你整理好了&#xff01; 哇塞&#xff0c;兄弟们&#xff01;AI 时代真的来了&#xff01;现在各种 AI 工具跟雨后春笋似的&#xff0c;噌噌噌地往外冒。AI 写作、AI 绘画、AI 代码生成……简直是要逆天啊&#xff01; 可是…

XSS | XSS 常用语句以及绕过思路

关注这个漏洞的其他相关笔记&#xff1a;XSS 漏洞 - 学习手册-CSDN博客 0x01&#xff1a;干货 - XSS 测试常用标签语句 0x0101&#xff1a;<a> 标签 <!-- 点击链接触发 - JavaScript 伪协议 --><a hrefjavascript:console.log(1)>XSS1</a> <!-- 字…