I am trying to setup my own dns server, using bind on centos 6.5. Because I do not know much about it, I am working an several tutorials found in google.
All the tutorials use an internal ip, like 192.168.1.98 etc, however, it might sound silly, but I cannot find an internal ip on my VPS. So my question is this: should I configure bind using my static ip?
More Information:
I have read many tutorials on how to find the internal ip, but unfortunately everywhere appears my static ip.
I know I have understood something wrong, but cannot configure what.
There no point binding a nameserver to an interface with an RFC1918 address if that's done on a remote machine, which can't be reached by that address over the net. I assume your VPS is remote. You ought to ask yourself "Who is supposed to be able to query my name server". If the answer includes anybody not sitting at a machine connected to the local network your VPS is on, then yes, you need to bind it to the public address. Which raises the question, about "should I configure bind using my static ip?": what configuration do you refer to? Because most likely your nameserver will bind itself already to all interfaces it can find, rendering the need to tell where to bind it to unnecessary. So you may refer to some part of configuration you have chosen to not disclose what part that might be.
Related
I'm experimenting with Cesanta's Mongoose server/"client" networking library in C. This is in Windows 7 x64 using Pelle's C. I'm trying to make a LAN-capable text messaging app on port 90 as two dialog-as-main executables (server and client) to support 20 connections to the server. FWIW, I'm using a fast timer to call mg_mgr_poll(&mgr, 0) which retains UI responsiveness and uses very little CPU.
Cesanta gives good examples of server communication setup and that works flawlessly. I can also get a client to connect to the server, but the server's IP address must be used in mg_connect().
Since the server's hostname is public to the LAN, I was hoping to ask the LAN for this host's IP. I had this working in VB awhile ago:
Dim host As New IPHostEntry
host = Dns.GetHostEntry(hostName)
Return host.AddressList.GetValue(0)
However as the VB project got bigger, VB got stranger and much more difficult, so I migrated to good old C. (Perhaps it was falling back to a NetBIOS name query, dunno.) No, I'd rather not migrate again to C# or C++/VS.
The Cesanta documentation on DNS resolution is quite vague. Code like mg_connect(&mgr, "MyServerPC:90", ev_handler); simply crashes, despite mg_connect stating it will try and resolve hostnames.
Can Mongoose resolve a local (LAN) hostname, and how? Or is this futile, and should everything be done manually in Winsock?
i have the same issue as you.
First i think that the mg_connect should not crashes, only if you try to do something with the returned connection which is null.
Second, mongoose try to resolve the address using DNS from specific location at the registry and it's take the first address he can find.
The location is :SYSTEM\\ControlSet001\\Services\\Tcpip\\Parameters\\Interfaces
,check here in each of the interfaces.
i think there is a bug here (i am going to open an issues for it and also try to fix it and created a pull request).
Little update:
i have opend an issue and create a pull request about this issue.
https://github.com/cesanta/mongoose/issues/832
https://github.com/cesanta/mongoose/pull/833
Mongoose check each interface for the Value of NameServer and DhcpNameServer ,and return the first one (which is not empty) it can find but if it found an empty value for NameServer it doesn't check DhcpNameServer(and therefore miss the correct address) which will cause an error and direct the name resolving to a default server(i think it's google DNS -8.8.8.8).
You can fix this by going to the registry and adding the value of your DNS address to the registry key-NameServer
this is a comment from mongoose code:
/*
* See https://github.com/cesanta/mongoose/issues/176
* The value taken from the registry can be empty, a single
* IP address, or multiple IP addresses separated by comma.
* If it's empty, check the next interface.
* If it's multiple IP addresses, take the first one.
*/
I have read loads of Microsoft documentation regarding RPC programming and still do not figure out how do we get from RPC server the IP address of the connecting client.
I am sure there is a simple way to get client IP address from server when connecting, but do not know how to do this :/
Thanks for helping, a simple pointer to a documentation would be great.
No - there is no documented way to accomplish this. Windows RPC by design abstracts the network transport (and associated metadata like network addresses) from it's clients.
If you really need something like this, you could bake it into your interface (e.g. implement a Connect() method where your client provides it's IP address that you could stash in a Context Handle). This assumes of course, that you can trust your clients to provide valid IP addresses...
It should be possible using RpcBindingServerFromClient. Quoting documentation for RpcBindingServerFromClient:
To query a client's address, an application starts by calling the RpcBindingServerFromClient function to obtain a partially bound server binding handle. The server binding handle can be used to obtain a string binding by invoking RpcBindingToStringBinding. The server can then call RpcStringBindingParse to extract the client's network address from the string binding.
UPDATE 16/05/2017: There is also undocumented function I_RpcServerInqRemoteConnAddress() that most likely return client IP address. But I didn't try it yet.
In C on linux, is there a canonical way to check that an IP address corresponds to localhost?
That is, I'm looking for a function is_localhost such that if my computer has an external IP of "1.2.3.4", then calling is_localhost on any of "localhost", "127.0.0.1" or "1.2.3.4" should return true, and any other IP will return false.
On a side note, how difficult is it to spoof this information - does checking that the host is localhost in this way guarantee that the request actually came from this computer?
For context, I'm writing a management interface for a server. I'd like to make the read-only management bits, like viewing a list of connections, available over the network, but for anything dangerous, like manually killing a connection, you should be doing it by running a script on the server itself.
Thanks!
I think you may be trying to solve your problem in the wrong way - If you want to restrict access to your remotely accessible application by checking if its the local host or not then checking the IP address would be a very bad way to do it. A PC can have any number of easily configurable network interfaces with IP addresses of your own choosing. So it would be very easy to work around.
You may want to look into adding some basic authentication or simply don't allow certain functions to be run remotely. There would be many ways to achieve this, but I think the scope of the question ends here with -- Don't rely on checking for the IP address. :)
I am experimenting with sockets and WP7.5. Currently, I am looking into the SetNetworkRequirement property of a socket. I am following this how-to, however, the OS seems to ignore the network requirement.
When I set the requirement to cellular, nothing happens when I do ConnectAsync, even when I am only connected to 3G. However, if I am connected to Wifi and use NonCellular, I can see in my tcpdump that a connection is made.
What is strange is that the SDK behavior is not as documented. When I set the requirement to cellular, I still get SocketError.Success, even though I can see that not connection is made. I am also able to send data using this socket, and SendAsync also receives SocketError.Success.
My question is, has anyone seen similar behavior or had any luck setting the network requirement to cellular? Another strange observation is that if I ask the phone to connect to a non-existent IP/port, I see a connection attempt on both interfaces. Based on this, I suspect there is some undocumentet caching going on.
Edit: I did some more debugging on this. The described behavior seems to be linked to be port. If I use any other port than 80, the phone connects with both Cellular and NonCellular.
Thanks in advance.
If anyone experiences the same behavior, everything points to this being an OS bug. There seems to be a problem related to servers running on port 80, as setNetworkRequirement is respected for every other port (that I have tried).
How can I obtain the client machine name and IP address when running my Silverlight 5 application out-of-browser (i.e. installed on the local machine and NOT running via the web)?
It looks like there's no way to gather this information using just Silverlight. You'd have to do something like this. The short version is you use an AutomationFactory to create an unmanaged object which contains that information (in this case, a WMI Win32_NetworkAdapterConfiguration object). That means this probably won't work on a Mac. If you need something truly cross platform, it seems like the way is to create a really simple web service that simply returns the requestor's IP and hostname.
I dont know what is your exact requirement .We had similar requirement some time back to get the local ip address to call a local service which is supposed to be present in client machine.
In that case we just built the local service url by hard coding the loopback address.ie localhost.