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_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系统管理和开发都是非常有价值的。在实际应用中,应根据具体需求选择合适的方法。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/885474.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

css的背景background属性

CSS的background属性是一个简写属性&#xff0c;它允许你同时设置元素的多个背景相关的子属性。使用这个属性可以简化代码&#xff0c;使其更加清晰和易于维护。background属性可以设置不同的子属性。 background子属性 定义背景颜色 使用background-color属性 格式&#x…

了解Webpack并处理样式文件

目录 引入定义安装和使用配置文件命令配置单独文件指定文件 处理样式css-loader使用 style-loaderless-loaderPostCSSpostcss-loaderpostcss-preset-env 引入 随着前端的快速发展&#xff0c;目前前端的开发已经变的越来越复杂了&#xff1a; 比如开发过程中我们需要通过模块化…

python UNIT 3 选择与循环(2)

目录 1。循环的优化 经典优化分析&#xff1a; 未优化的代码&#xff1a; 细节分析&#xff1a; 优化后的代码&#xff1a; 优化的细节&#xff1a; 性能对比 优化的关键在于&#xff1a; 经典习题讲解&#xff1a;(紫色的解析请重点关注一下) 1。例三 个人代码解析…

Qt网络编程——QTcpServer和QTcpSocket

文章目录 核心APITCP回显服务器TCP回显客户端 核心API QTcpServer用于监听端口和获取客户端连接 名称类型说明对标原生APIlisten(const QHostAddress&, quint16 port)方法绑定指定的地址和端口号&#xff0c;并开始监听bind和listennextPendingConnection()方法从系统中获…

大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Java-IO模型

所谓I/O就是计算机内存与外部设备之间拷贝数据的过程。由于CPU访问内存的速度远远高于外部设备&#xff0c;因此CPU是先把外部设备的数据读到内存里&#xff0c;然后再进行处理。对于一个网络I/O通信过程&#xff0c;比如网络数据读取&#xff0c;会涉及两个对象&#xff0c;一…

Ubuntu 开机自启动 .py / .sh 脚本,可通过脚本启动 roslaunch/roscore等

前言 项目中要求上电自启动定位程序&#xff0c;所以摸索了一种 Ubuntu 系统下开机自启动的方法&#xff0c;开机自启动 .sh 脚本&#xff0c;加载 ROS 环境的同时启动 .py 脚本。在 . py 脚本中启动一系列 ROS 节点。 一、 .sh 脚本的编写 #!/bin/bash # gnome-terminal -- …

javaWeb,Maven

前端打包的程序放在nginx中 查看哪个程序占用了80端口号 Maven&#xff1a;

rk3399开发环境的介绍

零. 前言 由于Bluez的介绍文档有限&#xff0c;以及对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求&#xff0c;加上网络上其实没有一个完整的介绍Bluez系列的文档&#xff0c;所以不管是蓝牙初学者还是蓝牙从业人员&#xff0c;都有不小的难度&#xff0c;学习曲线也相…

生产绩效考核管理的六大指标

生产绩效考核管理的六大指标 绩效考核是指生产部所有人员通过不断丰富自己的知识、提高自己的技能、改善自己的工作态度&#xff0c;努力创造良好的工作环境及工作机会&#xff0c;不断提高生产效率、提高产品质量、提高员工士气、降低成本以及保证交期和安全生产的结果和行为…

极狐GitLab 17.4 升级指南

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab https://dl.gitlab.cn/6y2wxugm 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文分享极狐GitLab 17.4 升级…

9.24作业

将昨天的My_string类中的所有能重载的运算符全部进行重载 、[] 、>、<、、>、<、! 、&#xff08;可以加等一个字符串&#xff0c;也可以加等一个字符&#xff09;、输入输出(<< 、 >>) 代码如下 MyString.h #ifndef MYSTRING_H #define MYSTRING_…

检查一个CentOS服务器的配置的常用命令

在CentOS系统中&#xff0c;查看服务器配置的常用命令非常丰富&#xff0c;这些命令可以帮助用户快速了解服务器的硬件信息、系统状态以及网络配置等。以下是一些常用的命令及其简要说明&#xff1a; 1. 查看CPU信息 (1) cat /proc/cpuinfo&#xff1a;显示CPU的详细信息&…

react+antdMobie实现消息通知页面样式

一、实现效果 二、代码 import React, { useEffect, useState } from react; import style from ./style/index.less; import { CapsuleTabs, Ellipsis, Empty, SearchBar, Tag } from antd-mobile; //消息通知页面 export default function Notification(props) {const [opti…

国家推动工业制造业数字化转型的政策与措施综述

在全球化与信息化浪潮的推动下&#xff0c;工业制造业正经历着前所未有的数字化转型。这一变革不仅深刻重塑了生产方式与商业模式&#xff0c;更成为提升国家竞争力、促进经济高质量发展的关键驱动力。随着科技的飞速发展&#xff0c;数字化转型已成为工业制造业转型升级的必然…

基于微信小程序的健康管理系统(源码+定制+文档)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

叉车防撞系统方案,引领安全作业新时代

在现代工业的舞台上&#xff0c;叉车如同忙碌的“搬运工”&#xff0c;在仓储和制造环境中发挥着不可或缺的作用。然而&#xff0c;随着叉车使用频率的不断攀升&#xff0c;安全事故也如影随形&#xff0c;给企业带来经济损失的同时&#xff0c;更严重威胁着操作人员的生命安全…

拓扑结构的理解

拓扑结构是数学中的一个重要概念&#xff0c;主要研究空间的性质及其在连续变换下的保持不变的特征。它是拓扑学的基础内容之一&#xff0c;广泛应用于多个领域&#xff0c;包括数学、物理、计算机科学等。 基本概念 1. 拓扑空间&#xff1a; 一个集合 X 和一个拓扑T 的组合…

毕业设计选题:基于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…

基于Python可视化的学习系统的设计与实现(源码+文档+调试+答疑)

文章目录 一、项目介绍二、视频展示三、开发环境四、系统展示五、代码展示六、项目文档展示七、项目总结 大家可以帮忙点赞、收藏、关注、评论啦 &#x1f447;&#x1f3fb; 一、项目介绍 随着计算机技术发展&#xff0c;计算机系统的应用已延伸到社会的各个领域&#xff0c…