小编Ben*_*ale的帖子

在Linux C中检索DHCP分配的域后缀

我试图在ANSI C(Linux)中以编程方式检索我的主机的本地域后缀.例如:我的机器是ironside.0ffnet.net,我想检索"0ffnet.net".

我已经看过许多帖子通过使用getnameinfo()和getaddrinfo()来解决这个问题,但是看起来这些函数从/ etc/hosts文件中提取了它们对于机器本地的任何接口地址的信息.

如果我的机器通过DHCP分配了一个地址(和相应的域后缀),则/ etc/hosts文件不会更新,而是将此信息存储在/etc/resolv.conf中,例如:

dfex@ironside:~/hush$cat /etc/resolv.conf 
domain 0ffnet.net
search 0ffnet.net
nameserver 139.130.4.4
Run Code Online (Sandbox Code Playgroud)

因此,getnameinfo()和getaddrinfo()只需使用/ etc/hosts信息返回机器的主机名,不带后缀,如下所示:

dfex@ironside:~/hush$ cat /etc/hosts
::1             ironside localhost6.localdomain6 localhost6
127.0.1.1       ironside
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
Run Code Online (Sandbox Code Playgroud)

有没有人知道一个函数会在不诉诸system()调用的情况下获取这些信息?我一直在梳理Beej的指南而没有太大的成功.

c linux dns network-programming

7
推荐指数
1
解决办法
1581
查看次数

BeautifulSoup 类型错误

我遇到了 BeautifulSoup(更具体地说是 xml 解析器)的问题,其中似乎将“名称”作为标签属性重载了一些底层函数。

鉴于以下代码:

#!/usr/bin/env python3

from bs4 import BeautifulSoup

siteconfig="""
<?xml version="1.0" encoding="utf-8"?>
<sites version="180201">
  <site name="au" location="oceana">
    <addresslist="IPv4">
      <address>192.168.1.10/32</address>
      <address>192.168.2.10/32</address>
    </addresslist>
    <addresslist="IPv6">
      <address>fc00:07bc:5ae6:75d0::26/128</address>
      <address>fc00:07bc:5ae6:75d1::26/128</address>
    </addresslist>
  </site>
  <site name="us" location="americas">
    <addresslist="IPv4">
      <address>192.168.4.13/32</address>
      <address>192.168.5.13/32</address>
    </addresslist>
    <addresslist="IPv6">
      <address>fc00:07bc:5ae6:75d0::45/128</address>
      <address>fc00:07bc:5ae6:75d1::45/128</address>
    </addresslist>
  </site>
</sites>
"""
soup = BeautifulSoup(siteconfig,"xml")
print(soup.find("site", name="us"))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Traceback (most recent call last):
  File "./siteConfig.py", line 33, in <module>
    print(soup.find("site", name="us"))
TypeError: find() got multiple values for argument 'name'
Run Code Online (Sandbox Code Playgroud)

但是,如果我将最后一行更改为:

print(soup.find("site", location="americas"))
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

<site location="americas" name="us">
  <addresslist>="IPv4"&gt;
    <address>192.168.4.13/32</address>
    <address>192.168.5.13/32</address> …
Run Code Online (Sandbox Code Playgroud)

python xml beautifulsoup

0
推荐指数
1
解决办法
564
查看次数

标签 统计

beautifulsoup ×1

c ×1

dns ×1

linux ×1

network-programming ×1

python ×1

xml ×1