相关疑难解决方法(0)

用Python ping一个站点?

基本代码是:

__PRE__

我怎么能ping一个网站或地址?

python network-programming ping

72
推荐指数
8
解决办法
21万
查看次数

ICMP套接字(linux)

是否可以在IP协议下使用ICMP套接字?也许是这样的:

socket(PF_INET, <type>, IPPROTO_ICMP)?

我应该在<type>字段中放入什么?我看到了一些使用SOCK_RAW的例子,但这不会阻止操作系统处理IP协议的工作吗?

另一件事.操作系统如何知道应该将ICMP数据报发送到哪个进程,因为该协议没有涉及端口?

sockets linux icmp

9
推荐指数
2
解决办法
2万
查看次数

如何使用C套接字ping

  • 编译器:Code :: Blocks(GNU GCC)
  • 平台:Windows(x86)
  • 包括:winsock.h winsock2.h(ws2_32也链接)

我目前正在尝试编写一个程序,该程序将读取包含IP地址列表的文本文件,并分别ping每个IP地址.如果主机响应ping,则主机的IP地址将被复制到用户指定的借调文件中.不经意的是,这是我第一次使用C的套接字库,我找不到关于如何使用C进行ping的好教程.据我所知,我找到了几个教程.我需要在IP数据报中包含一个ICMP头,它是一个包含ICMP类型,代码和校验和的结构.但我不知道该怎么做,我应该自己声明结构还是在头文件中声明?我假设它在一个标题中但是教程相互矛盾的确切地说明了它的位置.我厌倦了包括icmp.h和netinet/icmp.h,但我的编译器抱怨它们不存在所以我创建了自己的结构.

    struct echo_request
    {
        char type; // Type
        char code; // Code
        short checksum; // Checksum
        short id; // Identification
        short seq; // Sequence
        int time; // Time
        char data[16]; // Data
    };
Run Code Online (Sandbox Code Playgroud)

我认为我可能能够逃脱它,但我甚至无法编译我的程序,因为我的编译器说in_cksum()(校验和生成器)是未定义的.

总结我的问题,我应该包括哪些头文件,如何创建ping数据包,我使用正确的校验和生成器函数,ping是否应该指向端口80,我使用的套接字应该是RAW还是DGRAM?

这是我到目前为止,请注意我故意遗漏了错误检查.

    int socket_descriptor = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);

    struct sockaddr_in address; //Initialize address struct
    memset(&address, 0, sizeof(address)); //Clear address struct

    //Declare address
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = inet_addr(ipaddress);
    address.sin_port = htons(80);

    //Bind socket to address
    bind(socket_descriptor, (struct sockaddr *)&address, …
Run Code Online (Sandbox Code Playgroud)

c sockets windows ping icmp

8
推荐指数
1
解决办法
1万
查看次数

如何使用本机python执行ping或traceroute?

我希望能够在Python中执行ping和traceroute而无需执行相应的shell命令,因此我更喜欢本机python解决方案.

python ping traceroute

6
推荐指数
2
解决办法
2万
查看次数

如何在python中执行ping或traceroute,在生成时访问输出?

早些时候,我问过这个问题:

如何使用本机python执行ping或traceroute?

但是因为python没有以root身份运行,所以它无法打开在本机python中执行ping/traceroute所需的原始ICMP套接字.

这让我回到使用系统的ping/traceroute shell命令.这个问题有几个使用该subprocess模块的例子似乎运作良好:

用Python ping一个站点?

我还有一个要求:我需要能够在生成时访问输出(例如,对于长时间运行的traceroute.)

上面的示例都运行shell命令,然后只有在命令完成后才能访问完整的输出.有没有办法在生成时访问命令输出?

编辑:根据Alex Martelli的回答,这是有效的:

import pexpect

child = pexpect.spawn('ping -c 5 www.google.com')

while 1:
        line = child.readline()
        if not line: break
        print line,
Run Code Online (Sandbox Code Playgroud)

python ping traceroute

3
推荐指数
2
解决办法
1万
查看次数

简单的ping实现

我需要简单的ping,如果目标无法访问,将返回一些浮点数或无.我使用的是Python 3和Windows,并且不想使用标准ping,因为我必须从shell解码字节并解析结果.我对ICMP协议的实现一无所知,所以准备使用库是最好的选择.

python networking ping python-3.x

2
推荐指数
1
解决办法
2万
查看次数