我需要通过 C/C++ 调用获取我的公共 IP 地址。我知道作为替代方案,我可以从“http://whatismyip.akamai.com”等外部链接获取
我写了一个示例来获取外部 IP 地址。但是我的程序没有返回外部 IP 地址。我正在获取内部 IP 地址。我在这里错过了什么吗?
如果无法通过这种方式,我可以读取 DNS 并获取 IP 地址吗?或者有什么方法可以使用 C API 以编程方式获取外部 IP 地址(不是通过访问某个网站)?
#include <stdio.h>
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
int main (int argc, const char * argv[]) {
struct ifaddrs * ifAddrStruct=NULL;
struct ifaddrs * ifa=NULL;
void * tmpAddrPtr=NULL;
getifaddrs(&ifAddrStruct);
for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
if (!ifa->ifa_addr) {
continue;
}
if (ifa->ifa_addr->sa_family == AF_INET) {
tmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
char …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 PHP 和 openssl 命令行加密数据,预期加密数据相同,但我得到不同的数据。
在 linux 上,这是我的 openssl -version
OpenSSL> version
OpenSSL 1.0.2k-fips 26 Jan 2017
Run Code Online (Sandbox Code Playgroud)
我试图传递 48 字节的数据,希望可以避免填充。但没有运气。我观察到 IV 是不同的,所以也尝试在 PHP 代码中使用 IV = 905E17D5F5E4939D0000000000000000。但是我收到警告 openssl_encrypt(): IV 传递的是 32 字节长,比所选密码预期的 16 字节长,截断
在命令行上尝试使用/不使用 -nosalt 选项。
<?php
// encrypt/decrypt string
$output = false;
$encrypt_method = "AES-256-CBC";
$key = '905e17d5f5e4939d48bd04ff47f9de906375b87b67068b2ce5d1bbbbc8dca291';
$iv = '905e17d5f5e4939d';
$string = "123456789ABCDEFG123456789ABCDEFG123456789ABCDEFG";
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
echo $output;
?>
nEUDtXM7OQt32YEx778BgqZfocXrNNA9AihkioWZo9ri9p11DtxUpTFO30AHUk41F9PUBLu6YlYu/mdLcOZ3Cg==
Run Code Online (Sandbox Code Playgroud)
linux命令行中的openssl:
echo "123456789ABCDEFG123456789ABCDEFG123456789ABCDEFG" |openssl enc -base64 -e -aes-256-cbc -K 905e17d5f5e4939d48bd04ff47f9de906375b87b67068b2ce5d1bbbbc8dca291 -iv 905e17d5f5e4939d -nosalt …Run Code Online (Sandbox Code Playgroud)