ping(1)

/*

ping program for learning IP protocol

    author: jeff
    date:    2014/10/25

*/

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>

static int ICMP_create();
static int opt_set(int sockfd);

int
main(int argc, char* argv[])
{
    int sockfd = ICMP_create();
    int optset = 0;
    if(sockfd != -1)
        printf("create socket ICMP success!\n");
    else
        printf("create socket ICMP failed [%d]!\n", errno);

    optset = opt_set(sockfd);
    if(optset != -1)
        printf("sock set success\n");
    else
        printf("sock set failed\n");

    return 0;
}

static int ICMP_create()
{
    return socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
}

static int opt_set(int sockfd)
{
    int on =1;
    return setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));
}
时间: 2024-08-01 00:52:34

ping(1)的相关文章

C# Ping 简单使用

编程过程中,有时候需要判断主机是否在线,最简单的方法就是使用Windows的Ping命令看看能否ping通.看到网上很多文章,说用C#去调用windows的ping.exe,然后解析返回的字符串.我觉得这种方式太麻烦了,就做一下简单判断,不想弄那么麻烦. 查了一下,C#专门提供了一个Ping类,与Windows下的ping命令类似: 命令空间: System.Net.NetworkInformation; 使用方法: bool online = false; //是否在线 Ping ping =

docker run常用命令及 解决 ubuntu镜像无法识别 ifconfig ping 命令

docker run -it     docker 前端启动 container容器           -d             后端启动 container容器           -p             固定端口映射            -P             不固定端口映射           --name         给生成的容器起名字docker ps:默认显示正在运行的container       ps -a 显示所有的container容器docker r

red hat7 系统可以ping通ip地址但是不能ping通域名

在red hat7中ifconfig后出现这样的情况,ens33是物理网卡,与eth0一样只是不同的名字.但是只能ping通ip地址不能ping通域名. 解决方法: 在文件 /etc/resolv.conf文件下更改nameserver的值 加上 nameserver 8.8.8.8  域名解析服务  nameserver 8.8.4.4为备用的 在文件 etc/sysconfig/network-scripts下修改 ifcfg-eth0 或者 ifcfg-ens33文件,设置静态ip地址,

redis error It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. SocketFailure on PING

应用redis出现如下错误 It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. SocketFailure on PING 参考stack overflow上文章 http://stackoverflow.com/questions/30895507/it-was-not-possible-to-connec

小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议,arp协议属于二层协议,它是基于广播的,所以不可路由.而ICMP协议是可以路由的,理论上可以使用icmp协议发现全球的ip,如果没有边界防火墙(禁止icmp的探测包)进行过滤的话,对目标主机进行扫描,则会收到相应的响应,从而进行捕捉[有边界防火墙的现象比较普遍],但是三层发现的扫描速度也较二层要慢

icmp实现ping

以前弄到的一段代码, 一个用原始套接字raw socket实现icmp协议ping工具 myping.c #include <stdio.h> #include <errno.h> #include <signal.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stri

ping查看设备网络是否可达

#!/bin/bash # 在centos系统上面执行 # 执行方法: sh centospingbjbk.sh iplist1.txt # 输入: iplist.txt(ip列表).警告,只能是ip,不能是host # 输出: faillist.txt(ping不通的ip列表).oklist.txt(ping通的ip列表) # yuanlong.zhou # 2015.09.25 iplist=$1 cat /dev/null > faillist.txt && cat /dev/

笔记本无线连接时(无本地连接) 与本地虚拟机相互ping通

桥接模式: 1.虚拟机选择 桥接模式 2. 虚拟网络桥接到的网络选择无线网卡(选择正在使用的网卡即可) 3.查看笔记本电脑无线网卡的IP地址  192.168.200.103 4.将虚拟机的IP设置为与笔记本无线网ip同一网段  192.168.200.x 如:192.168.200.104 5.设置成功 测试 PC <--> 虚拟机  相互能ping同

Linux下用C实现Ping监测与HTTP报文上传

有一个数据中心监测项目,命名为CPing,它的主要原理通过WEB进行前台统一配置管理,后台定期对数据中心相关设备执行Ping操作,并将结果及时写入到数据库. 该项目基于Linux平台部署,前端开发语言采用PHP,后台开发语言采用C,由于考量到项目的部署简洁性,后台开发的守护进程尽量不直接操作数据库,而是将需要写入的数据以HTTP的形式发送给PHP的WEB页面,由PHP完成写入操作.这样的好处是后台守护进程部署时不需要配置相关数据库接入环境. 下面给出一段后台代码,作用是执行Ping操作,并将结果

线上一个简单检测Ping状态的邮件报警脚本

Step1.安装sendmail来发邮件 # yum -y install sendmail # /etc/init.d/sendmail start # chkconfig sendmail on Step2.安装邮件客户端 # yum -y install mutt 2.1添加发件人信息,如下 # vim /etc/Muttrc set charset="utf-8"           #设置发邮件编码 set envelope_from=yes set rfc2047_para